管理使用方政策

借助分层服务激活,您可以管理通过 Google Cloud 资源层次结构继承的服务启用。如需了解详情,请参阅概览。

ConsumerPolicy 是在Google Cloud 资源层次结构的每个级别找到的 Service Usage API 资源。此资源始终命名为 default,其中包含用于定义哪些服务处于启用状态的 enableRules。您可以修改 ConsumerPolicy 资源,而不是启用或停用特定服务。如果服务名称位于其列表中,则该服务会在该层次结构级别启用。

本文档介绍了如何使用 Google Cloud CLI 管理项目、文件夹和组织的消费者政策。

准备工作

  1. 登录您的 Google Cloud 账号。如果您是 Google Cloud新手,请 创建一个账号来评估我们的产品在实际场景中的表现。新客户还可获享 $300 赠金,用于运行、测试和部署工作负载。
  2. 安装 Google Cloud CLI。

  3. 如果您使用的是外部身份提供方 (IdP),则必须先 使用联合身份登录 gcloud CLI。

  4. 如需初始化 gcloud CLI,请运行以下命令:

    gcloud init
  5. 创建或选择 Google Cloud 项目。

    选择或创建项目所需的角色

    • 选择项目:选择项目不需要特定的 IAM 角色,您可以选择已获授角色的任何项目。
    • 创建项目:如需创建项目,您需要拥有 Project Creator 角色 (roles/resourcemanager.projectCreator),该角色包含 resourcemanager.projects.create 权限。了解如何授予角色。
    • 创建 Google Cloud 项目:

      gcloud projects create PROJECT_ID

      将 PROJECT_ID 替换为您要创建的 Google Cloud 项目的名称。

    • 选择您创建的 Google Cloud 项目:

      gcloud config set project PROJECT_ID

      将 PROJECT_ID 替换为您的 Google Cloud 项目名称。

  6. 如果您要使用现有项目来完成本指南,请验证您是否拥有完成本指南所需的权限。如果您创建了新项目,则您已拥有所需的权限。

  7. 安装 Google Cloud CLI。

  8. 如果您使用的是外部身份提供方 (IdP),则必须先 使用联合身份登录 gcloud CLI。

  9. 如需初始化 gcloud CLI,请运行以下命令:

    gcloud init
  10. 创建或选择 Google Cloud 项目。

    选择或创建项目所需的角色

    • 选择项目:选择项目不需要特定的 IAM 角色,您可以选择已获授角色的任何项目。
    • 创建项目:如需创建项目,您需要拥有 Project Creator 角色 (roles/resourcemanager.projectCreator),该角色包含 resourcemanager.projects.create 权限。了解如何授予角色。
    • 创建 Google Cloud 项目:

      gcloud projects create PROJECT_ID

      将 PROJECT_ID 替换为您要创建的 Google Cloud 项目的名称。

    • 选择您创建的 Google Cloud 项目:

      gcloud config set project PROJECT_ID

      将 PROJECT_ID 替换为您的 Google Cloud 项目名称。

  11. 如果您要使用现有项目来完成本指南,请验证您是否拥有完成本指南所需的权限。如果您创建了新项目,则您已拥有所需的权限。

  12. 如果您未指明要管理的 Google Cloud 资源,则本文档中的命令默认为当前项目。例如,gcloud beta services policies get --policy-name=default 会返回当前项目的使用方政策。

    您可以检索当前项目 ID:

    gcloud config list --format='text(core.project)'

所需的角色

如需获得管理使用方政策所需的权限,请让您的管理员为您授予目标资源的 Service Usage Admin (roles/serviceusage.serviceUsageAdmin) IAM 角色。 如需详细了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限。

此预定义角色可提供管理使用方政策所需的权限。如需查看所需的确切权限,请展开所需权限部分:

所需权限

管理使用方政策需要以下权限:

  • 获取使用方政策: serviceusage.consumerpolicy.get
  • 更新使用方政策:
    • serviceusage.consumerpolicy.analyze
    • serviceusage.consumerpolicy.update
  • 获取有效政策: serviceusage.effectivepolicy.get
  • 检查服务是否已启用:serviceusage.values.test

您也可以使用自定义角色或其他预定义角色来获取这些权限。

获取使用方政策

您可以使用 gcloud beta services policies get 命令检索项目、文件夹或组织的 ConsumerPolicy。

此命令会返回在确切资源级别设置的 enableRules,而不是继承的规则。如需查看包含继承规则的更完整视图,您可以检索有效政策。仅支持 default 政策名称。

gcloud beta services policies get --policy-name=default \
    --RESOURCE_TYPE=RESOURCE_ID \
    --output-file=OUTPUT_FILE

替换以下内容:

  • RESOURCE_TYPE:您要获取其使用方政策的资源类型。有效值为 project、folder 和 organization。您可以省略此标志,以返回当前项目的使用方政策。

  • RESOURCE_ID:项目 ID、文件夹 ID 或组织 ID,具体取决于您为 RESOURCE_TYPE 使用的值。

  • OUTPUT_FILE:(可选)输出文件的路径,可在其中保存使用方政策的内容。支持的文件格式为 JSON 和 YAML。

更新消费者政策

您可以使用 gcloud beta services policies update 命令更新 ConsumerPolicy。这样,您就可以替换当前政策,并使用 YAML 文件一次性更新多项已启用的服务。

此命令不会自动启用服务依赖项。您必须在输入文件中明确列出所有服务依赖项。您可以使用 --validate-only 标志在应用更改之前预览更改。

gcloud beta services policies update --consumer-policy-file=PATH_TO_CONSUMER_POLICY

将 PATH_TO_CONSUMER_POLICY 替换为包含使用方政策的 YAML 文件的路径,例如:

gcloud beta services policies update --consumer-policy-file=/path/to/the/file.yaml

支持的标志:

  • --bypass-api-usage-check,以绕过用量检查。否则,如果您要停用的任何服务在过去 30 天内使用过或在过去 3 天内启用过,系统会返回错误。

  • --bypass-dependency-check,以绕过依赖项检查。添加服务时,所有服务依赖项都必须存在于政策中。移除某项服务时,政策中的其他服务都不能依赖该服务。 否则,更新不会成功,并会返回错误。

  • --validate-only - 验证更新,而不实际执行操作。

请注意以下几点:

  • 如需获取政策文件的 YAML 模板,请先检索使用方政策,然后使用 --output-file 标志将政策保存到文件中。然后,修改此文件并将其用作更新命令的输入。示例模板:

    name: projects/PROJECT_ID/consumerPolicies/default
    enableRules:
      - services:
        - services/SERVICE
        - ...
        - ...
    

    替换以下内容:

    • PROJECT_ID:您的Google Cloud 项目 ID。 其他受支持的资源名称也采用类似的格式,例如:folders/FOLDER_ID/consumerPolicies/default。

    • SERVICE:服务的名称,例如 bigquery.googleapis.com。

获取有效政策

您可以使用 gcloud beta services policies get-effective 命令检索资源的有效政策。

有效政策将资源的 ConsumerPolicy 与其所有祖先资源的政策相结合。这样,您就可以全面了解所有已启用的服务,包括直接在资源上启用的所有服务以及从其祖先资源继承的服务。

gcloud beta services policies get-effective \
    --RESOURCE_TYPE=RESOURCE_ID \
    --view=VIEW

替换以下内容:

  • RESOURCE_TYPE:您要获取其有效政策的资源类型。有效值为 project、folder 和 organization。您可以省略此标志,以返回当前项目的有效政策。

  • RESOURCE_ID:项目 ID、文件夹 ID 或组织 ID,具体取决于您为 RESOURCE_TYPE 使用的值。

  • VIEW:BASIC(用于检索一组有限的元数据)或 FULL(用于检索完整的元数据集,包括在层次结构中启用每项服务的位置)。默认值为 BASIC。

检查服务是否已启用

您可以使用 gcloud beta services policies test-enabled 命令检查是否在资源上启用了服务。

检查服务的状态时,此命令会考虑有效政策和完整 Google Cloud 资源层次结构。

gcloud beta services policies test-enabled SERVICE \
    --RESOURCE_TYPE=RESOURCE_ID

替换以下内容:

  • SERVICE:您要检查的服务的名称。

  • RESOURCE_TYPE:您要检查的资源类型。有效值为 project、folder 和 organization。您可以省略此标志,以检查当前项目的状态。

  • RESOURCE_ID:项目 ID、文件夹 ID 或组织 ID,具体取决于您为 RESOURCE_TYPE 使用的值。

示例

正在检索使用方政策

  • 正在检索当前项目的消费者政策:
    gcloud beta services policies get

    输出:

    name: projects/PROJECT_ID/consumerPolicies/default
    enableRules:
     services:
      - services/apikeys.googleapis.com
      - services/compute.googleapis.com
      - services/oslogin.googleapis.com
      - services/serviceusage.googleapis.com
    updateTime: 2025-09-11T23:05:22.758394Z
    createTime: 2025-01-31T20:17:37.272343Z
    etag: W/"W9nsVJK0V1m7ee7tM7pFDg=="

正在更新消费者政策

  • 已成功更新消费者政策:
    gcloud beta services policies update --consumer-policy-file=/tmp/test.yaml

    输出:

    Operation [operations/ucpat.p39-581601899707-86fe7e37-c7f9-4624-90c4-d54754d57eed] complete. Result: {
        "@type":"type.googleapis.com/google.api.serviceusage.v2beta.ConsumerPolicy",
        "createTime":"1970-01-01T00:00:00Z",
        "enableRules":[
            {
                "services":[
                    "services/apikeys.googleapis.com"
                ]
            }
        ],
        "name":"projects/PROJECT_ID/consumerPolicies/default",
        "updateTime":"1970-01-01T00:00:00Z"
    }
  • 未能更新使用方政策:
    gcloud beta services policies update --consumer-policy-file=/tmp/test.json

    出错提示:

    ERROR: (gcloud.beta.services.policies.update) Invalid consumer_policy_file format. Please provide path to a yaml file.
  • 尝试在服务最近被使用或启用时更新使用方政策:
    gcloud beta services policies update --consumer-policy-file=/tmp/test.yaml

    输出:

    The operation "operations/ucpat.p39-581601899707-4884bdb0-d899-49ac-9c83-38457950ef33" resulted in a failure "The services apikeys.googleapis.com have usage in the last 30 days or were enabled in the past 3 days. Please specify force if you want to proceed with the destructive policy change. Help Token: AVSZLmtCfGwMm4oHmOyExdDEFRQ0pFiBrl879nbZlY2JkfVzeU63u66ApXYr6MIEAoig..."
  • 在服务最近被使用或启用时,通过绕过使用情况检查来更新使用方政策:
    gcloud beta services policies update --consumer-policy-file=/tmp/test.yaml --bypass-api-usage-check

    输出:

    Operation [operations/ucpat.p39-581601899707-8ffda670-ed04-4776-8d43-d2f8e1817e00] complete. Result: {
        "@type":"type.googleapis.com/google.api.serviceusage.v2beta.ConsumerPolicy",
        "createTime":"1970-01-01T00:00:00Z",
        "enableRules":[
            {
                "services":[
                    "services/serviceusage.googleapis.com"
                ]
            }
        ],
        "name":"projects/PROJECT_ID/consumerPolicies/default",
        "updateTime":"1970-01-01T00:00:00Z"
    }

检索有效政策

  • 正在检索当前项目的有效政策的 BASIC 视图:
    gcloud beta services policies get-effective

    输出:

    EnabledRules:
     Services:
      -   services/apikeys.googleapis.com
      -   services/compute.googleapis.com
      -   services/computescanning.googleapis.com
      -   services/containeranalysis.googleapis.com
      -   services/containerscanning.googleapis.com
      -   services/gkebackup.googleapis.com
      -   services/osconfig.googleapis.com
      -   services/oslogin.googleapis.com
      -   services/serviceusage.googleapis.com
  • 正在检索当前项目的有效政策的 FULL 视图:
    gcloud beta services policies get-effective --view=FULL

    输出:

    EnabledRules:
     Services:
      -   services/apikeys.googleapis.com
      -   services/compute.googleapis.com
      -   services/computescanning.googleapis.com
      -   services/containeranalysis.googleapis.com
      -   services/containerscanning.googleapis.com
      -   services/gkebackup.googleapis.com
      -   services/osconfig.googleapis.com
      -   services/oslogin.googleapis.com
      -   services/serviceusage.googleapis.com
    
    Metadata of effective policy:
    EnabledService: services/apikeys.googleapis.com
    EnabledPolicies: ['projects/PROJECT_ID/consumerPolicies/default']
    
    EnabledService: services/bcidcloudenforcer-pa.googleapis.com
    EnabledPolicies: ['folders/FOLDER_ID/consumerPolicies/default']
    
    EnabledService: services/compute.googleapis.com
    EnabledPolicies: ['projects/PROJECT_ID/consumerPolicies/default']
    ...

检查服务是否已启用

  • 正在检查当前项目的 API 密钥服务启用状态:
    gcloud beta services policies test-enabled apikeys.googleapis.com

    输出:

    Service apikeys.googleapis.com is ENABLED for resource projects/test-project.
  • 正在检查当前项目的已停用 App Hub 服务的状态:
    gcloud beta services policies test-enabled apphub.googleapis.com

    输出:

    Service apphub.googleapis.com is NOT ENABLED for resource projects/test-project.

后续步骤