使用 IAM 控管存取權

本頁提供補充資訊,說明如何使用 Identity and Access Management (IAM) 角色,在專案層級設定存取控管,決定使用 gcloud functions 指令或 Cloud Functions v2 API 所建立 Google Cloud 專案和函式的存取層級。

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

使用者存取控管

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

Cloud Run functions 支援下列角色:

服務帳戶存取控管

服務帳戶是特殊的Google Cloud 帳戶類型,可做為非人類使用者的身分識別資訊,這類使用者需要通過驗證並取得授權,才能存取資料及執行各種動作。部分服務帳戶由 Google 建立及管理,又稱為「服務代理」。

下列服務帳戶用於 Cloud Run functions:

名稱 成員 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 functions 預設會使用 Compute Engine 預設服務帳戶 (PROJECT_NUMBER-compute@developer.gserviceaccount.com),該帳戶也具備專案的「編輯者」角色。您可以變更這些服務帳戶的角色,限制或擴充執行中函式的權限。此外,如要變更使用的服務帳戶,也能在設定服務身分時避免使用預設服務帳戶

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

管理服務帳戶

在建立、更新或刪除函式期間,如要對專案執行管理操作,Cloud Run functions 中的所有專案都必須使用 Google Cloud Functions 服務代理服務帳戶 (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 自訂 worker 中建立建構作業。
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) 角色。

    務必在「Console IAM」(控制台 IAM) 頁面上的「Permissions」(權限) 分頁中,勾選「Include Google-provided role grants」(包含 Google 提供的角色授權) 方塊,才能查看這個帳戶。或者也可以使用 gcloud projects add-iam-policy-binding PROJECT_ID

  3. 確認您具備觸發條件來源的權限,例如 Pub/SubCloud Storage

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

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

另請參閱「Cloud Run functions 疑難排解」。

1 如果專案是在 2024 年 7 月前建立,Cloud Run functions 只會使用舊版 Cloud Build 服務帳戶