使用 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
)。
此外,所有執行階段都會在專案中執行容器映像檔建構和儲存作業。為支援這項功能,您還需要佈建以下項目:
- 基本 Cloud Build 服務帳戶 (
PROJECT_NUMBER@cloudbuild.gserviceaccount.com
) - Cloud Build 服務代理人服務帳戶 (
service-PROJECT_NUMBER@gcp-sa-cloudbuild.iam.gserviceaccount.com
) - Google Container Registry 服務代理人服務帳戶 (
service-PROJECT_NUMBER@containerregistry.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
疑難排解權限錯誤
如果您在專案中部署、更新、刪除或執行函式時收到權限錯誤,請執行下列步驟:
請確認您在專案中具備編輯者或擁有者角色,或是使用Cloud Run 函式開發人員角色。
如果您在專案層級使用 Cloud Run 函式開發人員角色,請務必為使用者授予 IAM 服務帳戶使用者角色。
在個別函式層級,系統只允許執行權限。
確認 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
。確認您擁有觸發來源的權限,例如 Pub/Sub 或 Cloud Storage。
如果您在執行函式時收到「權限不足」錯誤,或發生其他驗證問題,請確認執行階段服務帳戶具有正確的權限,可存取函式所需的資源。然後重複執行步驟 2 和 3。
如果在部署期間收到「服務無法使用」錯誤,請確認您的專案中是否有執行階段服務帳戶 PROJECT_ID@appspot.gserviceaccount.com
。如要重新建立已刪除的服務帳戶,請參閱「取消刪除服務帳戶」。
另請參閱「排解 Cloud Run functions 問題」。