如要為代管服務叫用 Service Control API,呼叫端必須具備代管服務的下列 Identity and Access Management (IAM) 權限:
services.check
需要權限servicemanagement.services.check
。services.report
需要權限servicemanagement.services.report
。services.allocateQuota
需要權限servicemanagement.services.quota
。
身分與存取權管理 (IAM) 角色 roles/servicemanagement.serviceController
、roles/owner
和 roles/editor
都具備上述權限,且均可用來授予這些權限。建議使用 IAM 角色 roles/servicemanagement.serviceController
執行代管服務。雖然 roles/owner
和 roles/editor
也會授予這些權限,但基於安全考量,建議使用範圍較窄的角色。
資源模型
IAM 會對資源套用 IAM 政策,控管哪些人可以對資源執行哪些操作。Service Control API 使用下列資源提供功能:
- 服務供應商專案:服務供應商專案可能有零或多項代管服務。在這個階層中,服務生產端專案是服務的父項。
- 代管服務:代管服務可能有零或多個服務用戶。
- 服務用戶:服務用戶是指已啟用服務的Google Cloud 專案。
IAM 存取權管控適用於資源模型。如果在服務供應商專案層級授予角色,則會影響供應商專案擁有的所有代管服務。如果在受管理服務層級授予角色,受管理服務的所有服務消費者都會受到影響。
基於安全性和區隔考量,強烈建議您在每個服務生產端專案中僅建立一個代管服務,否則可能發生問題;比方說,如果服務生產端專案耗盡了向 Service Control API 傳送要求的配額,將會使多個代管服務受到影響。
如果您有多租戶服務,則應在代管服務層級授予 roles/servicemanagement.serviceController
角色。如果您有單一用戶群服務 (意即代管服務中每個服務用戶都擁有專屬的執行個體),應在服務用戶層級授予這個角色。對於會影響所有服務用戶的背景資料處理作業,建議您在代管服務層級授予角色。
授予角色
如要呼叫 Service Control API,您必須將必要角色授予呼叫端。您可以透過下列三種方式之一授予角色。 您必須是服務生產者專案的擁有者,才能授予必要角色。
在服務生產端專案層級授予角色
如要將必要角色授予代管服務所屬的專案,您可以依照「授予、變更及撤銷資源存取權」一文中的指示操作,或是使用 Google Cloud CLI add-iam-policy-binding 指令授予角色。
舉例來說,您可以將角色授予服務帳戶,例如 foo@developer.gserviceaccount.com
:
gcloud projects add-iam-policy-binding PRODUCER_PROJECT_ID --member serviceAccount:SERVICE_ACCOUNT --role roles/servicemanagement.serviceController
同樣地,您也可以將角色授予使用者帳戶,例如 bar@gmail.com
:
gcloud projects add-iam-policy-binding PRODUCER_PROJECT_ID --member user:USER_ACCOUNT --role roles/servicemanagement.serviceController
在服務層級授予角色
您可以使用 curl
,在服務層級授予 roles/servicemanagement.serviceController
角色。以下範例使用「開始使用」指南「使用 curl 進行測試」一節中定義的 gcurl
別名:
gcurl -d "{ 'policy': { 'bindings': [ { role: 'roles/servicemanagement.serviceController', members: 'serviceAccount:SERVICE_ACCOUNT' } ] } }" https://servicemanagement.googleapis.com/v1/services/YOUR_SERVICE_NAME:setIamPolicy
請注意,上述範例會取代所有現有的服務層級 IAM 政策。如要逐步授予新角色,您必須在要求主體中納入所有 IAM 政策。
在服務用戶層級授予角色
您可以在服務消費者層級授予 roles/servicemanagement.serviceController
角色。服務消費者層級權限規定,對 Service Control API 的要求必須包含至少一個有效的服務消費者專案 ID。以下範例使用「開始使用」指南「使用 curl 進行測試」一節中定義的 gcurl
別名:
gcurl -d "{ 'policy': { 'bindings': [ { role: 'roles/servicemanagement.serviceController', members: 'serviceAccount:SERVICE_ACCOUNT' } ] } }" https://servicemanagement.googleapis.com/v1/services/YOUR_SERVICE_NAME/consumers/CONSUMER_PROJECT_NUMBER:setIamPolicy
請注意,上述範例會取代所有現有的消費者專案層級 IAM 政策。如要逐步授予新角色,您必須在要求主體中納入所有 IAM 政策。
詳情請參閱 Cloud Auth 指南。