限制远程仓库

本文档介绍如何使用组织政策服务来限制 Dataform 代码库可连接的第三方远程 Git 代码库池。

准备工作

在设置或修改 dataform.restrictGitRemotes 政策之前,请找到您想列入许可名单的远程 Git 代码库的完整网址。

如需查找已连接到 Dataform 代码库的远程 Git 代码库的完整网址,请按以下步骤操作:

  1. 在 Google Cloud 控制台中,转到 Dataform 页面。

    转到 Dataform

  2. 选择代码库,然后点击设置

    请注意,Dataform 页面上显示的远程代码库的网址会被缩短,不能在 dataform.restrictGitRemotes 政策中使用。

  3. 设置页面的 Git 连接设置下,复制代码库来源值。

    代码库来源值是远程代码库的完整网址。您可在 dataform.restrictGitRemotes 政策中使用此网址。

所需的角色

如需获得管理组织政策所需的权限,请让您的管理员为您授予组织的 Organization Policy Administrator (roles/orgpolicy.policyAdmin) IAM 角色。如需详细了解如何授予角色,请参阅管理访问权限

此预定义角色包含管理组织政策所需的权限。如需查看所需的确切权限,请展开所需权限部分:

所需权限

如需管理组织政策,您必须拥有以下权限:

  • orgpolicy.constraints.list
  • orgpolicy.policies.create
  • orgpolicy.policies.delete
  • orgpolicy.policies.list
  • orgpolicy.policies.update
  • orgpolicy.policy.get
  • orgpolicy.policy.set

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

关于限制远程 Git 代码库

您可以将 Dataform 代码库关联到 GitHub 或 GitLab 代码库。

您可能希望限制 Dataform 代码库可以连接的远程代码库池,以防止恶意操作者通过不受保护的代码库副本访问您的 Dataform 代码库和访问令牌。

您可以使用组织政策服务创建组织政策,限制 Dataform 可以连接到哪些 Git 代码库网址。

在 Dataform 中限制远程 Git 代码库的限制条件如下:

constraints/dataform.restrictGitRemotes

如需使用该限制条件,请创建一个组织政策,其中包含可连接到 Dataform 代码库的远程 Git 代码库的网址列表 allowedValues。远程 Git 代码库由其完整网址标识。

dataform.restrictGitRemotes 政策具有追溯效力,这意味着该限制条件会影响现有的 Dataform 代码库。

实施组织政策后,Dataform 代码库只能连接到 allowedValues 列表中列出的远程 Git 代码库。组织政策中未明确定义的远程 Git 代码库被禁止连接到 Dataform 代码库。

如果您未设置 dataform.restrictGitRemotes 政策,Dataform 代码库和远程 Git 代码库之间的通信将不受限制。

您可以通过以下方式使用 dataform.restrictGitRemotes 政策:

Allow all
Dataform 代码库可以连接到所有远程代码库网址。如果您的组织不想阻止与远程代码库的任何通信,请选择此选项。或者,如需允许所有远程代码库网址,您也可以未设置组织政策。
allowedValues网址列表
Dataform 代码库只能连接到列入许可名单的远程代码库。选择此选项可防止数据渗漏。
Deny all
Dataform 代码库不得连接到任何远程网址。如果您的组织想要阻止所有通信并使用 Dataform 代码库,请选择此选项。

关于列入许可名单的远程 Git 代码库的规范

  • 您只能将此列表限制条件应用于 GitHub 和 GitLab 代码库。

  • 组织政策将应用于以前的数据,并且会影响现有的 Dataform 代码库。

  • 此限制条件接受 allowedValues(阻止连接到所有其他远程 Git 代码库)或 Deny all。默认值为 Allow all - 如果未设置,组织政策允许与所有远程 Git 代码库进行通信。建议将组织政策设置为 allowedValues

  • 由您或拥有所需权限的管理员负责管理和维护政策。确保有关组织内政策管理员的沟通。

在组织级别设置组织政策限制条件

控制台

  1. 转到 /组织政策/组织政策页面。

    转到“组织政策”

  2. 如有必要,请从项目下拉菜单中选择所需的组织。
  3. 点击 Restrict git Remotes for repositories in Dataform(在 Dataform 中限制代码库的 Git 远程)。
  4. 点击管理政策。如果您无法点击管理政策按钮,则表示您没有正确的权限
  5. 选择自定义,为特定远程 Git 代码库设置组织政策。

    修改组织政策页面上的自定义选项。

  6. 选择所需的政策执行政策类型

  7. 对于政策值,选择自定义

  8. 输入远程 Git 代码库的完整网址。

  9. 点击新建政策值,然后根据需要输入远程 Git 代码库的完整网址。

  10. 点击保存以应用该限制条件。

gcloud

如需为远程 Git 代码库设置限制条件,您首先需要提供组织 ID。您可以通过运行 organizations list 命令并在响应中查找数字 ID 来找到组织 ID:

gcloud organizations list

gcloud CLI 会按以下格式返回组织列表:

DISPLAY_NAME               ID
example-organization1      29252605212
example-organization2      1234567890

使用 gcloud resource-manager org-policies set-policy 命令设置组织政策。您需要以 JSON 或 YAML 文件的形式提供政策。 按以下格式创建一个 JSON 文件:

{
  "name": "organizations/ORGANIZATION_ID/policies/dataform.restrictGitRemotes",
  "spec": {
    "rules": [
      {
        "values": {
          "allowedValues": ["https://github.com/example/allowed-repository.git"]
        }
      }
    ]
  }
}

ORGANIZATION_ID 替换为组织的数字 ID。

如果您不希望 Dataform 代码库连接到任何远程 Git 代码库,则可以设置组织政策,并将 denyAll 设置为 true

{
  "name": "organizations/ORGANIZATION_ID/policies/dataform.restrictGitRemotes",
  "spec": {
    "rules": [
      {
        "denyAll": true
      }
    ]
  }
}

ORGANIZATION_ID 替换为组织的数字 ID。

API

使用 setOrgPolicy() API 定义您的限制。允许 Dataform 连接到您指定的 allowedValue 列表中的远程 Git 代码库网址。

例如,以下请求将 dataform.restrictGitRemotes 限制条件应用于某个组织,而所选远程 Git 代码库 Dataform 代码库可以连接到该代码库:

POST https://orgpolicy.googleapis.com/v2/organizations/ORGANIZATION_ID/policies

其中 ORGANIZATION_ID 是组织的数字 ID。

现在,在请求正文中,为此限制条件提供所需的组织政策:

{
  "name": "organizations/ORGANIZATION_ID/policies/dataform.restrictGitRemotes",
  "spec": {
    "rules": [
      {
        "values": {
          "allowedValues": ["https://github.com/example/allowed-repository.git"]
        }
      }
    ]
  }
}
Replace <code><var>ORGANIZATION_ID</var></code> with the numeric ID
of the organization.

如果您不希望 Dataform 代码库连接到任何远程 Git 代码库,则可以设置组织政策,并将 denyAll 设置为 true

{
  "name": "organizations/ORGANIZATION_ID/policies/dataform.restrictGitRemotes",
  "spec": {
    "rules": [
      {
        "denyAll": true
      }
    ]
  }
}
 
Replace <code><var>ORGANIZATION_ID</var></code> with the numeric ID
of the organization.

如果已设置组织政策,则需要使用组织政策定义作为请求正文执行以下请求:

PATCH https://orgpolicy.googleapis.com/v2/organizations/ORGANIZATION_ID/policies/dataform.restrictGitRemotes

在项目级别设置组织政策

在项目级设置组织政策会覆盖或与组织级组织政策合并。进行合并时,denyAll 的优先级高于 allowedValues。例如,如果组织级别的组织政策设置为 denyAll,并且项目级别的合并政策在 allowedValues 列表中列出了远程代码库网址,则不允许 Dataform 连接到远程代码库。在这种情况下,项目级别的组织政策必须替换组织级别的政策,这样 Dataform 才能连接到远程代码库。如需详细了解组织政策层次结构,请参阅了解层次结构评估

控制台

按照在组织级别设置组织政策限制条件下记录的相同流程进行操作,但要从项目(而非组织)选择器中选择您所需的项目。

项目选择器。

gcloud

使用 gcloud resource-manager org-policies set-policy 命令设置组织政策。您需要以 JSON 或 YAML 文件的形式提供政策。

按以下格式创建一个 JSON 文件:

{
  "name": "projects/PROJECT_ID_OR_NUMBER/policies/dataform.restrictGitRemotes",
  "spec": {
    "rules": [
      {
        "values": {
          "allowedValues": ["https://github.com/example/allowed-repository.git"]
        }
      }
    ]
  }
}

PROJECT_ID_OR_NUMBER 替换为此组织政策的项目 ID 或项目编号。

然后,使用请求传入该文件:

gcloud resource-manager org-policies set-policy MY_POLICY.JSON --project=PROJECT_ID

API

使用 setOrgPolicy() API 定义您的限制。允许 Dataform 连接到您指定的 allowedValue 列表中的远程 Git 代码库网址。

例如,以下请求针对一个组织应用 dataform.restrictGitRemotes 限制条件,在该组织中,Dataform 代码库只能连接到选定的远程 Git 代码库,并且尚未设置 constraints/dataform.restrictGitRemotes 政策:

POST https://orgpolicy.googleapis.com/v2/projects/PROJECT_ID_OR_NUMBER/policies

请求正文包含该限制条件所需的组织政策:

{
  "name": "projects/PROJECT_ID_OR_NUMBER/policies/dataform.restrictGitRemotes",
  "spec": {
    "rules": [
      {
        "values": {
          "allowedValues": ["https://github.com/example/allowed-repository.git"]
        }
      }
    ]
  }
}

PROJECT_ID_OR_NUMBER 替换为此请求的项目 ID 或项目编号。

以下请求将 dataform.restrictGitRemotes 限制条件应用于某个组织,在该组织中,Dataform 代码库只能连接到选定的远程 Git 代码库,并且 constraints/dataform.restrictGitRemotes 政策已设置:

PATCH https://orgpolicy.googleapis.com/v2/projects/PROJECT_ID_OR_NUMBER/policies/dataform.restrictGitRemotes

请求正文包含该限制条件所需的组织政策:

{
  "name": "projects/PROJECT_ID_OR_NUMBER/policies/dataform.restrictGitRemotes",
  "spec": {
    "rules": [
      {
        "values": {
          "allowedValues": ["https://github.com/example/allowed-repository.git"]
        }
      }
    ]
  }
}

PROJECT_ID_OR_NUMBER 替换为此请求的项目 ID 或项目编号。

将 Git 遥控器列入许可名单的最佳实践

  • 为了降低数据渗漏风险,请明确设置 dataform.restrictGitRemotes 限制条件,以将选定的一组可信远程 Git 代码库列入许可名单。

  • 如果您只使用未连接到远程 Git 代码库的 Dataform 代码库,请将 dataform.restrictGitRemotes 限制条件设置为 Deny All

  • 请避免将 deniedValues 列表与此限制一起使用。如果您在 deniedValues 列表中定义值,则意味着只有 deniedValues 列表中的远程 Git 代码库无法连接。如果您想精确控制 Dataform 可以连接到哪个远程 Git 代码库,这可能会带来安全问题。如果要从 allowedValues 列表中移除某些远程 Git 代码库,请更新现有组织政策以将其从 allowedValues 列表中移除,而不是将远程 Git 代码库放入较低层次结构的 deniedValues 列表中。

  • 如果您希望针对大部分资源层次结构设置组织政策,但要排除某些项目,请使用 setOrgPolicy 方法恢复默认组织政策,只需指定 restoreDefault 对象以允许项目中的所有 Dataform 代码库连接到远程 Git 代码库即可。当前应用于项目的政策不受默认设置的影响。

  • 组织政策IAM 角色结合使用,可以更好地控制对 Dataform 代码库的访问权限。

  • 组织或项目中启用了组织政策的任何 Dataform 代码库都受此政策的约束。如果出现此问题,我们建议您在未应用组织政策的其他项目中设置其他服务和产品,并根据需要使用共享 VPC

  • 在设置 dataform.restrictGitRemotes 政策之前,请确保有关组织政策及其组织内管理员的沟通。由您或拥有所需权限的管理员负责管理和维护政策。

后续步骤