使用 IAM 進行存取控管 (第 1 代)

您 (也就是部署函式的使用者或服務帳戶) 可以在專案層級使用角色設定存取控管。將角色授予專案成員或服務帳戶,即可決定Google Cloud 專案與其資源的存取權層級。根據預設,所有 Google Cloud 專案都只有一位使用者:原始專案建立者。除非有使用者成為專案小組成員,否則沒有任何其他使用者能夠存取專案,也無法存取其中的函式。

使用者的存取控管

您可以將使用者新增為專案的小組成員,並使用身分與存取權管理 (IAM) 為他們授予角色。

Cloud Run 函式支援「編輯者」、「擁有者」和「檢視者基本角色,可授予下列權限:

  • 編輯者」與「擁有者」:對所有函式相關資源的讀寫存取權。允許使用者部署、更新及刪除函式。對專案中其他資源的額外存取權。
  • 檢視者」:對函式和位置的唯讀存取權。可讓使用者列出函式並查看詳細資料,但無法查看原始碼。對專案中其他資源的額外存取權。

Cloud Run 函式也支援 Cloud Run 函式預先定義的「開發人員」和「檢視者」角色,可授予下列權限:

  • 開發人員」:對所有函式相關資源的讀寫存取權。允許使用者部署、更新及刪除函式。無法存取專案中的其他資源。
  • 檢視者」:對函式和位置的唯讀存取權。可讓使用者列出函式並查看詳細資料,但無法查看原始碼。無法存取專案中的其他資源。

服務帳戶的存取控管

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

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

名稱 成員 ID 角色
App Engine 預設服務帳戶 PROJECT_ID@appspot.gserviceaccount.com 編輯者
Google Cloud Run 函式服務代理人 service-PROJECT_NUMBER@gcf-admin-robot.iam.gserviceaccount.com Cloud Run 函式服務代理人
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 函式預設會使用 App Engine 預設服務帳戶 (PROJECT_ID@appspot.gserviceaccount.com),該帳戶在專案中具有「編輯者」角色。您可以變更此服務帳戶的角色,來限制或擴展執行中函式的權限。您也可以提供非預設的個別服務帳戶,藉此變更使用的服務帳戶。

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

管理服務帳戶

在建立、更新或刪除函式期間,如要對專案執行管理動作,Cloud Run 函式中的所有專案都必須使用 Google Cloud Run 函式服務代理服務帳戶 (service-PROJECT_NUMBER@gcf-admin-robot.iam.gserviceaccount.com)。

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

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

Google Cloud Run 函式服務代理服務帳戶

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

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

權限 說明
roles/artifactregistry.admin 管理存放區,並在 Artifact Registry 中儲存建構映像檔。
roles/cloudbuild.builds.editor 如要在使用者專案中執行建構作業,就必須啟用這項服務。
roles/cloudbuild.customworkers.builder 在 Cloud Build 自訂工作站中建立建構作業。
cloudfunctions.functions.invoke 叫用受 IAM 保護的 HTTP 函式。
compute.globalOperations.get,
compute.networks.access,
vpcaccess.connectors.{get, use}
佈建可存取消費者專案虛擬私有雲的函式。
firebasedatabase.instances.{get, update} 建立由 Firebase 即時資料庫觸發的函式。
iam.serviceAccounts.{actAs, getAccessToken, signBlob} 可取得執行階段服務帳戶憑證。
iam.serviceAccounts.getOpenIdToken 代理程式必須使用此參數,才能在使用者指定的授權單位取得 OpenID 權杖。OpenID 權杖用於叫用啟用 IAM 的函式。
pubsub.subscriptions 管理使用者專案中的訂閱。
pubsub.topics 管理使用者專案中的主題。
storage.buckets.{get, update} 在 Cloud Storage bucket 上設定通知,以觸發函式。
storage.buckets.create,
storage.objects.{delete, get, create, list}
須具備此權限才能在使用者專案中儲存原始碼。

如要查看完整權限,請參閱預先定義的 IAM 角色,或執行下列指令:

gcloud iam roles describe roles/cloudfunctions.serviceAgent

如要將此服務帳戶重設為預設角色,請移除該帳戶的所有角色,然後新增 Cloud Run 函式服務代理角色:

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 Run 函式開發人員」角色。

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

    函式層級只能使用執行權限。

  2. 確認 Cloud Run 函式服務代理程式服務帳戶 (service-PROJECT_NUMBER@gcf-admin-robot.iam.gserviceaccount.com) 是否具備專案的 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 函式問題」。