Cloud Run 服務或修訂版本具有服務身分,可做為經過驗證的帳戶,從 Cloud Run 執行個體容器存取 Google Cloud API。如要進一步瞭解服務身分,請參閱「服務身分簡介」指南。
服務身分的使用方式
在 Cloud Run 中,服務身分是資源和主體的服務帳戶。
- 服務身分做為資源:如要將服務帳戶附加為服務身分,部署者帳戶必須擁有服務身分資源的存取權。某些作業 (例如建立或更新服務或修訂版本) 需要部署者帳戶具備服務身分資源的權限。
- 以主體身分使用的服務身分:如要從 Cloud Run 服務或修訂版本存取 Google Cloud API,您必須授予服務身分執行作業所需的角色或權限。
下一節將說明授予部署者帳戶服務身分資源存取權,以及授予服務帳戶主體所需角色或權限時,必須具備的角色。
必要的角色
您或管理員必須授予部署者帳戶和服務身分 IAM 角色和權限。
按一下即可查看部署者帳戶的必要角色
如要取得權限,將服務帳戶附加為服務或修訂版本的服務身分,您或管理員必須授予部署者帳戶服務帳戶的服務帳戶使用者角色 (roles/iam.serviceAccountUser),該服務帳戶會做為服務身分。
此預先定義的角色包含 iam.serviceAccounts.actAs 權限,用於在服務或修訂版本中附加服務帳戶。您或許還可透過設定自訂角色或使用其他預先定義的角色取得這項權限。
如需瞭解如何授予部署者帳戶服務身分的這個角色,請參閱部署權限。 如果服務帳戶與 Cloud Run 服務或修訂版本位於不同專案,您或管理員也必須為 Cloud Run 服務代理程式設定 IAM 角色,並設定機構政策。詳情請參閱「在其他專案中使用服務帳戶」。
按一下即可查看服務身分所需的角色
如要允許服務身分從 Cloud Run 存取 Google Cloud API,您或管理員必須授予服務身分權限或角色,才能執行所需作業。如要存取特定 Cloud 用戶端程式庫,請參閱該服務的 Google Cloud 說明文件 Google Cloud 。
如果 Cloud Run 服務或修訂版本不會存取其他 Google Cloud 服務,您就不需要授予服務身分任何角色或權限,可以使用指派給專案的預設服務帳戶。
取得建立專屬服務帳戶的建議
從 Google Cloud 控制台建立新的服務帳戶時,選用步驟「將專案存取權授予這個服務帳戶」適用於任何額外存取權。舉例來說,某項 Cloud Run 服務可能會叫用另一項私人 Cloud Run 服務,或存取 Cloud SQL 資料庫,這兩種情況都需要特定的 IAM 角色。詳情請參閱管理存取權的說明文件。
建議工具服務也會自動提供建議,協助您建立專屬服務帳戶,並授予最基本的必要權限。
設定服務身分
如果尚未建立服務帳戶,您可以在 IAM 或 Cloud Run 中建立使用者管理的服務帳戶。
如要設定服務身分,請在建立新服務或部署新版本時,使用 Google Cloud 控制台、gcloud CLI、API (YAML) 或 Terraform:
控制台
前往 Google Cloud 控制台的 Cloud Run:
從 Cloud Run 導覽選單中選取「服務」,然後按一下「部署容器」,設定新服務。如要設定現有服務,請按一下該服務,然後按一下「編輯並部署新修訂版本」。
如要設定新服務,請填寫初始服務設定頁面,然後按一下「Container(s), Volumes, Networking, Security」展開服務設定頁面。
按一下「安全性」分頁標籤。
- 點按「Service account」(服務帳戶) 下拉式選單,然後選取現有服務帳戶,或視需要點按「Create a new service account」(建立新的服務帳戶)。
按一下 [Create] (建立) 或 [Deploy] (部署)。
gcloud
您可以使用下列指令更新現有服務,使其採用新的服務帳戶:
gcloud run services update SERVICE --service-account SERVICE_ACCOUNT
更改下列內容:
- SERVICE:服務名稱。
- SERVICE_ACCOUNT:與新身分相關聯的服務帳戶。這個值是服務帳戶的電子郵件地址,例如
example@myproject.iam.gserviceaccount.com。
您也可以在部署期間使用以下指令設定服務帳戶:
gcloud run deploy --image IMAGE_URL --service-account SERVICE_ACCOUNT
更改下列內容:
- IMAGE_URL:容器映像檔的參照,例如
us-docker.pkg.dev/cloudrun/container/hello:latest。如果您使用 Artifact Registry,則必須先建立存放區 REPO_NAME。網址格式為LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG。 - SERVICE_ACCOUNT:與新身分相關聯的服務帳戶。這個值是服務帳戶的電子郵件地址,例如
example@myservice.iam.gserviceaccount.com。
YAML
如要建立新服務,請略過這個步驟。 如要更新現有服務,請下載其 YAML 設定:
gcloud run services describe SERVICE --format export > service.yaml
更新
serviceAccountName:屬性:apiVersion: serving.knative.dev/v1 kind: Service metadata: name: SERVICE spec: template: spec: serviceAccountName: SERVICE_ACCOUNT
更改下列內容:
- SERVICE:Cloud Run 服務的名稱。
- SERVICE_ACCOUNT:與新身分相關聯的服務帳戶。這個值是服務帳戶的電子郵件地址,例如
SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com。
使用下列指令建立或更新服務:
gcloud run services replace service.yaml
Terraform
如要瞭解如何套用或移除 Terraform 設定,請參閱「基本 Terraform 指令」。
在 Terraform 設定的google_cloud_run_v2_service 資源中新增下列項目:如要建立服務帳戶,請將下列資源新增至現有的 main.tf 檔案:
建立或更新 Cloud Run 服務,並加入服務帳戶:
在其他專案中使用服務帳戶
如果您設定的服務帳戶來自 Google Cloud 與 Cloud Run 資源不同的專案 ,請按照下列步驟操作:
您或管理員必須在您用來做為服務身分的服務帳戶上,授予「服務帳戶使用者」角色 (
roles/iam.serviceAccountUser)。控制台
前往 Google Cloud 控制台的「Service accounts」(服務帳戶) 頁面:
選取您做為服務身分使用的服務帳戶電子郵件地址。
按一下「具備存取權的主體」分頁標籤。
按一下「授予存取權」按鈕。
輸入與您要授予管理員或開發人員角色的主體相符的部署者帳戶電子郵件地址。
在「Select a role」(請選擇角色) 下拉式選單中,選取「Service Accounts」(服務帳戶) >「Service Account User」(服務帳戶使用者) 角色。
按一下 [儲存]。
gcloud
使用
gcloud iam service-accounts add-iam-policy-binding指令,並將醒目顯示的變數改為適當的值:gcloud iam service-accounts add-iam-policy-binding \ SERVICE_ACCOUNT_NAME@SERVICE_ACCOUNT_PROJECT_ID.iam.gserviceaccount.com \ --member="PRINCIPAL" \ --role="roles/iam.serviceAccountUser"
更改下列內容:
SERVICE_ACCOUNT_NAME:要將 Cloud Run 資源附加至的服務帳戶名稱SERVICE_ACCOUNT_PROJECT_ID:服務帳戶所在的專案 IDPRINCIPAL:您要新增繫結的部署者帳戶,格式為
user|group|serviceAccount:email或domain:domain,例如:user:test-user@gmail.comgroup:admins@example.comserviceAccount:test123@example.domain.comdomain:example.domain.com
您或管理員必須在您做為服務身分使用的服務帳戶上,將服務帳戶權杖建立者角色 (
roles/iam.serviceAccountTokenCreator) 授予 Cloud Run 資源的服務代理人。服務代理會採用service-PROJECT_NUMBER@serverless-robot-prod.iam.gserviceaccount.com格式。控制台
前往 Google Cloud 控制台的「Service accounts」(服務帳戶) 頁面:
選取您做為服務身分使用的服務帳戶電子郵件地址。
按一下「Permissions」(權限) 分頁標籤。
按一下「授予存取權」按鈕。
輸入服務專員的電子郵件地址。例如
service-PROJECT_NUMBER@serverless-robot-prod.iam.gserviceaccount.com。在「Select a role」(請選擇角色) 下拉式選單中,選取「Service Accounts」(服務帳戶) >「Service Account Token Creator」(服務帳戶憑證建立者) 角色。
按一下 [儲存]。
gcloud
使用
gcloud iam service-accounts add-iam-policy-binding指令:gcloud iam service-accounts add-iam-policy-binding \ SERVICE_ACCOUNT_NAME@SERVICE_ACCOUNT_PROJECT_ID.iam.gserviceaccount.com \ --member="serviceAccount:service-CLOUD_RUN_RESOURCE_PROJECT_NUMBER@serverless-robot-prod.iam.gserviceaccount.com" \ --role="roles/iam.serviceAccountTokenCreator"
更改下列內容:
SERVICE_ACCOUNT_NAME:要將 Cloud Run 資源附加至的服務帳戶名稱SERVICE_ACCOUNT_PROJECT_ID:服務帳戶所在的專案 IDCLOUD_RUN_RESOURCE_PROJECT_NUMBER: Cloud Run 所在的專案編號
這個指令會列印使用者自行管理的服務帳戶的最新允許政策。
含有這個服務帳戶的專案需要將 org-policy
iam.disableCrossProjectServiceAccountUsage設為 false,或在資料夾層級取消強制執行,或從專案層級設定繼承。預設值為true。控制台
前往 Google Cloud 控制台的「Organization policies」(機構政策) 頁面:
在專案選擇工具中,選取要停用跨專案服務帳戶的機構和專案。
選取「停用跨專案服務帳戶」政策。
按一下「Manage Policy」(管理政策)。
在「政策來源」下方,選取「覆寫上層政策」。
點選「新增規則」。
在「Enforcement」(強制執行) 下方,選取「Off」(關閉)。
如要強制執行這項政策,請按一下「設定政策」。
gcloud
在擁有服務帳戶的專案中,請確保系統不會強制執行
iam.disableCrossProjectServiceAccountUsage機構政策限制。這項限制預設為強制執行。如要停用這項組織政策限制,請執行下列指令:
gcloud resource-manager org-policies disable-enforce iam.disableCrossProjectServiceAccountUsage --project=SERVICE_ACCOUNT_PROJECT_ID
將 SERVICE_ACCOUNT_PROJECT_ID 替換為包含服務帳戶的專案 ID。
您可以直接將角色成員資格套用至服務帳戶資源,或從資源階層中的較高層級繼承。
後續步驟
- 如要進一步瞭解服務帳戶,請參閱 IAM 服務帳戶和使用者管理的服務帳戶指南。
- 如果 Cloud Run 服務、作業或工作站集區會存取 Google API 或Google Cloud 服務,您必須將服務帳戶設為服務身分。瞭解詳情。