如要為代管服務叫用 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 角色。以下範例使用 gcurl 別名,您可執行下列 alias 指令並提供驗證權杖,定義這個別名:
alias gcurl='curl -H "Authorization: Bearer $(gcloud auth print-access-token)" -H "Content-Type: application/json"'
gcurl -d "{
'policy': {
'bindings': [ {
role: 'roles/servicemanagement.serviceController',
members: 'serviceAccount:SERVICE_ACCOUNT'
} ]
}
}" https://servicemanagement.googleapis.com/v1/services/YOUR_SERVICE_NAME:setIamPolicy
在服務用戶層級授予角色
您可以在服務消費者層級授予 roles/servicemanagement.serviceController 角色。服務用戶層級權限規定,對 Service Control API 的要求必須包含至少一個有效的服務用戶專案 ID。以下範例使用 gcurl 別名,您可執行下列 alias 指令並提供驗證權杖,定義這個別名:
alias gcurl='curl -H "Authorization: Bearer $(gcloud auth print-access-token)" -H "Content-Type: application/json"'
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
詳情請參閱 Cloud Auth 指南。