限制远程代码库

本文档介绍如何使用组织政策服务来限制 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 Remotes)。
  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 列表中移除,而不是将远程代码库放入较低层次结构的 deniedValues 列表中。

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

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

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

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

后续步骤