使用 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 的可接受值清單,請參閱 身分與存取權管理角色參考頁面

從主體中移除角色

使用 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 角色參考頁面

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

大量新增主體

建立名為 policy.json 的 IAM 政策:

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

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

gcloud functions set-iam-policy FUNCTION_NAME policy.json

如需 PRINCIPAL_ID 可接受的來源清單,請參閱「主要 ID」。如需 ROLE 的可接受值清單,請參閱 身分與存取權管理角色參考頁面

查看主體

如要查看管理者,請使用 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 參考資料