使用 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 必須使用 Cloud Build 才能在使用者專案中執行建構作業。
roles/cloudbuild.customworkers.builder 在 Cloud Build 自訂工作站中建立建構作業。
cloudfunctions.functions.invoke 叫用受 IAM 保護的 HTTP 函式。
compute.globalOperations.get
compute.networks.access
vpcaccess.connectors.{get, use}
佈建可存取消費者專案 VPC 的函式。
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 值區上設定通知。
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 角色。

    如要查看這個帳戶,請確認「控制台 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 functions 問題」。