Service Control API 存取權管控

如要為代管服務叫用 Service Control API,呼叫端必須具備代管服務的下列 Identity and Access Management (IAM) 權限:

身分與存取權管理 (IAM) 角色 roles/servicemanagement.serviceControllerroles/ownerroles/editor 都具備上述權限,且均可用來授予這些權限。建議使用 IAM 角色 roles/servicemanagement.serviceController 執行代管服務。雖然 roles/ownerroles/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 指南