根据组织政策对 build 进行门禁控制

借助 Cloud Build,您可以定义组织政策 (constraints/cloudbuild.allowedIntegrations),以控制哪些外部服务可以调用构建触发器。例如,如果您的触发器监听 GitHub 代码库的更改,但组织政策中拒绝了 GitHub,则触发器将不会运行。您可以为组织或项目指定任意数量的允许值或拒绝值。

本页面介绍了如何使用 Google Cloud 控制台和 gcloud 命令行工具为集成设置组织政策 (constraints/cloudbuild.allowedIntegrations)。

准备工作

  • 启用 Cloud Build 和组织政策 API(如果尚未启用)。

    启用 API 所需的角色

    如需启用 API,您需要拥有 serviceusage.services.enable 权限。如果您创建了项目,则可能已经通过 Owner 角色 (roles/owner) 拥有此权限。否则,您可以通过 Service Usage Admin 角色 (roles/serviceusage.serviceUsageAdmin) 获取此权限。 了解如何授予角色。

    启用 API

  • 如需使用本指南中的命令行示例,请安装并配置 Google Cloud SDK。

  • 如需设置、更改或删除组织政策,您必须拥有“组织政策管理员”(roles/orgpolicy.policyAdmin) 角色。如需了解如何为账号添加该角色,请参阅添加组织政策管理员。

为允许的集成设置组织政策

本部分介绍了如何设置组织政策 (constraints/cloudbuild.allowedIntegrations) 以定义允许的集成所对应的 build。

控制台

  1. 在 Google Cloud 控制台中打开组织政策页面。

    打开“组织政策”页面

  2. 点击包含允许的集成 (Cloud Build) 政策的行。

    您将看到政策详情页面。

  3. 如需修改政策,请点击修改。

    系统会显示修改政策页面。

  4. 在适用对象部分,选择自定义以设置政策的定义。

  5. 在强制执行政策部分中,选择替换,以便为政策定义您自己的规则。否则,请选择与父资源规则合并,以确保父资源中的规则应用于您的设置。如需了解详情,请参阅了解层次结构评估。

  6. 在规则部分中,点击添加规则,为您的政策添加新规则。

  7. 在政策值下,选择全部允许以允许来自所有服务的 build,选择全部拒绝以拒绝来自所有服务的 build,或选择自定义以允许或拒绝来自特定服务的 build。

    如果您选择自定义作为值,请完成以下步骤:

    1. 在政策类型部分,选择允许或拒绝。

    2. 在自定义值部分中,输入您要允许或拒绝构建的实例或代码库的主机网址。例如,如需允许或拒绝来自 GitHub 的 build,请输入网址 github.com 或 www.github.com。

      您还可以输入多个网址,只需使用空格将它们分隔开。例如,github.com ghe.staging-test.com。

      根据活动,您指定的主机网址应为以下网址之一:

      • RepoSync 事件:主机为 source.developers.google.com。
      • GitHub 应用事件:主机派生自 JSON 载荷中的 repository.html_url 字段,该字段始终为 github.com。
      • GitHub Enterprise 事件:主机派生自 JSON 载荷中的 repository.html_url 字段。例如 ghe.staging-test.com。
      • Pub/Sub 事件:主机派生自触发器中指定的来源。如果您的触发器中未指定来源,则不会进行组织政策检查。
      • Webhook 事件:主机派生自触发器中指定的来源。如果您的触发器中未指定来源,则不会进行组织政策检查。
  8. 如需保存规则,请点击完成。

  9. 如需添加其他规则,请点击添加规则。否则,如需保存政策,请点击保存。

gcloud

  1. 打开一个终端窗口。

  2. 如果您想允许或拒绝来自所有服务的 build,请创建一个包含以下内容的 YAML 文件:

    name: projects/PROJECT_NUMBER/policies/cloudbuild.allowedIntegrations
    spec:
      inheritFromParent: INHERIT
      rules:
        - ALLOW_OR_DENY: true
    

    其中:

    • PROJECT_NUMBER 是您的项目编号。
    • 如果您希望政策规则从父资源继承,则 INHERIT 为 true。否则,false。
    • 如果您想允许来自所有主机网址的 build,则 ALLOW_OR_DENY 为 allowAll。否则,为 denyAll。
    • HOST_URL 是您的主机网址。例如 github.com。您还可以在后续行中指定其他网址。

    如果您想允许或拒绝来自所选服务的 build,请创建一个包含以下内容的 YAML 文件:

    name: projects/PROJECT_NUMBER/policies/cloudbuild.allowedIntegrations
    spec:
      inheritFromParent: INHERIT
      rules:
        - values:
            ALLOW_OR_DENY:
              HOST_URL
              ...
    

    其中:

    • PROJECT_NUMBER 是您的项目编号。
    • 如果您希望政策规则从父资源继承,则 INHERIT 为 true。否则,false。
    • 如果您想指定允许构建的主机网址,则 ALLOW_OR_DENY 为 allowedValues。否则,deniedValues。
    • HOST_URL 是您的主机网址。例如 github.com。您还可以在后续行中指定其他网址。
  3. 运行以下命令来设置组织政策,其中 FILE_NAME 是 YAML 文件的名称:

     gcloud org-policies set-policy FILE_NAME
    
  4. 如需确认您的政策是否已设置,请运行以下命令,其中 PROJECT_ID 是您的项目 ID:

     gcloud org-policies describe cloudbuild.allowedIntegrations --effective --project PROJECT_ID
    

测试允许的集成所对应的组织政策

本部分介绍了如何使用 build 触发器测试组织政策 (constraints/cloudbuild.allowedIntegrations)。

  1. 如果您尚未创建构建触发器,请创建一个。

  2. 将更改推送到您的来源。

  3. 如果您的政策设置为允许从来源构建,您将能够在构建历史记录页面上查看触发器触发的构建执行情况。否则,您的 build 将无法执行。如需查看因政策定义而受到限制的 build 的历史记录,请参阅 Logs Explorer 页面,了解 JSON 载荷原因和拒绝原因。

后续步骤