Service Management API 访问控制

Service Management API 使用 Identity and Access Management (Cloud IAM) 来控制对托管式服务及其子资源的访问。本页面介绍了 Service Management API 提供的 IAM 资源、角色和权限,以及如何使用它们来控制访问

IAM 资源

IAM 将 IAM 政策应用于资源,从而控制谁可以对资源执行哪些操作。Service Management API 使用以下资源来提供其功能:

您需要不同的权限才能使用和管理不同的资源,请参阅以下部分了解详情。

IAM 权限

调用者只有具有目标资源的必要的 IAM 权限,才能调用 Service Management API。

下表列出了适用于服务的权限:

权限 说明
servicemanagement.services.delete 删除服务。
servicemanagement.services.get 阅读服务。
servicemanagement.services.create 在项目中创建新服务。
servicemanagement.services.list 列出项目中的服务。
servicemanagement.services.update 更新服务。
servicemanagement.services.bind 查看并启用调用者控制的项目上的服务。
servicemanagement.services.setIamPolicy 设置服务的 IAM 访问政策。
servicemanagement.services.getIamPolicy 读取服务的 IAM 访问政策。
servicemanagement.services.check 检查服务使用方的状态。请参阅 services.check
servicemanagement.services.quota 为服务使用方分配配额。请参阅 services.allocateQuota
servicemanagement.services.report 报告服务使用情况。请参阅 services.report

下表显示了适用情况下,调用每种 Service Management API 方法所需的权限。API 参考中亦记录了此信息:

方法 所需权限
services.delete 指定的 service_name 上的 servicemanagement.services.delete
services.disable 在项目上:serviceusage.services.disable
services.enable 在项目上:serviceusage.services.enable
在服务上:servicemanagement.services.bind
services.get 指定的 service_name 上的 servicemanagement.services.get
services.getConfig 指定的 service_name 上的 servicemanagement.services.get
services.undelete 指定的 service_name 上的 servicemanagement.services.delete
services.configs.create 指定的 service_name 上的 servicemanagement.services.update
services.configs.get 指定的 service_name 上的 servicemanagement.services.get
services.configs.list 指定的 service_name 上的 servicemanagement.services.get
services.configs.submit 指定的 service_name 上的 servicemanagement.services.update
services.rollouts.create 指定的 service_name 上的 servicemanagement.services.update
services.rollouts.get 指定的 service_name 上的 servicemanagement.services.get
services.rollouts.list 指定的 service_name 上的 servicemanagement.services.get

IAM 角色

Identity and Access Management 支持将用户绑定到角色来授予权限。如需了解详情,请参阅了解角色

下表列出了适用于服务的角色:

角色 权限
roles/viewer servicemanagement.services.get
servicemanagement.services.list
roles/editor roles/viewer 的所有权限,及

servicemanagement.services.delete
servicemanagement.services.create
servicemanagement.services.update
servicemanagement.services.bind
servicemanagement.services.check
servicemanagement.services.quota
servicemanagement.services.report
roles/owner roles/editor 的所有权限,及

servicemanagement.services.setIamPolicy
servicemanagement.services.getIamPolicy
roles/servicemanagement.configEditor servicemanagement.services.get
servicemanagement.services.update
roles/servicemanagement.serviceConsumer servicemanagement.services.bind
roles/servicemanagement.serviceController servicemanagement.services.get
servicemanagement.services.check
servicemanagement.services.quota
servicemanagement.services.report

管理政策

IAM 按层次结构评估政策:子资源始终沿用其父级的政策。对于 Service Management API 而言,每个托管式服务都是其服务提供方项目的子资源。因此,针对服务提供方项目授予的角色适用于属于该项目的所有托管式服务。如需了解在项目级层授予角色的说明,请参阅管理政策

您还可以管理单个服务的 IAM 策略。以下各节介绍了如何使用 Google Cloud Console、Service Management API 和 Google Cloud SDK 管理服务级别角色。

使用 Google Cloud Console 管理访问

  1. 在 Google Cloud Console 中打开“端点”页面。

    打开 Endpoints 页面

  2. 点击您希望管理其访问权限的服务。
  3. 单击页面顶部的“PERMISSIONS”(权限)链接。这会打开和关闭信息面板。
  4. 在信息面板中,您可以针对任何服务级角色查看当前成员列表,添加新成员以及删除成员。

使用 Cloud SDK 管理访问权限

Cloud SDK 包含 gcloud endpoints services 命令,用于管理托管式服务的 IAM 政策:

  • endpoints services get-iam-policy
    • 显示服务的 IAM 政策。
  • endpoints services check-iam-policy
    • 检查服务的 IAM 政策。
  • endpoints services add-iam-policy-binding
    • 将成员添加到角色。
  • endpoints services remove-iam-policy-binding
    • 从角色中删除成员。

例如:

# Show the IAM policy of service "endpointsapis.appspot.com".
gcloud endpoints services get-iam-policy endpointsapis.appspot.com

# The above command may produce an output similar to this:
bindings:
- members:
  - user:email1@gmail.com
  - group:group1@googlegroups.com
  role: roles/servicemanagement.serviceConsumer

# Add a user to "roles/servicemanagement.serviceConsumer" role.
gcloud endpoints services add-iam-policy-binding endpointsapis.appspot.com --member "user:email1@gmail.com" --role "roles/servicemanagement.serviceConsumer"

# Add a group to "roles/servicemanagement.serviceConsumer" role.
gcloud endpoints services add-iam-policy-binding endpointsapis.appspot.com --member "group:group1@googlegroups.com" --role "roles/servicemanagement.serviceConsumer"

# Remove a user from "roles/servicemanagement.serviceConsumer" role.
gcloud endpoints services remove-iam-policy-binding endpointsapis.appspot.com --member "user:email1@gmail.com" --role "roles/servicemanagement.serviceConsumer"

# Remove a group from "roles/servicemanagement.serviceConsumer" role.
gcloud endpoints services remove-iam-policy-binding endpointsapis.appspot.com --member "group:group1@googlegroups.com" --role "roles/servicemanagement.serviceConsumer"

使用 Service Management API 管理访问权限

Service Management API 包括用于管理服务级和使用者级政策的 IAM Policy API。您可以使用 gcurl 命令来试验这些 API 方法。如需了解初始设置步骤,请参阅使用入门

例如:

# View the current IAM policy on service "endpointsapis.appspot.com".
gcurl -d '{}' https://servicemanagement.googleapis.com/v1/services/endpointsapis.appspot.com:getIamPolicy

# View the current IAM policy on service "endpointsapis.appspot.com" and consumer "12345".
gcurl -d '{}' https://servicemanagement.googleapis.com/v1/services/endpointsapis.appspot.com/consumers/12345:getIamPolicy