Cloud Run 執行個體具有服務身分,可做為經過驗證的帳戶,從 Cloud Run 執行個體容器存取 Cloud de Confiance by S3NS API。如要進一步瞭解服務身分,請參閱「服務身分簡介」指南。
服務身分的使用方式
在 Cloud Run 中,服務身分是服務帳戶,既是資源也是主體。
- 服務身分做為資源:如要將服務帳戶附加為服務身分,部署者帳戶必須擁有服務身分資源的存取權。某些作業 (例如建立或更新執行個體) 需要部署者帳戶具備服務身分資源的權限。
- 以服務身分做為主體:如要從 Cloud Run 執行個體存取 Cloud de Confiance API,您必須授予服務身分執行個體要執行的作業所需的角色或權限。
下一節將說明授予部署者帳戶服務身分資源存取權,以及授予服務帳戶主體所需角色或權限時,必須具備的角色。
必要的角色
您或管理員必須授予部署者帳戶和服務身分 IAM 角色和權限。
按一下即可查看部署者帳戶的必要角色
如要取得將服務帳戶附加為執行個體服務身分所需的權限,您或管理員必須授予部署者帳戶服務帳戶的「服務帳戶使用者」角色 (roles/iam.serviceAccountUser),該服務帳戶會做為服務身分使用。
這個預先定義的角色具備 iam.serviceAccounts.actAs 權限,可將服務帳戶附加至執行個體。您或許還可透過設定自訂角色或使用其他預先定義的角色取得這項權限。
如需瞭解如何授予部署者帳戶服務身分的這個角色,請參閱部署權限。 如果服務帳戶與 Cloud Run 執行個體位於不同專案,您或管理員也必須為 Cloud Run 服務代理設定 IAM 角色,並設定機構政策。詳情請參閱「在其他專案中使用服務帳戶」。
按一下即可查看服務身分所需的角色
如要允許服務身分存取 Cloud Run 的 Cloud de Confiance API,您或管理員必須授予服務身分執行作業所需的權限或角色。如要存取特定 Cloud 用戶端程式庫,請參閱該服務的 Cloud de Confiance 說明文件 Cloud de Confiance 。
如果 Cloud Run 執行個體不會存取其他 Cloud de Confiance 服務,您就不需要授予服務身分任何角色或權限,可以使用指派給專案的預設服務帳戶。
取得建立專屬服務帳戶的建議
從 Cloud de Confiance 控制台建立新服務帳戶時,選用的「將專案存取權授予這個服務帳戶」步驟適用於任何額外存取權需求。舉例來說,某項 Cloud Run 服務可能會叫用另一項私人 Cloud Run 服務,或存取 Cloud SQL 資料庫,這兩種情況都需要特定的 IAM 角色。詳情請參閱管理存取權的說明文件。
建議工具服務也會自動提供建議,協助您建立專屬服務帳戶,並授予最低的必要權限。
設定服務身分
如果尚未建立服務帳戶,您可以在 IAM 或 Cloud Run 中建立使用者管理的服務帳戶。
如要設定服務身分,請使用 gcloud CLI 或 YAML:
gcloud
如果您尚未建立服務帳戶,請在 IAM 中建立使用者代管的服務帳戶。
您可以使用下列指令更新現有執行個體,以設定服務帳戶:
gcloud beta run instances update INSTANCE --service-account SERVICE_ACCOUNT
更改下列內容:
- INSTANCE:執行個體的名稱。
- SERVICE_ACCOUNT:與新身分相關聯的服務帳戶。這個值是服務帳戶的電子郵件地址,格式為
SERVICE_ACCOUNT_NAME@PROJECT_ID.s3ns.iam.gserviceaccount.com,其中 SERVICE_ACCOUNT_NAME 是服務帳戶名稱,PROJECT_ID 則是專案 ID。 您也可以在部署期間使用以下指令設定服務帳戶:
gcloud beta run instances deploy INSTANCE --image IMAGE_URL --service-account SERVICE_ACCOUNT
更改下列內容:
- INSTANCE:執行個體的名稱。
IMAGE_URL:容器映像檔的參照,例如us-docker.pkg.dev/cloudrun/container/hello:latest。- SERVICE_ACCOUNT:與新身分相關聯的服務帳戶:這個值是服務帳戶的電子郵件地址,格式為
SERVICE_ACCOUNT_NAME@PROJECT_ID.s3ns.iam.gserviceaccount.com。
YAML
如果您要建立新執行個體,請略過這個步驟。 如要更新現有執行個體,請下載其 YAML 設定:
gcloud beta run instances describe INSTANCE --format export > instance.yaml
以下範例包含 YAML 設定:
apiVersion: run.googleapis.com/v1 kind: Instance metadata: name: INSTANCE annotations: run.googleapis.com/launch-stage: BETA spec: serviceAccountName: SERVICE_ACCOUNT
更改下列內容:
- INSTANCE:Cloud Run 執行個體的名稱。
- SERVICE_ACCOUNT:與新身分相關聯的服務帳戶。這個值是服務帳戶的電子郵件地址,例如
SERVICE_ACCOUNT_NAME@PROJECT_ID.s3ns.iam.gserviceaccount.com。
使用下列指令建立或更新執行個體:
gcloud beta run instances replace instance.yaml
使用其他專案中的服務帳戶
如果您設定的服務帳戶來自 Cloud de Confiance 專案 與 Cloud Run 資源不同,請執行下列操作:
您或管理員必須在您用來做為服務身分的服務帳戶上,授予「服務帳戶使用者」角色 (
roles/iam.serviceAccountUser)。控制台
前往 Cloud de Confiance 控制台的「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.s3ns.iam.gserviceaccount.com \ --member="PRINCIPAL" \ --role="roles/iam.serviceAccountUser"
更改下列內容:
SERVICE_ACCOUNT_NAME:要將 Cloud Run 資源附加至的服務帳戶名稱。SERVICE_ACCOUNT_PROJECT_ID:服務帳戶所在的專案 ID。PRINCIPAL:您要新增繫結的部署者帳戶,格式為
user|group|serviceAccount:email或domain:domain,例如:user:test-user@gmail.comgroup:admins@example.comserviceAccount:test123@example.domain.comdomain:example.domain.com
您或管理員必須在您做為服務身分使用的服務帳戶上,授予 Cloud Run 資源的服務代理程式「服務帳戶權杖建立者」角色 (
roles/iam.serviceAccountTokenCreator)。服務代理會採用service-PROJECT_NUMBER@serverless-robot-prod.s3ns-system.iam.gserviceaccount.com格式。控制台
前往 Cloud de Confiance 控制台的「Service accounts」(服務帳戶) 頁面:
選取您做為服務身分使用的服務帳戶電子郵件地址。
按一下「Permissions」(權限) 分頁標籤。
按一下「授予存取權」按鈕。
輸入服務專員的電子郵件地址。例如
service-PROJECT_NUMBER@serverless-robot-prod.s3ns-system.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.s3ns.iam.gserviceaccount.com \ --member="serviceAccount:service-CLOUD_RUN_RESOURCE_PROJECT_NUMBER@serverless-robot-prod.s3ns-system.iam.gserviceaccount.com" \ --role="roles/iam.serviceAccountTokenCreator"
更改下列內容:
SERVICE_ACCOUNT_NAME:要將 Cloud Run 資源附加至的服務帳戶名稱。SERVICE_ACCOUNT_PROJECT_ID:服務帳戶所在的專案 ID。CLOUD_RUN_RESOURCE_PROJECT_NUMBER: Cloud Run 所在的專案編號。
這個指令會列印使用者自行管理的服務帳戶的最新允許政策。
含有這個服務帳戶的專案需要將 org-policy
iam.disableCrossProjectServiceAccountUsage設為 false,或在資料夾層級取消強制執行,或從專案層級設定繼承。預設值為true。控制台
前往 Cloud de Confiance 控制台的「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 或Cloud de Confiance 服務,您必須將服務帳戶設為服務身分。瞭解詳情。