全部產品
Search
文件中心

Function Compute:使用函數角色授予Function Compute訪問其他雲端服務的許可權

更新時間:Sep 09, 2025

Function Compute使用日誌、VPC訪問、非同步呼叫目標服務等功能時,需要訪問其他的雲端服務的許可權。例如配置函數日誌時,使用者需要授權Function Compute對指定Logstore的寫入許可權,才能夠將函數日誌寫入Logstore。

為了簡化授權流程,Function Compute支援服務關聯角色 ,函數預設使用此服務關聯角色,函數不需要額外配置角色即可使用日誌、VPC訪問、非同步呼叫目標服務等功能。

如果使用者代碼邏輯需要訪問更多其他雲端服務,或需要更細粒度的授權,則需要通過為函數配置函數角色來授權。為函數配置角色後,調用函數時,Function Compute將自動代入該角色。

功能原理

Function Compute根據函數配置的角色,通過AssumeRole擷取一個臨時密鑰(STS Token),然後通過上下文中的參數Credentialscredentials將臨時密鑰傳遞給您的函數。此臨時密鑰包含了您所配置的許可權的所有資源,您可以在函數代碼中使用其訪問其他阿里雲服務。

臨時密鑰的有效期間為36小時,且不支援修改。函數的最大執行時間為24小時,因此,執行函數過程中,臨時密鑰不會到期。

不同的運行時,參數Credentialscredentials的位置不同,您可以點擊以下連結訪問對應的文檔。需要強調的是,當您使用自訂運行時或自訂鏡像運行環境時,臨時密鑰會被注入HTTP請求的Header中。

樣本:授予Function Compute訪問OSS的許可權

本文以授予Function Compute訪問Object Storage Service系統管理權限為例進行介紹。如果需要指定函數具有管理Object Storage Service服務的許可權,可以為該函數綁定一個角色,然後為此角色授予管理Object Storage Service的許可權。

前提條件

建立函數

操作步驟

步驟一:建立角色並授權

  1. 登入RAM控制台,在左側導覽列,選擇角色 > 建立角色

  2. 建立角色頁面,選擇可信主體類型雲端服務,選擇信任主體名稱Function Compute/FC,然後單擊確定

  3. 在彈出的建立角色對話方塊,設定角色名稱,如mytestrole,然後單擊確定,跳轉到角色詳情頁面。

  4. 許可權管理頁簽,單擊新增授權,在新增授權面板,按照以下步驟操作為角色授權。

    選擇資源範圍授權主體預設為選擇的目標角色,選擇所需系統策略或自訂策略,勾選對應策略左側的複選框,將自動將其添加到右側已選擇權限原則列表,然後單擊確認新增授權。更多資訊,請參見權限原則及樣本

    • 帳號層級:許可權在當前阿里雲帳號內生效。

    • 資源群組層級:許可權在指定的資源群組內生效。指定資源群組授權生效的前提是該雲端服務已支援資源群組。更多資訊,請參見支援資源群組的雲端服務

    本文樣本為管理Object Storage Service,因此,您需要為建立角色增加系統策略AliyunOSSFullAccess

    image

步驟二:為目標函數綁定角色

  1. 登入Function Compute控制台,在左側導覽列,單擊函數

  2. 在頂部功能表列,選擇地區,然後在函數頁面,單擊目標函數操作列的配置

  3. 在函數詳情頁面,選擇配置頁簽,單擊下方進階配置地區右側的編輯,在進階配置面板,展開許可權函數角色選擇步驟一建立並授予管理OSS許可權的角色mytestrole,然後單擊部署

步驟三:測試函數

測試已綁定角色mytestrole的函數是否有管理OSS的許可權。

  1. 在函數列表,單擊目標函數,然後選擇代碼頁簽,單擊測試函數右側的下拉式清單,選擇配置測試參數,測試參數樣本如下。

    {
       "endpoint": "http://oss-cn-hangzhou.aliyuncs.com",
       "bucket": "web****",
       "objectName": "myObj",
       "message": "your-message"
    }

    上述樣本中,bucket需替換為與函數相同的地區下您已建立的bucket名稱。

  2. 代碼頁簽的代碼編輯器中,編寫代碼,然後單擊部署代碼

    以Python內建運行時為例,您可以使用Function Compute為您提供的臨時密鑰訪問Object Storage Service。

    import json
    import oss2
    
    def handler(event, context):
        evt = json.loads(event)
        creds = context.credentials
        # 輸入使用者臨時密鑰,包括臨時Token。
        # 阿里雲帳號AccessKey擁有所有API的存取權限,建議您使用RAM使用者進行API訪問或日常營運。
        # 建議不要把AccessKey ID和AccessKey Secret儲存到工程代碼裡,否則可能導致AccessKey泄露,威脅您帳號下所有資源的安全。
        # 本樣本以從上下文中擷取AccessKey/AccessSecretKey為例。
        auth = oss2.StsAuth(creds.access_key_id, creds.access_key_secret, creds.security_token)
        bucket = oss2.Bucket(auth, evt['endpoint'], evt['bucket'])
        bucket.put_object(evt['objectName'], evt['message'])
        return 'success'
  3. 單擊測試函數,執行成功後,登入Object Storage Service控制台,找到目標Bucket,您可以看到目標對象內容已替換為測試參數中message的內容。

相關文檔

  • Function Compute3.0支援使用服務關聯角色最小化授權,關於服務關聯角色的權限原則內容,請參見AliyunServiceRoleForFC

  • 關於如何為目標函數配置角色,請參見建立函數