設定工作站集區的服務身分

本頁說明如何設定及查看服務身分,以控管 Cloud Run 工作站集區對 Cloud de Confiance by S3NS API 的存取權。

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 worker 集區位於不同專案,您或管理員也必須為 Cloud Run 服務代理程式設定 IAM 角色,並設定機構政策。詳情請參閱「在其他專案中使用服務帳戶」。

按一下即可查看服務身分所需的角色

如要允許服務身分存取 Cloud Run 中的 Cloud de Confiance API,您或管理員必須授予服務身分執行作業所需的權限或角色。如要存取特定 Cloud 用戶端程式庫,請參閱該服務的 Cloud de Confiance 說明文件 Cloud de Confiance 。

如果 Cloud Run worker 集區不會存取其他 Cloud de Confiance 服務,您就不需要授予服務身分任何角色或權限,可以使用指派給專案的預設服務帳戶。

取得建立專屬服務帳戶的建議

從 Cloud de Confiance 控制台建立新的服務帳戶時,選用步驟「將專案存取權授予這個服務帳戶」適用於任何額外存取權。舉例來說,某項 Cloud Run 服務可能會叫用另一項私人 Cloud Run 服務,或存取 Cloud SQL 資料庫,這兩種情況都需要特定的 IAM 角色。詳情請參閱管理存取權的說明文件。

建議工具服務也會自動提供建議,協助您建立專屬服務帳戶,並授予最低的必要權限。

設定服務身分

如果尚未建立服務帳戶,您可以在 IAM 或 Cloud Run 中建立使用者管理的服務帳戶。

如要設定服務身分,請使用Cloud de Confiance 控制台、gcloud CLI、YAML 或 Terraform:

控制台

  1. 前往 Cloud de Confiance by S3NS 控制台的 Cloud Run:

    前往 Cloud Run

  2. 從選單中選取「工作站集區」,然後按一下「部署容器」,設定新的工作站集區。如要設定現有 worker 集區,請按一下該 worker 集區,然後按一下「Edit and deploy new revision」(編輯並部署新修訂版本)

  3. 如要設定新的工作站集區,請填寫初始工作站集區頁面,然後按一下「Containers, Networking, Security」(容器、網路、安全性),展開工作站集區設定頁面。

  4. 按一下「安全性」分頁標籤。

    圖片

    • 按一下「建立新的服務帳戶」或「服務帳戶」下拉式選單,然後選取現有服務帳戶 (如適用)。
  5. 按一下 [Create] (建立) 或 [Deploy] (部署)

gcloud

如果您尚未建立服務帳戶,請在 IAM 中建立使用者代管的服務帳戶。

您可以使用下列指令更新現有工作站集區,藉此設定服務帳戶:

gcloud run worker-pools update WORKER_POOL --service-account SERVICE_ACCOUNT

更改下列內容:

  • WORKER_POOL:服務名稱。
  • SERVICE_ACCOUNT:與新身分相關聯的服務帳戶。這個值是服務帳戶的電子郵件地址,格式為 SERVICE_ACCOUNT_NAME@PROJECT_ID.s3ns.iam.gserviceaccount.com,其中 SERVICE_ACCOUNT_NAME 是服務帳戶名稱,PROJECT_ID 則是專案 ID。 您也可以在部署期間使用以下指令設定服務帳戶:
gcloud run worker-pools deploy WORKER_POOL --image IMAGE_URL --service-account SERVICE_ACCOUNT

更改下列內容:

  • WORKER_POOL:工作站集區的名稱。
  • IMAGE_URL:包含工作站集區的容器映像檔參照,例如 us-docker.pkg.dev/cloudrun/container/worker-pool:latest
  • SERVICE_ACCOUNT:與新身分相關聯的服務帳戶:這個值是服務帳戶的電子郵件地址,格式為 SERVICE_ACCOUNT_NAME@PROJECT_ID.s3ns.iam.gserviceaccount.com

YAML

  1. 如要建立新的工作站集區,請略過這個步驟。 如要更新現有工作站集區,請下載 YAML 設定

    gcloud run worker-pools describe WORKER_POOL --format export > worker-pool.yaml
  2. 以下範例包含 YAML 設定:

    apiVersion: run.googleapis.com/v1
    kind: WorkerPool
    metadata:
      name: WORKER_POOL
    spec:
      template:
        spec:
          serviceAccountName: SERVICE_ACCOUNT

    更改下列內容:

    • WORKER_POOL:Cloud Run worker 集區的名稱。
    • SERVICE_ACCOUNT:與新身分相關聯的服務帳戶。這個值是服務帳戶的電子郵件地址,例如 SERVICE_ACCOUNT_NAME@PROJECT_ID.s3ns.iam.gserviceaccount.com
  3. 使用下列指令建立或更新工作站集區:

    gcloud run worker-pools replace worker-pool.yaml

    如果存在 worker-pool.yaml 檔案,gcloud run worker-pools replace 指令預設會使用該檔案。

Terraform

如要瞭解如何套用或移除 Terraform 設定,請參閱「基本 Terraform 指令」。

resource "google_cloud_run_v2_worker_pool" "default" {
  name     = "WORKER_POOL"
  location = "REGION"

  template {
    containers {
      image = "IMAGE_URL"
    }
  }
  service_account = "SERVICE_ACCOUNT"
}

更改下列內容:

  • WORKER_POOL:工作站集區的名稱。
  • REGION: Cloud de Confiance 區域,例如 europe-west1
  • IMAGE_URL:包含工作站集區的容器映像檔參照,例如 us-docker.pkg.dev/cloudrun/container/worker-pool:latest
  • SERVICE_ACCOUNT:與新身分相關聯的服務帳戶。這個值是服務帳戶的電子郵件地址,格式為 SERVICE_ACCOUNT_NAME@PROJECT_ID.s3ns.iam.gserviceaccount.com,其中 SERVICE_ACCOUNT_NAME 是服務帳戶名稱,PROJECT_ID 則是專案 ID。

在其他專案中使用服務帳戶

如果您設定的服務帳戶來自 Cloud de Confiance 其他專案 (而非 Cloud Run 資源),請按照下列步驟操作:

  1. 您或管理員必須在您用來做為服務身分的服務帳戶上,授予服務帳戶使用者角色 (roles/iam.serviceAccountUser)。

    控制台

    1. 前往 Cloud de Confiance 控制台的「Service accounts」(服務帳戶) 頁面:

      前往「Service accounts」(服務帳戶)

    2. 選取您做為服務身分使用的服務帳戶電子郵件地址。

    3. 按一下「具備存取權的主體」分頁標籤。

    4. 按一下「授予存取權」按鈕。

    5. 輸入與您要授予管理員或開發人員角色的主體相符的部署者帳戶電子郵件地址。

    6. 在「Select a role」(請選擇角色) 下拉式選單中,選取「Service Accounts」(服務帳戶) >「Service Account User」(服務帳戶使用者) 角色。

    7. 按一下 [儲存]

    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:emaildomain:domain,例如:

      • user:test-user@gmail.com
      • group:admins@example.com
      • serviceAccount:test123@example.domain.com
      • domain:example.domain.com
  2. 您或管理員必須在您做為服務身分使用的服務帳戶上,授予 Cloud Run 資源的服務代理程式「服務帳戶權杖建立者」角色 (roles/iam.serviceAccountTokenCreator)。服務代理會採用 service-PROJECT_NUMBER@serverless-robot-prod.s3ns-system.iam.gserviceaccount.com 格式。

    控制台

    1. 前往 Cloud de Confiance 控制台的「Service accounts」(服務帳戶) 頁面:

      前往「Service accounts」(服務帳戶)

    2. 選取您做為服務身分使用的服務帳戶電子郵件地址。

    3. 按一下「Permissions」(權限) 分頁標籤。

    4. 按一下「授予存取權」按鈕。

    5. 輸入服務專員的電子郵件地址。例如 service-PROJECT_NUMBER@serverless-robot-prod.s3ns-system.iam.gserviceaccount.com

    6. 在「Select a role」(請選擇角色) 下拉式選單中,選取「Service Accounts」(服務帳戶) >「Service Account Token Creator」(服務帳戶憑證建立者) 角色。

    7. 按一下 [儲存]

    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 所在的專案編號。

    這個指令會列印使用者自行管理的服務帳戶的最新允許政策。

  3. 含有這個服務帳戶的專案需要將 org-policy iam.disableCrossProjectServiceAccountUsage 設為 false,或在資料夾層級取消強制執行,或從專案層級設定繼承。預設值為 true

    控制台

    1. 前往 Cloud de Confiance 控制台的「Organization policies」(組織政策) 頁面:

      前往「Organization policies」(組織政策)

    2. 在專案挑選器中,選取要停用跨專案服務帳戶的機構和專案。

    3. 選取「停用跨專案服務帳戶」政策。

    4. 按一下「Manage Policy」(管理政策)

    5. 在「政策來源」下方,選取「覆寫上層政策」

    6. 點選「新增規則」

    7. 在「Enforcement」(強制執行) 下方,選取「Off」(關閉)

    8. 如要強制執行這項政策,請按一下「設定政策」

    gcloud

    在擁有服務帳戶的專案中,請確保系統不會強制執行iam.disableCrossProjectServiceAccountUsage機構政策限制。這項限制預設為強制執行。

    如要停用這項組織政策限制,請執行下列指令:

    gcloud resource-manager org-policies disable-enforce iam.disableCrossProjectServiceAccountUsage
        --project=SERVICE_ACCOUNT_PROJECT_ID

    SERVICE_ACCOUNT_PROJECT_ID 替換為包含服務帳戶的專案 ID。

您可以直接將角色成員資格套用至服務帳戶資源,或從資源階層中的較高層級繼承。

查看工作站集區的服務帳戶設定

  1. 前往 Cloud de Confiance by S3NS 控制台的 Cloud Run:

    前往 Cloud Run

  2. 按一下「工作站集區」,即可顯示已部署的工作站集區清單。

  3. 按一下要檢查的 worker 集區,顯示詳細資料窗格。

  4. 按一下「安全性」分頁,即可顯示 worker 集區安全性資訊,包括服務帳戶。

後續步驟