在 Trusted Cloud by S3NS中,當您啟用及使用Trusted Cloud 服務時,系統會自動建立專案層級、資料夾層級和機構層級的服務代理程式。有時,這些服務代理程式也會自動獲得角色,代表您建立及存取資源。
如有需要,您也可以要求 Trusted Cloud 在服務啟用前,為該服務建立專案層級、資料夾層級和機構層級的服務代理程式。要求 Trusted Cloud 建立服務代理程式,即可在您使用服務前,將角色授予服務代理程式。如果尚未建立服務代理,就無法授予服務代理角色。
如果您使用下列任一策略管理允許政策,這個選項就非常實用:
- 類似 Terraform 的陳述式架構。 如果 Terraform 設定未包含服務代理程式的角色,套用設定時就會撤銷這些角色。在 Terraform 設定中建立服務代理程式並授予角色,即可確保這些角色不會遭到撤銷。
- 以程式碼形式呈現政策的系統,可將目前允許的政策副本儲存在程式碼存放區。如果您允許 Trusted Cloud 自動授予服務代理人角色,這些角色會顯示在實際的允許政策中,但不會顯示在允許政策的儲存副本中。如要解決這項不一致問題,您可能會誤撤銷這些角色。主動建立服務代理程式並授予角色,有助於防止程式碼存放區與實際允許政策之間發生差異。
觸發服務代理程式建立作業後,您必須授予服務代理程式通常會自動獲得的角色。否則部分服務可能無法正常運作。這是因為應使用者要求建立的服務代理不會自動獲得角色。
事前準備
Enable the Resource Manager 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
-
-
授予服務代理程式專案存取權:
專案 IAM 管理員 (
找出要建立的服務代理
如要找出需要要求 Trusted Cloud 建立的專案層級、資料夾層級和機構層級服務代理程式,請按照下列步驟操作:
列出您使用的服務及其 API 端點。如要查看所有可用服務及其端點,請使用下列其中一種方法:
控制台
前往 Trusted Cloud 控制台的「API Library」(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
:您要列出可用服務的資源類型。請使用projects
、folders
或organizations
。 -
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
欄位中的值。-
在服務代理程式參考資料頁面中,搜尋每個 API 端點。
如果端點列於表格中,請找出該端點的所有服務代理程式。忽略電子郵件地址含有
IDENTIFIER
預留位置的服務代理,因為這些服務代理適用於特定服務的資源,而非專案、資料夾或機構。針對每個專案層級、資料夾層級和機構層級的服務代理程式,請記錄下列資訊:
- 服務專員的電子郵件地址格式。
- 授予服務代理的角色 (如有)。
觸發服務代理建立作業
確定要建立哪些服務代理程式後,即可要求Trusted Cloud 建立這些代理程式。
要求 Trusted Cloud 建立服務代理程式時,請提供服務和資源。然後,為該服務和資源建立所有服務代理程式。 Trusted Cloud
gcloud
針對需要建立服務代理程式的每項服務,請執行下列操作:
查看服務的服務專員電子郵件地址。使用電子郵件地址中的預留位置,判斷需要為哪些資源建立服務代理程式:
預留位置 建立服務代理的位置 PROJECT_NUMBER
您要使用服務的每個專案 FOLDER_NUMBER
您要使用服務的每個資料夾 ORGANIZATION_NUMBER
您要使用服務的每個機構 為每個資源建立服務代理程式。
gcloud beta services identity create
指令會為指定的 API 和資源建立所有服務代理程式。使用下列任何指令資料之前,請先替換以下項目:
-
ENDPOINT
:要建立服務代理程式的 API 端點,例如aiplatform.googleapis.com
。 -
RESOURCE_TYPE
:要為其建立服務代理程式的資源類型。請使用project
、folder
或organization
。 -
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
-
選用:在回覆中記錄服務專員的電子郵件地址 (如有)。 這個電子郵件地址會識別服務的主要服務代理人。您可以使用這個 ID,將角色授予主要服務代理程式。
Terraform
如要瞭解如何套用或移除 Terraform 設定,請參閱「基本 Terraform 指令」。 詳情請參閱 Terraform供應商參考說明文件。
針對需要建立服務代理程式的每項服務,請執行下列操作:
查看服務的服務專員電子郵件地址。使用電子郵件地址中的預留位置,判斷需要為哪些資源建立服務代理程式:
預留位置 建立服務代理的位置 PROJECT_NUMBER
您要使用服務的每個專案 FOLDER_NUMBER
您要使用服務的每個資料夾 ORGANIZATION_NUMBER
您要使用服務的每個機構 為每個資源建立服務代理程式。舉例來說,下列程式碼會為 AI Platform 建立所有專案層級的服務代理程式:
REST
針對需要建立服務代理程式的每項服務,請執行下列操作:
查看服務的服務專員電子郵件地址。使用電子郵件地址中的預留位置,判斷需要為哪些資源建立服務代理程式:
預留位置 建立服務代理的位置 PROJECT_NUMBER
您要使用服務的每個專案 FOLDER_NUMBER
您要使用服務的每個資料夾 ORGANIZATION_NUMBER
您要使用服務的每個機構 為每個資源建立服務代理程式。
Service Usage API 的
services.generateServiceIdentity
方法會為指定的 API 和資源建立所有服務代理程式。使用任何要求資料之前,請先替換以下項目:
-
RESOURCE_TYPE
:您要為其建立服務代理程式的資源類型。請使用projects
、folders
或organizations
。 -
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" } }
-
選用:在回覆中記錄服務專員的電子郵件地址 (如有)。 這個電子郵件地址會識別服務的主要服務代理人。您可以使用這個 ID,將角色授予主要服務代理程式。
將角色授予服務代理人
Trusted Cloud 為專案、資料夾和機構建立必要的服務代理程式後,您可以使用服務代理程式的電子郵件地址授予角色。
如果您要求 Trusted Cloud 建立服務代理,則必須授予這些服務代理通常會自動獲得的角色。否則部分服務可能無法正常運作。這是因為應使用者要求建立的服務代理不會自動獲得角色。
如要瞭解如何識別自動授予的角色,請參閱「識別要建立的服務代理程式」。
找出服務專員的電子郵件地址
如要找出服務專員的電子郵件地址,請按照下列步驟操作:
gcloud
如果尚未找出服務專員的電子郵件地址格式,請先找出。如需瞭解這個格式,請參閱服務代理參考資料。
將電子郵件地址中的所有預留位置,替換為對應的專案、資料夾或機構編號。
或者,如果服務代理是主要服務代理,您可以觸發服務代理建立作業,取得服務的電子郵件地址。觸發建立服務代理的指令會傳回主要服務代理的電子郵件地址。
Terraform
如要瞭解如何套用或移除 Terraform 設定,請參閱「基本 Terraform 指令」。 詳情請參閱 Terraform供應商參考說明文件。
如果尚未找出服務專員的電子郵件地址格式,請先找出。如需瞭解這個格式,請參閱服務代理參考資料。
將電子郵件地址中的所有預留位置,替換為參照適當專案、資料夾或機構編號的運算式。
舉例來說,請參考以下情況:
- 電子郵件地址格式為
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
屬性取得其電子郵件地址。
舉例來說,如果您有名為 default
的 google_project_service_identity
區塊,可以使用以下運算式取得服務主要服務專員的電子郵件地址:
${google_project_service_identity.default.email}
REST
如果尚未找出服務專員的電子郵件地址格式,請先找出。如需瞭解這個格式,請參閱服務代理參考資料。
將電子郵件地址中的所有預留位置,替換為對應的專案、資料夾或機構編號。
或者,如果服務代理是主要服務代理,您可以觸發服務代理建立作業,取得服務的電子郵件地址。觸發建立服務代理的指令會傳回主要服務代理的電子郵件地址。
將角色授予服務代理
找到服務代理的電子郵件地址後,您就可以像授予其他主體角色一樣,將角色授予服務代理。
控制台
gcloud
add-iam-policy-binding
指令可讓您快速將角色授予主體。
使用下列任何指令資料之前,請先替換以下項目:
-
RESOURCE_TYPE
:您要管理存取權的資源類型。請使用projects
、resource-manager folders
或organizations
。 -
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.com
或principalSet://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供應商參考說明文件。
REST
如要使用 REST API 授予角色,請使用讀取 - 修改 - 寫入模式:
呼叫
getIamPolicy()
讀取目前的允許政策。Resource Manager API 的
getIamPolicy
方法會取得專案、資料夾或機構的允許政策。使用任何要求資料之前,請先替換以下項目:
API_VERSION
:要使用的 API 版本。如果是專案和機構,請使用v1
。如果是資料夾,請使用v2
。RESOURCE_TYPE
:您要管理的政策所屬資源類型。請使用projects
、folders
或organizations
值。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" ] } ] }
使用文字編輯器或透過程式來編輯資源的允許政策,藉此新增或移除任何主體或角色繫結。舉例來說,您可以新增角色繫結、移除現有角色繫結,或在現有角色繫結中新增或移除主體。
呼叫
setIamPolicy()
寫入更新後的允許政策。Resource Manager API 的
setIamPolicy
方法會將要求中的政策設為專案、資料夾或機構的新允許政策。使用任何要求資料之前,請先替換以下項目:
API_VERSION
:要使用的 API 版本。如果是專案和機構,請使用v1
。如果是資料夾,請使用v2
。RESOURCE_TYPE
:您要管理的政策所屬資源類型。請使用projects
、folders
或organizations
值。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 }
如要傳送要求,請展開以下其中一個選項:
回應會包含更新後的允許政策。
後續步驟
- 查看所有服務代理的清單。
- 瞭解授予主體角色的其他方式。
- 瞭解如何建立使用者代管的服務帳戶,做為工作負載的身分。
- 進一步瞭解在Trusted Cloud 上使用 Terraform 的最佳做法。
- 探索所有 Trusted Cloud Terraform 範例。