Service Control API 访问控制

要为托管式服务调用 Service Control API,调用者必须对该服务具有以下 Identity and Access Management 权限:

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 身份验证指南