使用 IAM 授權存取權

您可以使用 Identity and Access Management (IAM) 授權身分,對使用 Cloud Functions v2 API 建立的函式執行管理動作,例如使用 gcloud functions、REST API 或 Terraform。管理動作包括建立、更新及刪除函式。如要瞭解使用 Cloud Run 建立的函式 IAM 存取權,請參閱「使用 IAM 控管存取權」。

在 IAM 中,您要授予主體 (您要啟用的身分,通常是使用者或服務帳戶電子郵件地址) 函式或專案的適當 IAM 角色。這些角色包含權限,可定義主體可執行的動作。

事前準備

如要取得控管特定函式或專案中所有函式存取權的權限,請要求管理員在函式或專案中授予「Cloud Functions 管理員」 (roles/roles/cloudfunctions.admin) IAM 角色。如要進一步瞭解如何授予角色,請參閱「管理專案、資料夾和機構的存取權」。

這個預先定義的角色包含 cloudfunctions.functions.setIamPolicy權限,可控制專案中特定函式或所有函式的存取權。

您或許還可透過自訂角色或其他預先定義的角色取得這項權限。

如需完整的角色清單和相關聯的權限,請參閱「Cloud Functions IAM 角色」。

啟用函式存取權

您可以透過 IAM 授予或限制個別身分的角色,控管函式的動作。

新增主體並授予角色

使用 gcloud functions add-iam-policy-binding 指令:

gcloud functions add-iam-policy-binding FUNCTION_NAME \
  --member=PRINCIPAL_ID \
  --role=ROLE
 

其中 FUNCTION_NAME 是函式名稱,PRINCIPAL_ID 是主體的 ID (通常是電子郵件地址),ROLE 則是角色。

如需可提供 PRINCIPAL_ID 的來源清單,請參閱「主體 ID」。如需 ROLE 的可接受值清單,請參閱 IAM 角色參考頁面

從主體移除角色

使用 gcloud functions remove-iam-policy-binding 指令:

gcloud functions remove-iam-policy-binding FUNCTION_NAME \
  --member=PRINCIPAL_ID \
  --role=ROLE

其中 FUNCTION_NAME 是函式名稱,PRINCIPAL_ID 是用來識別服務帳戶的電子郵件地址,並以 serviceAccount: 為前置字元,ROLE 則是角色。

如需 PRINCIPAL_ID 的可接受來源清單,請參閱「主要 ID」。如需 ROLE 的可能值清單,請參閱 IAM 角色參考頁面

如果主體已獲授多個角色,請務必指定要移除的角色。

大量新增主體

建立 IAM 政策,例如 policy.json

  {
    "bindings": [
      {
        "role": ROLE,
        "members": [
        PRINCIPAL_ID
        ]
      }
    ]
  }

使用 gcloud functions set-iam-policy 指令:

gcloud functions set-iam-policy FUNCTION_NAME policy.json

如需 PRINCIPAL_ID 的可接受來源清單,請參閱「主要 ID」。如需 ROLE 的可接受值清單,請參閱 IAM 角色參考頁面

查看主體

如要查看主體,請使用 gcloud functions get-iam-policy 指令:

gcloud functions get-iam-policy FUNCTION_NAME

允許未經驗證的 HTTP 函式叫用

如要允許未經驗證的叫用,您必須在部署時或部署後指定這項設定。

您可以使用先前所述方法的特殊變體,授予未經驗證的呼叫端叫用 HTTP 函式的權限。

如果您在受「網域限定共用」組織政策限制的專案中開發函式,將無法允許未經驗證的函式叫用。

部署時

gcloud functions deploy 指令會顯示提示,協助您在建立函式時設定叫用權限。也可以包含 --allow-unauthenticated 旗標:

gcloud functions deploy FUNCTION_NAME \
  --trigger-http \
  --allow-unauthenticated \
  ...

即使您未使用這個旗標,後續部署相同函式也不會變更其狀態。

部署完成後

使用 gcloud run services add-iam-policy-binding 指令將 roles/run.invoker 角色授予特定函式:

gcloud run services add-iam-policy-binding FUNCTION_NAME \
  --member="allUsers" \
  --role="roles/run.invoker"

如要進一步瞭解這些欄位,請參閱 gcloud run add-iam-policy-binding 參考資料