使用 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 |
如要在使用者專案中執行建構作業,就必須啟用這項服務。 |
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
疑難排解權限錯誤
在專案中部署、更新、刪除或執行函式時,如果發生權限錯誤,請按照下列步驟操作:
請確認您具備專案的「編輯者」或「擁有者」角色,或是使用「Cloud Run 函式開發人員」角色。
如果您在專案層級使用 Cloud Run 函式開發人員角色,也請確保您已將 IAM 服務帳戶使用者角色授予使用者。
函式層級只能使用執行權限。
確認 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。確認您擁有觸發來源的權限,例如 Pub/Sub 或 Cloud Storage。
如果執行函式時收到「權限不足」錯誤訊息,或發生其他驗證問題,請確認執行階段服務帳戶具備存取函式所需資源的正確權限,然後重複步驟 2 和 3。
如果在部署期間收到「服務無法使用」錯誤訊息,請確認專案中是否有執行階段服務帳戶 PROJECT_ID@appspot.gserviceaccount.com。如要重新建立已刪除的服務帳戶,請參閱「取消刪除服務帳戶」。
另請參閱「排解 Cloud Run 函式問題」。