全部產品
Search
文件中心

Function Compute:授予Function Compute訪問其他雲端服務的許可權

更新時間:Jul 06, 2024

在函數啟動並執行過程中,Function Compute需要訪問其他雲資源,例如將函數日誌寫入到您指定的Log Service內、拉取ACR鏡像或打通VPC網路訪問等。此時,需要為函數所在服務授予相應許可權,當服務被授予某許可權後,該服務下所有函數都將具有此許可權。如果是較粗粒度的授權,可以選擇Function Compute系統提供的預設服務角色AliyunFCDefaultRole,如果需要更細粒度的授權,則需要為服務授予其他角色及相應的權限原則。

功能原理

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

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

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

預設服務角色AliyunFCDefaultRole

為了簡化您的授權操作,Function Compute為您提供了一個系統預設的服務角色,即AliyunFCDefaultRole。該角色內包含了Function Compute需要訪問的部分雲資源許可權。關於如何建立預設角色AliyunFCDefaultRole和綁定該角色的操作步驟,請參見步驟一:開通Function Compute服務

您可以登入RAM角色管理控制台,查看AliyunFCDefaultRole的授權內容。

image.png

重要

AliyunFCDefaultRoleFunction Compute系統預設的、所有服務等級的角色,請勿在該角色上添加其他權限原則。如果在預設角色的基礎上,您還需要添加其他權限原則,請新增一個角色並為該角色添加相關許可權。具體操作,請參見建立可信實體為阿里雲服務的RAM角色

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

本文以授予Function Compute訪問Object Storage Service系統管理權限為例進行介紹。如果需要指定Function Compute某服務內的所有函數都具有管理Object Storage Service服務的許可權,可以在佈建服務許可權時,為該服務綁定一個角色,然後將管理Object Storage Service服務的權限原則綁定到該角色上。成功綁定後,該服務內的所有函數都將具有管理Object Storage Service服務的許可權。

前提條件

已建立服務和函數。具體操作,請參見建立服務建立函數

操作步驟

  1. 登入Function Compute控制台,在左側導覽列,單擊服務及函數
  2. 在頂部功能表列,選擇地區,然後在服務列表頁面,單擊目標服務操作列的配置
  3. 在編輯服務頁面的角色配置地區,單擊建立角色跳轉至RAM控制台,根據介面提示建立角色並為角色授予要求的權限。

    您也可以使用已有的角色,如果許可權不足,單擊編輯策略根據需要添加權限原則。具體操作,請參見為RAM角色授權

    image.png

    1. RAM控制台角色頁面,單擊建立角色

    2. 選擇類型頁簽,選擇可信實體類型為阿里雲服務,然後單擊下一步

      image.png

    3. 配置角色頁簽,選擇普通服務角色,設定角色名稱(本文樣本為mytestrole),選擇受信服務Function Compute,然後單擊完成

      image.png

    4. 建立完成頁簽,單擊為角色授權,然後單擊目標角色右側操作列的新增授權

    5. 在授權頁面,選擇授權範圍授權主體預設為選擇的目標角色,選擇所需系統策略或自訂策略,單擊添加到右側已挑選清單,然後單擊確定。更多資訊,請參見權限原則及樣本

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

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

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

      image.png

  4. 為目標服務綁定上一步建立的新角色mytestrole

    image.png

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

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

      {
         "endpoint": "http://oss-cn-hangzhou.aliyuncs.com",
         "bucket": "web****",
         "objectName": "myObj",
         "message": "your-message"
      }
    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,您可以看到目標Object內容已替換為message的內容。