限制远程代码库

本文档介绍了如何使用组织政策服务来限制 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 代码库。

  • 组织政策会追溯应用,并会影响现有的数据表单代码库。

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

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

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

控制台

  1. 前往 /Organizational Policies/Organization Policies 页面。

    转到“组织政策”

  2. 如有必要,请从项目下拉菜单中选择所需的组织。
  3. 点击限制通过 Git 远程访问 Dataform 中的仓库
  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 限制,允许 Dataform 代码库连接到所选的远程 Git 代码库:

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 政策之前,请确保在贵组织内就组织政策及其管理员进行沟通。由您或拥有所需权限的管理员负责管理和维护该政策。

后续步骤