使用 IAM 控管存取權

本頁面提供使用身分與存取權管理 (IAM) 角色在專案層級設定存取權控管的補充資訊,以便決定使用 gcloud functions 指令或 Cloud Functions v2 API 建立的 Google Cloud 專案和函式存取權層級。

如果您已使用 Cloud Run 建立或部署函式,請參閱「使用 IAM 進行存取權控管」和「Cloud Run 角色」,進一步瞭解 Cloud Run 預先定義角色、控制個別服務的存取權、將服務設為公開,或為 Cloud Run 叫用者 IAM 設定組織政策。

使用者的存取權控管

將使用者新增為專案團隊成員,並使用 IAM 授予他們角色。

Cloud Run 函式支援下列角色:

服務帳戶的存取權控管

服務帳戶是特殊類型的Google Cloud 帳戶,可做為非人類使用者的身分,讓他們驗證身分並取得存取資料和執行各種操作的授權。其中部分帳戶是由 Google 自行建立及管理,稱為服務代理

下列服務帳戶可用於 Cloud Run 函式:

名稱 會員 ID 角色
Compute Engine 預設服務帳戶 PROJECT_NUMBER-compute@developer.gserviceaccount.com 編輯者
Google Cloud Functions 服務代理人 service-PROJECT_NUMBER@gcf-admin-robot.iam.gserviceaccount.com Google Cloud Functions 服務代理人
舊版 Cloud Build 服務帳戶1 PROJECT_NUMBER@cloudbuild.gserviceaccount.com Cloud Build 服務帳戶
Cloud Build 服務帳戶 service-PROJECT_NUMBER@gcp-sa-cloudbuild.iam.gserviceaccount.com Cloud Build 服務代理人
Google Container Registry 服務代理人 service-PROJECT_NUMBER@containerregistry.iam.gserviceaccount.com Container Registry 服務代理人
Artifact Registry 服務代理人 service-PROJECT_NUMBER@gcp-sa-artifactregistry.iam.gserviceaccount.com Artifact Registry 服務代理人

執行階段服務帳戶

在執行階段,Cloud Run 函式預設會使用 Compute Engine 預設服務帳戶 (PROJECT_NUMBER-compute@developer.gserviceaccount.com),該帳戶在專案中也具備「編輯者」角色。您可以變更這些服務帳戶的角色,來限制或擴展執行中函式的權限。您也可以在設定服務身分時避免使用預設服務帳戶,藉此變更您使用的服務帳戶。

如要進一步瞭解服務帳戶,請參閱服務帳戶說明文件

管理服務帳戶

如要在建立、更新或刪除函式時對專案執行管理操作,Cloud Run 函式中的所有專案都需要 Google Cloud Functions Service Agent 服務帳戶 (service-PROJECT_NUMBER@gcf-admin-robot.iam.gserviceaccount.com)。

此外,所有執行階段都會在專案中執行容器映像檔建構和儲存作業。為支援這項功能,您還需要佈建以下項目:

這些服務帳戶應具備前述表格中列出的角色。

Google Cloud Functions 服務代理人服務帳戶

根據預設,Google Cloud Functions 服務代理程式服務帳戶 (service-PROJECT_NUMBER@gcf-admin-robot.iam.gserviceaccount.com) 在您的專案中具有 cloudfunctions.serviceAgent 角色。

以下列出 cloudfunctions.serviceAgent 使用的幾項重要權限:

權限 說明
roles/artifactregistry.admin 管理存放區,並在 Artifact Registry 中儲存建構映像檔。
roles/cloudbuild.builds.editor 必須使用 Cloud Build 才能在使用者專案中執行建構作業。
roles/cloudbuild.customworkers.builder 在 Cloud Build 自訂工作站中建立建構作業。
compute.globalOperations.get
compute.networks.access
vpcaccess.connectors.{get, use}
佈建可存取消費者專案 VPC 的函式。
roles/eventarc.developer 管理函式 Eventarc 觸發條件。
firebasedatabase.instances.{get, update} 建立由 Firebase 即時資料庫觸發的函式。
iam.serviceAccounts.{actAs, getAccessToken, signBlob} 可取得執行階段服務帳戶憑證。
iam.serviceAccounts.getOpenIdToken 代理程式需要這項資訊,才能在使用者指定的授權單位取得 OpenID 權杖。OpenID 權杖用於叫用啟用 IAM 的函式。
pubsub.subscriptions 管理使用者專案中的訂閱。
pubsub.topics 管理使用者專案中的主題。
roles/run.developer 管理 Cloud Run 函式服務。
storage.buckets.create
storage.objects.{delete, get, create, list}
這是在使用者專案中儲存原始碼的必要條件。

您可以查看預先定義的 IAM 角色下的完整權限組合,也可以執行以下指令:

gcloud iam roles describe roles/cloudfunctions.serviceAgent

移除服務帳戶的所有角色,並新增 Cloud Functions 服務代理人角色,將此服務帳戶重設為預設角色:

gcloud projects add-iam-policy-binding PROJECT_ID \
  --member serviceAccount:service-PROJECT_NUMBER@gcf-admin-robot.iam.gserviceaccount.com \
  --role roles/cloudfunctions.serviceAgent

疑難排解權限錯誤

如果您在專案中部署、更新、刪除或執行函式時收到權限錯誤,請執行下列步驟:

  1. 請確認您具備專案的「編輯者」或「擁有者」角色,或是使用「Cloud Functions 開發人員」角色。

    如果您在專案層級使用 Cloud Functions 開發人員角色,也請確保您已將 IAM 服務帳戶使用者角色授予使用者

    目前,執行階段層級僅允許執行權限。

  2. 確認 Cloud Functions 服務代理服務帳戶 (service-PROJECT_NUMBER@gcf-admin-robot.iam.gserviceaccount.com) 具備專案的 Cloud Functions 服務代理 (cloudfunctions.serviceAgent) 角色。

    如要查看這個帳戶,請確認「控制台 IAM」頁面「Permissions」分頁中的「Include Google-provided role grants」方塊已勾選。或者您也可以使用 gcloud projects add-iam-policy-binding PROJECT_ID

  3. 確認您擁有觸發來源的權限,例如 Pub/SubCloud Storage

如果您在執行函式時收到「權限不足」錯誤,或發生其他驗證問題,請確認執行階段服務帳戶具有正確的權限,可存取函式所需的資源。然後重複執行步驟 2 和 3。

如果在部署期間收到「服務無法使用」錯誤,請確認您的專案中是否有執行階段服務帳戶 PROJECT_ID@appspot.gserviceaccount.com。如要重新建立已刪除的服務帳戶,請參閱「取消刪除服務帳戶」。

另請參閱「排解 Cloud Run 函式問題」。

1 2024 年 7 月前建立的專案,Cloud Run 函式只會使用舊版 Cloud Build 服務帳戶