為服務專員建立及授予角色

在 Trusted Cloud by S3NS中,當您啟用及使用Trusted Cloud 服務時,系統會自動建立專案層級、資料夾層級和機構層級的服務代理程式。有時,這些服務代理程式也會自動獲得角色,代表您建立及存取資源。

如有需要,您也可以要求 Trusted Cloud 在服務啟用前,為該服務建立專案層級、資料夾層級和機構層級的服務代理程式。要求 Trusted Cloud 建立服務代理程式,即可在您使用服務前,將角色授予服務代理程式。如果尚未建立服務代理,就無法授予服務代理角色。

如果您使用下列任一策略管理允許政策,這個選項就非常實用:

  • 類似 Terraform 的陳述式架構。 如果 Terraform 設定未包含服務代理程式的角色,套用設定時就會撤銷這些角色。在 Terraform 設定中建立服務代理程式並授予角色,即可確保這些角色不會遭到撤銷。
  • 以程式碼形式呈現政策的系統,可將目前允許的政策副本儲存在程式碼存放區。如果您允許 Trusted Cloud 自動授予服務代理人角色,這些角色會顯示在實際的允許政策中,但不會顯示在允許政策的儲存副本中。如要解決這項不一致問題,您可能會誤撤銷這些角色。主動建立服務代理程式並授予角色,有助於防止程式碼存放區與實際允許政策之間發生差異。

觸發服務代理程式建立作業後,您必須授予服務代理程式通常會自動獲得的角色。否則部分服務可能無法正常運作。這是因為應使用者要求建立的服務代理不會自動獲得角色。

事前準備

  • Enable the Resource Manager API.

    Enable the API

  • 瞭解服務代理

必要的角色

觸發建立服務代理時,不需要任何 IAM 權限。不過,您需要特定 IAM 權限,才能在這個頁面執行其他工作:

  • 如要取得列出可用服務及其端點所需的權限,請要求管理員在您要列出可用服務的專案、資料夾或機構中,授予您「服務使用情形檢視者」 (roles/serviceusage.serviceUsageViewer) IAM 角色。如要進一步瞭解如何授予角色,請參閱「管理專案、資料夾和機構的存取權」。

    這個預先定義的角色包含 serviceusage.services.list 權限,這是列出可用服務及其端點的必要權限。

    您或許還可透過自訂角色或其他預先定義的角色取得這項權限。

  • 如要取得授予服務代理程式存取權所需的權限,請管理員在您要授予存取權的專案、資料夾或機構中,授予下列 IAM 角色:

    • 授予服務代理程式專案存取權: 專案 IAM 管理員 (roles/resourcemanager.projectIamAdmin)
    • 授予服務代理程式資料夾存取權: 資料夾管理員 (roles/resourcemanager.folderAdmin)
    • 授予服務代理人專案、資料夾和機構的存取權: 機構管理員 (roles/resourcemanager.organizationAdmin)

    如要進一步瞭解如何授予角色,請參閱「管理專案、資料夾和機構的存取權」。

    這些預先定義的角色具備授予服務代理人存取權所需的權限。如要查看確切的必要權限,請展開「必要權限」部分:

    所需權限

    如要授予服務代理人存取權,必須具備下列權限:

    • 授予服務代理專案存取權:
      • resourcemanager.projects.getIamPolicy
      • resourcemanager.projects.setIamPolicy
    • 授予服務代理人資料夾存取權:
      • resourcemanager.folders.getIamPolicy
      • resourcemanager.folders.setIamPolicy
    • 授予服務代理機構存取權:
      • resourcemanager.organizations.getIamPolicy
      • resourcemanager.organizations.setIamPolicy

    您或許還可透過自訂角色或其他預先定義的角色取得這些權限。

找出要建立的服務代理

如要找出需要要求 Trusted Cloud 建立的專案層級、資料夾層級和機構層級服務代理程式,請按照下列步驟操作:

  1. 列出您使用的服務及其 API 端點。如要查看所有可用服務及其端點,請使用下列其中一種方法:

    控制台

    前往 Trusted Cloud 控制台的「API Library」(API 程式庫) 頁面。

    前往 API 程式庫

    API 端點是「其他詳細資料」部分列出的「服務名稱」

    gcloud

    gcloud services list 指令會列出專案的所有可用服務。

    使用下列任何指令資料之前,請先替換以下項目:

    • EXPRESSION:選用。用於篩選結果的運算式。舉例來說,以下運算式會篩選名稱包含 googleapis.com 但不包含 sandbox 的所有服務:

      name ~ googleapis.com AND name !~ sandbox

      如需篩選運算式清單,請參閱 gcloud topic filters

    • LIMIT:選用。要列出的結果數上限。預設值為 unlimited

    執行下列指令:

    Linux、macOS 或 Cloud Shell

    gcloud services list --available --filter='EXPRESSION' --limit=LIMIT

    Windows (PowerShell)

    gcloud services list --available --filter='EXPRESSION' --limit=LIMIT

    Windows (cmd.exe)

    gcloud services list --available --filter='EXPRESSION' --limit=LIMIT

    回應會列出所有可用服務的名稱和標題。API 端點是 NAME 欄位中的值。

    REST

    Service Usage API 的 services.list 方法會列出專案的所有可用服務。

    使用任何要求資料之前,請先替換以下項目:

    • RESOURCE_TYPE:您要列出可用服務的資源類型。請使用 projectsfoldersorganizations
    • RESOURCE_ID:要列出可用服務的專案、資料夾或機構的 ID。 Trusted Cloud專案 ID 為英數字串,例如 my-project。 資料夾和機構 ID 為數字,例如 123456789012
    • PAGE_SIZE:選用。要在回應中納入的服務數量。預設值為 50,最大值為 200。如果服務數量大於頁面大小,回應會包含分頁符記,可用於擷取下一頁結果。
    • NEXT_PAGE_TOKEN:選用。這個方法先前回應中傳回的分頁符記。如果指定,服務清單會從上一個要求結束的位置開始。

    HTTP 方法和網址:

    GET https://serviceusage.googleapis.com/v1/RESOURCE_TYPE/RESOURCE_ID/services?pageSize=PAGE_SIZE&pageToken=NEXT_PAGE_TOKEN

    如要傳送要求,請展開以下其中一個選項:

    回應會包含資源的所有可用服務名稱和標題。如果可用服務數量大於頁面大小,回應也會包含分頁符記。

    API 端點是 name 欄位中的值。

  2. 服務代理程式參考資料頁面中,搜尋每個 API 端點。

    如果端點列於表格中,請找出該端點的所有服務代理程式。忽略電子郵件地址含有 IDENTIFIER 預留位置的服務代理,因為這些服務代理適用於特定服務的資源,而非專案、資料夾或機構。

    針對每個專案層級、資料夾層級和機構層級的服務代理程式,請記錄下列資訊:

    • 服務專員的電子郵件地址格式。
    • 授予服務代理的角色 (如有)。

觸發服務代理建立作業

確定要建立哪些服務代理程式後,即可要求Trusted Cloud 建立這些代理程式。

要求 Trusted Cloud 建立服務代理程式時,請提供服務和資源。然後,為該服務和資源建立所有服務代理程式。 Trusted Cloud

gcloud

針對需要建立服務代理程式的每項服務,請執行下列操作:

  1. 查看服務的服務專員電子郵件地址。使用電子郵件地址中的預留位置,判斷需要為哪些資源建立服務代理程式:

    預留位置 建立服務代理的位置
    PROJECT_NUMBER 您要使用服務的每個專案
    FOLDER_NUMBER 您要使用服務的每個資料夾
    ORGANIZATION_NUMBER 您要使用服務的每個機構

  2. 為每個資源建立服務代理程式。

    gcloud beta services identity create 指令會為指定的 API 和資源建立所有服務代理程式。

    使用下列任何指令資料之前,請先替換以下項目:

    • ENDPOINT:要建立服務代理程式的 API 端點,例如 aiplatform.googleapis.com
    • RESOURCE_TYPE:要為其建立服務代理程式的資源類型。請使用 projectfolderorganization
    • RESOURCE_ID:要建立服務代理的專案、資料夾或機構 ID。 Trusted Cloud專案 ID 為英數字串,例如 my-project。 資料夾和機構 ID 為數字,例如 123456789012

      一次只能為一項資源建立服務代理程式。如要為多個資源建立服務代理程式,請針對每個資源執行一次指令。

    執行下列指令:

    Linux、macOS 或 Cloud Shell

    gcloud beta services identity create --service=ENDPOINT \
        --RESOURCE_TYPE=RESOURCE_ID

    Windows (PowerShell)

    gcloud beta services identity create --service=ENDPOINT `
        --RESOURCE_TYPE=RESOURCE_ID

    Windows (cmd.exe)

    gcloud beta services identity create --service=ENDPOINT ^
        --RESOURCE_TYPE=RESOURCE_ID

    回應包含服務主要服務代理的電子郵件地址。這個電子郵件地址包含您為其建立服務代理程式的專案、資料夾或機構的數字 ID。

    如果服務沒有主要服務代理人,回應就不會包含電子郵件地址。

    以下是主要服務代理程式的服務回應範例。

    Service identity created: service-232332569935@gcp-sa-aiplatform.s3ns-system.iam.gserviceaccount.com
    

  3. 選用:在回覆中記錄服務專員的電子郵件地址 (如有)。 這個電子郵件地址會識別服務的主要服務代理人。您可以使用這個 ID,將角色授予主要服務代理程式。

Terraform

如要瞭解如何套用或移除 Terraform 設定,請參閱「基本 Terraform 指令」。 詳情請參閱 Terraform供應商參考說明文件

針對需要建立服務代理程式的每項服務,請執行下列操作:

  1. 查看服務的服務專員電子郵件地址。使用電子郵件地址中的預留位置,判斷需要為哪些資源建立服務代理程式:

    預留位置 建立服務代理的位置
    PROJECT_NUMBER 您要使用服務的每個專案
    FOLDER_NUMBER 您要使用服務的每個資料夾
    ORGANIZATION_NUMBER 您要使用服務的每個機構

  2. 為每個資源建立服務代理程式。舉例來說,下列程式碼會為 AI Platform 建立所有專案層級的服務代理程式:

data "google_project" "default" {
}

# Create all project-level aiplatform.googleapis.com service agents
resource "google_project_service_identity" "default" {
  provider = google-beta

  project = data.google_project.default.project_id
  service = "aiplatform.googleapis.com"
}

REST

針對需要建立服務代理程式的每項服務,請執行下列操作:

  1. 查看服務的服務專員電子郵件地址。使用電子郵件地址中的預留位置,判斷需要為哪些資源建立服務代理程式:

    預留位置 建立服務代理的位置
    PROJECT_NUMBER 您要使用服務的每個專案
    FOLDER_NUMBER 您要使用服務的每個資料夾
    ORGANIZATION_NUMBER 您要使用服務的每個機構

  2. 為每個資源建立服務代理程式。

    Service Usage API 的 services.generateServiceIdentity 方法會為指定的 API 和資源建立所有服務代理程式。

    使用任何要求資料之前,請先替換以下項目:

    • RESOURCE_TYPE:您要為其建立服務代理程式的資源類型。請使用 projectsfoldersorganizations
    • RESOURCE_ID:要建立服務代理的專案、資料夾或機構 ID。 Trusted Cloud專案 ID 為英數字串,例如 my-project。 資料夾和機構 ID 為數字,例如 123456789012

      一次只能為一項資源建立服務代理程式。如要為多個資源建立服務代理程式,請分別為每個資源傳送要求。

    • ENDPOINT:要建立服務代理程式的 API 端點,例如 aiplatform.googleapis.com

    HTTP 方法和網址:

    POST https://serviceusage.googleapis.com/v1beta1/RESOURCE_TYPE/RESOURCE_ID/services/ENDPOINT:generateServiceIdentity

    如要傳送要求,請展開以下其中一個選項:

    回應包含 Operation,指出要求的狀態。如要查看作業狀態,請使用 operations.get 方法。

    完成的操作會包含服務主要服務代理的電子郵件地址。這個電子郵件地址包含您為其建立服務代理程式的專案、資料夾或機構的數字 ID。

    如果服務沒有主要服務代理人,回應就不會包含電子郵件地址。

    以下是服務的完成作業範例,該服務有主要服務代理程式。

    {
      "name": "operations/finished.DONE_OPERATION",
      "done": true,
      "response": {
        "@type": "type.googleapis.com/google.api.serviceusage.v1beta1.ServiceIdentity",
        "email": "service-232332569935@gcp-sa-aiplatform.s3ns-system.iam.gserviceaccount.com",
        "uniqueId": "112245693826560101651"
      }
    }
    

  3. 選用:在回覆中記錄服務專員的電子郵件地址 (如有)。 這個電子郵件地址會識別服務的主要服務代理人。您可以使用這個 ID,將角色授予主要服務代理程式。

將角色授予服務代理人

Trusted Cloud 為專案、資料夾和機構建立必要的服務代理程式後,您可以使用服務代理程式的電子郵件地址授予角色。

如果您要求 Trusted Cloud 建立服務代理,則必須授予這些服務代理通常會自動獲得的角色。否則部分服務可能無法正常運作。這是因為應使用者要求建立的服務代理不會自動獲得角色。

如要瞭解如何識別自動授予的角色,請參閱「識別要建立的服務代理程式」。

找出服務專員的電子郵件地址

如要找出服務專員的電子郵件地址,請按照下列步驟操作:

gcloud

  1. 如果尚未找出服務專員的電子郵件地址格式,請先找出。如需瞭解這個格式,請參閱服務代理參考資料

  2. 將電子郵件地址中的所有預留位置,替換為對應的專案、資料夾或機構編號。

或者,如果服務代理是主要服務代理,您可以觸發服務代理建立作業,取得服務的電子郵件地址。觸發建立服務代理的指令會傳回主要服務代理的電子郵件地址。

Terraform

如要瞭解如何套用或移除 Terraform 設定,請參閱「基本 Terraform 指令」。 詳情請參閱 Terraform供應商參考說明文件

  1. 如果尚未找出服務專員的電子郵件地址格式,請先找出。如需瞭解這個格式,請參閱服務代理參考資料

  2. 將電子郵件地址中的所有預留位置,替換為參照適當專案、資料夾或機構編號的運算式。

    舉例來說,請參考以下情況:

    • 電子郵件地址格式為 service-PROJECT_NUMBER@gcp-sa-aiplatform-cc.s3ns-system.iam.gserviceaccount.com
    • 服務代理適用於標示為「default」的專案

    在這種情況下,服務專員的電子郵件地址如下:

    service-${data.google_project.default.number}@gcp-sa-aiplatform-cc.s3ns-system.iam.gserviceaccount.com
    

或者,如果服務代理是服務的主要服務代理,您可以從 google_project_service_identity 資源的 email 屬性取得其電子郵件地址。

舉例來說,如果您有名為 defaultgoogle_project_service_identity 區塊,可以使用以下運算式取得服務主要服務專員的電子郵件地址:

${google_project_service_identity.default.email}

REST

  1. 如果尚未找出服務專員的電子郵件地址格式,請先找出。如需瞭解這個格式,請參閱服務代理參考資料

  2. 將電子郵件地址中的所有預留位置,替換為對應的專案、資料夾或機構編號。

或者,如果服務代理是主要服務代理,您可以觸發服務代理建立作業,取得服務的電子郵件地址。觸發建立服務代理的指令會傳回主要服務代理的電子郵件地址。

將角色授予服務代理

找到服務代理的電子郵件地址後,您就可以像授予其他主體角色一樣,將角色授予服務代理。

控制台

  1. 前往 Trusted Cloud 控制台的「IAM」頁面。

    前往 IAM

  2. 選取專案、資料夾或機構。

  3. 按一下「授予存取權」,然後輸入服務代理的電子郵件地址。

  4. 從下拉式清單中選取要授予的角色。

  5. 選用:為角色新增條件

  6. 按一下 [儲存]。服務代理程式就會取得指定資源的角色。

gcloud

add-iam-policy-binding 指令可讓您快速將角色授予主體。

使用下列任何指令資料之前,請先替換以下項目:

  • RESOURCE_TYPE:您要管理存取權的資源類型。請使用 projectsresource-manager foldersorganizations

  • RESOURCE_ID:您的 Trusted Cloud 專案、資料夾或機構 ID。專案 ID 為英數字元,例如 my-project。 資料夾和機構 ID 是數字,例如 123456789012

  • PRINCIPAL:主體或成員的 ID,通常採用以下格式: PRINCIPAL_TYPE:ID。 例如 principal://iam.googleapis.com/locations/global/workforcePools/my-pool/subject/my-user@example.comprincipalSet://iam.googleapis.com/locations/global/workforcePools/example-pool/group/example-group@example.com。如需 PRINCIPAL 可用的完整值清單,請參閱「主體 ID」。

  • ROLE_NAME:要撤銷的角色名稱。請使用下列其中一種格式:

    • 預先定義的角色:roles/SERVICE.IDENTIFIER
    • 專案層級自訂角色:projects/PROJECT_ID/roles/IDENTIFIER
    • 機構層級的自訂角色:organizations/ORG_ID/roles/IDENTIFIER

    如需預先定義角色清單,請參閱「瞭解角色」一文。

  • CONDITION:要新增至角色繫結的條件。如不想新增條件,請使用 None 值。如要進一步瞭解條件,請參閱條件總覽

執行下列指令:

Linux、macOS 或 Cloud Shell

gcloud RESOURCE_TYPE add-iam-policy-binding RESOURCE_ID \
    --member=PRINCIPAL --role=ROLE_NAME \
    --condition=CONDITION

Windows (PowerShell)

gcloud RESOURCE_TYPE add-iam-policy-binding RESOURCE_ID `
    --member=PRINCIPAL --role=ROLE_NAME `
    --condition=CONDITION

Windows (cmd.exe)

gcloud RESOURCE_TYPE add-iam-policy-binding RESOURCE_ID ^
    --member=PRINCIPAL --role=ROLE_NAME ^
    --condition=CONDITION

回應會包含更新後的 IAM 政策。

Terraform

如要瞭解如何套用或移除 Terraform 設定,請參閱「基本 Terraform 指令」。 詳情請參閱 Terraform供應商參考說明文件

# Grant the AI Platform Custom Code Service Account the Vertex AI Custom
# Code Service Agent role (roles/aiplatform.customCodeServiceAgent)
resource "google_project_iam_member" "custom_code" {
  project = data.google_project.default.project_id
  role    = "roles/aiplatform.customCodeServiceAgent"
  member  = "serviceAccount:service-${data.google_project.default.number}@gcp-sa-aiplatform-cc.iam.gserviceaccount.com"
}

# Grant the primary aiplatform.googleapis.com service agent (AI Platform
# Service Agent) the Vertex AI Service Agent role
# (roles/aiplatform.serviceAgent)
resource "google_project_iam_member" "primary" {
  project = data.google_project.default.project_id
  role    = "roles/aiplatform.serviceAgent"
  member  = "serviceAccount:${google_project_service_identity.default.email}"
}

REST

如要使用 REST API 授予角色,請使用讀取 - 修改 - 寫入模式:

  1. 呼叫 getIamPolicy() 讀取目前的允許政策。

    Resource Manager API 的 getIamPolicy 方法會取得專案、資料夾或機構的允許政策。

    使用任何要求資料之前,請先替換以下項目:

    • API_VERSION:要使用的 API 版本。如果是專案和機構,請使用 v1。如果是資料夾,請使用 v2
    • RESOURCE_TYPE:您要管理的政策所屬資源類型。請使用 projectsfoldersorganizations 值。
    • RESOURCE_ID:您的 Trusted Cloud專案、機構或資料夾 ID。專案 ID 為英數字串,例如 my-project。資料夾和機構 ID 為數字,例如 123456789012
    • POLICY_VERSION:要傳回的政策版本。要求應指定最新政策版本,即政策版本 3。詳情請參閱在取得政策時指定政策版本

    HTTP 方法和網址:

    POST https://cloudresourcemanager.googleapis.com/API_VERSION/RESOURCE_TYPE/RESOURCE_ID:getIamPolicy

    JSON 要求主體:

    {
      "options": {
        "requestedPolicyVersion": POLICY_VERSION
      }
    }
    

    如要傳送要求,請展開以下其中一個選項:

    回覆會包含資源的允許政策。例如:

    {
      "version": 1,
      "etag": "BwWKmjvelug=",
      "bindings": [
        {
          "role": "roles/owner",
          "members": [
            "principal://iam.googleapis.com/locations/global/workforcePools/my-pool/subject/my-user@example.com"
          ]
        }
      ]
    }
    

  2. 使用文字編輯器或透過程式來編輯資源的允許政策,藉此新增或移除任何主體或角色繫結。舉例來說,您可以新增角色繫結、移除現有角色繫結,或在現有角色繫結中新增或移除主體。

  3. 呼叫 setIamPolicy() 寫入更新後的允許政策。

    Resource Manager API 的 setIamPolicy 方法會將要求中的政策設為專案、資料夾或機構的新允許政策。

    使用任何要求資料之前,請先替換以下項目:

    • API_VERSION:要使用的 API 版本。如果是專案和機構,請使用 v1。如果是資料夾,請使用 v2
    • RESOURCE_TYPE:您要管理的政策所屬資源類型。請使用 projectsfoldersorganizations 值。
    • RESOURCE_ID:您的 Trusted Cloud專案、機構或資料夾 ID。專案 ID 為英數字串,例如 my-project。資料夾和機構 ID 為數字,例如 123456789012
    • POLICY:要設定的政策 JSON 表示法。如要進一步瞭解政策格式,請參閱政策參考資料

    HTTP 方法和網址:

    POST https://cloudresourcemanager.googleapis.com/API_VERSION/RESOURCE_TYPE/RESOURCE_ID:setIamPolicy

    JSON 要求主體:

    {
      "policy": POLICY
    }
    

    如要傳送要求,請展開以下其中一個選項:

    回應會包含更新後的允許政策。

後續步驟