迁移使用网络标记和服务账号的 VPC 防火墙规则

Virtual Private Cloud (VPC) 防火墙规则可以包含网络标记和来源服务账号。执行以下任务,将包含网络标记和来源服务账号的 VPC 防火墙规则迁移到全球网络防火墙政策:

  1. 评估您的环境
  2. 列出现有的网络标记和服务账号
  3. 为每个网络标记和来源服务账号创建标记
  4. 将网络标记和服务账号映射到您创建的标记
  5. 将标记绑定到虚拟机 (VM) 实例
  6. 将 VPC 防火墙规则迁移到全球网络防火墙政策
  7. 查看新的网络防火墙政策
  8. 完成迁移后任务

准备工作

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Make sure that billing is enabled for your Google Cloud project.

  4. Enable the Compute Engine API.

    Enable the API

  5. Install the Google Cloud CLI.
  6. To initialize the gcloud CLI, run the following command:

    gcloud init
  7. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  8. Make sure that billing is enabled for your Google Cloud project.

  9. Enable the Compute Engine API.

    Enable the API

  10. Install the Google Cloud CLI.
  11. To initialize the gcloud CLI, run the following command:

    gcloud init
  12. 确保您具有 Compute Security Admin 角色 (roles/compute.securityAdmin)。

评估您的环境

在将 VPC 防火墙规则迁移到全球网络防火墙政策之前,请评估您现有的环境以及 Identity and Access Management (IAM) 角色和权限:

  1. 确定 VPC 网络中 VPC 防火墙规则的数量。
  2. 记下与每个 VPC 防火墙规则关联的优先级。
  3. 确保您拥有创建、关联、修改和查看全球网络防火墙政策所需的 IAM 角色和权限。
  4. 确保您拥有创建、更新和删除安全标记定义所需的 IAM 角色和权限。

    下表总结了创建和管理标记所需的各种角色:

    角色名称 执行的任务
    Tag Administrator 角色 (roles/resourcemanager.tagAdmin) 创建、更新和删除代码定义。如需了解详情,请参阅管理标记
    Tag Viewer 角色 (roles/resourcemanager.tagViewer) 查看标记定义和附加到资源的标记。
    Tag User 角色 (roles/resourcemanager.tagUser) 添加和移除关联到资源的标记。

列出现有的网络标记和服务账号

确定您的 VPC 防火墙规则是否使用任何网络标记或服务账号,并创建一个 JSON 文件来保存现有网络标记和服务账号的详细信息。

如需将网络中的网络标记和服务账号导出到 JSON 映射文件,请将 compute firewall-rules migrate 命令--export-tag-mapping 标志结合使用。

gcloud beta compute firewall-rules migrate \
    --source-network=NETWORK_NAME \
    --export-tag-mapping \
    --tag-mapping-file=TAG_MAPPING_FILE

替换以下内容:

  • NETWORK_NAME:包含您要迁移的 VPC 防火墙规则的 VPC 网络的名称。
  • TAG_MAPPING_FILE:映射 JSON 文件的名称。

如果您的 VPC 防火墙规则仅包含服务账号,则生成的 JSON 文件也仅包含服务账号。同样,如果您的 VPC 防火墙规则仅包含网络标记,则生成的 JSON 文件也仅包含网络标记。服务账号以 sa 为前缀,而网络标记没有任何前缀。

例如,以下生成的 JSON 文件包含网络标记 sql-server 和服务账号 example@example.com

{"sql-server": null, "sa:example@example.com": null}

创建标记

根据映射文件中列出的网络标记和来源服务账号,您必须在网络中创建相应的安全标记。

新的安全标记会用作网络标记和服务账号的替代项,并在迁移后保留原始网络配置。

作为具有 Tag Administrator 角色的主账号,请为每个网络标记和服务账号创建相应的安全标记键值对

gcloud resource-manager tags keys create TAG_KEY \
    --parent organizations/ORGANIZATION_ID \
    --purpose GCE_FIREWALL \
    --purpose-data network=PROJECT_ID/NETWORK_NAME

gcloud resource-manager tags values create TAG_VALUE \
    --parent ORGANIZATION_ID/TAG_KEY

替换以下内容:

  • TAG_KEY:标记键的名称。
  • ORGANIZATION_ID:您的组织的 ID。
  • PROJECT_ID:您的项目的 ID。
  • NETWORK_NAME:您的 VPC 网络的名称。
  • TAG_VALUE:要分配给标记键的值。

例如,如果您有一个 VPC 防火墙规则,其中包含一个名为 sql-server 的网络标记,请创建一个对应的安全标记键值对 sql-server:production

gcloud resource-manager tags keys create sql-server \
    --parent organizations/123456 \
    --purpose GCE_FIREWALL \
    --purpose-data network=test-project/test-network

gcloud resource-manager tags values create production \
   --parent 123456/sql-server

将网络标记和服务账号映射到标记

为 VPC 防火墙规则使用的每个网络标记和服务账号创建 IAM 治理的安全标记后,您必须将这些标记映射到映射 JSON 文件中相应的网络标记和服务账号。

修改 JSON 文件以将网络标记和服务账号映射到相应的安全标记。

{"sql-server": "tagValues/yyyyy", "sa:example@example.com": "tagValues/zzzzz"}

例如,以下 JSON 文件将网络标记 sql-server 映射到键 sql-server 的标记值,并将服务账号 example@example.com 映射到键 example@example.com 的标记值:

{"sql-server": "tagValues/production", "sa:example@example.com": "tagValues/example"}

将标记绑定到虚拟机

根据标记映射 JSON 文件,将新创建的安全标记绑定到现有网络标记已附加到的虚拟机:

  1. 作为具有 Tag Administrator 角色的主账号,请执行以下操作:

    1. 查看将安全标记附加到 Google Cloud 资源所需的权限。
    2. 向使用安全标记并将该标记绑定到虚拟机的主账号分配 Tag User 角色
  2. 作为具有 Tag User 角色的主账号,请将 compute firewall-rules migrate 命令--bind-tags-to-instances 标志结合使用:

    gcloud beta compute firewall-rules migrate \
       --source-network=NETWORK_NAME \
       --bind-tags-to-instances \
       --tag-mapping-file=TAG_MAPPING_FILE
    

    替换以下内容:

    • NETWORK_NAME:您的 VPC 网络的名称。
    • TAG_MAPPING_FILE:映射 JSON 文件的名称。

将 VPC 防火墙规则迁移到全球网络防火墙政策

将 VPC 防火墙规则迁移到全球网络防火墙政策。使用 compute-firewall-rules migrate 命令

gcloud beta compute firewall-rules migrate \
    --source-network=NETWORK_NAME \
    --target-firewall-policy=POLICY_NAME \
    --tag-mapping-file=TAG_MAPPING_FILE

替换以下内容:

  • NETWORK_NAME:包含您要迁移的 VPC 防火墙规则的 VPC 网络的名称。
  • POLICY_NAME:要在迁移期间创建的全球网络防火墙政策的名称。

从迁移中排除防火墙规则

如需将特定防火墙规则排除在迁移范围之外,请将 gcloud beta compute firewall-rules migrate 命令与 --exclusion-patterns-file 标志结合使用:

gcloud beta compute firewall-rules migrate \
    --source-network=NETWORK_NAME \
    --target-firewall-policy=POLICY_NAME \
    --exclusion-patterns-file=EXCLUSION_PATTERNS_FILE

替换以下内容:

  • NETWORK_NAME:包含您要迁移的 VPC 防火墙规则的 VPC 网络的名称。
  • POLICY_NAME:要在迁移期间创建的全球网络防火墙政策的名称。
  • EXCLUSION_PATTERNS_FILE:包含正则表达式的文件的名称,用于定义要从迁移中排除的 VPC 防火墙命名模式。请务必指定文件的完整路径。系统会跳过与指定模式匹配的防火墙规则。

    定义排除模式时,请考虑以下几点:

    • 每个正则表达式都必须单独占一行,并代表一个防火墙命名模式。
    • 正则表达式不包含任何前导或后续空格。

查看排除的防火墙规则

根据排除的防火墙规则命名格式,迁移工具不会迁移某些防火墙规则,例如 Google Kubernetes Engine (GKE) 防火墙规则。如需导出排除的防火墙规则命名格式列表,请使用 gcloud beta compute firewall-rules migrate 命令和 --export-exclusion-patterns--exclusion-patterns-file 标志。

gcloud beta compute firewall-rules migrate \
    --source-network=NETWORK_NAME \
    --target-firewall-policy=POLICY_NAME \
    --exclusion-patterns-file=EXCLUSION_PATTERNS_FILE \
    --export-exclusion-patterns

替换以下内容:

  • NETWORK_NAME:包含您要迁移的 VPC 防火墙规则的 VPC 网络的名称。
  • POLICY_NAME:要在迁移期间创建的全球网络防火墙政策的名称。
  • EXCLUSION_PATTERNS_FILE:以下排除的防火墙规则命名格式导出的文件的路径。

    gke-(.+)-ipv6-all
    gke-(.+)-(.+)-((master)|(vms)|(all)|(inkubelet)|(exkubelet)|(mcsd))
    k8s-fw-(l7-)?(.+)
    k8s-(.+)-((node)|(http)|(node-http))-hc
    (.+)-hc
    k8s2-(.+)-(.+)-(.+)-(.+)(-fw)?
    k8s2-(.+)-l4-shared-hc-fw
    gke((gw)|(mcg))1-l7-(.+)-(.+)
    

如需迁移与特定格式匹配的排除防火墙规则,请从导出列表中移除该格式,并使用 --exclusion-patterns-file 标志运行 gcloud beta compute firewall-rules migrate 命令。

强制迁移并保留评估顺序

在迁移期间,如果排除的防火墙规则的评估顺序介于用户指定的防火墙规则的评估顺序之间,则迁移会失败。这是因为排除的防火墙规则不会被迁移,并且迁移工具无法在新网络防火墙政策中保留用户定义的规则的原始评估顺序。

例如,如果您的防火墙规则具有以下优先级,则迁移会失败。

  • 优先级为 100 的用户指定规则
  • 优先级为 200 的排除规则
  • 优先级为 300 的用户指定规则

如需强制迁移工具迁移用户指定的规则,同时保留其原始评估顺序并忽略排除的防火墙规则,请将 gcloud beta compute firewall-rules migrate 命令与 --force 标志一起使用。

gcloud beta compute firewall-rules migrate \
    --source-network=NETWORK_NAME \
    --target-firewall-policy=POLICY_NAME \
    --force

替换以下内容:

  • NETWORK_NAME:包含您要迁移的 VPC 防火墙规则的 VPC 网络的名称。
  • POLICY_NAME:要在迁移期间创建的全球网络防火墙政策的名称。

查看新的全球网络防火墙政策

在将新创建的政策关联到 VPC 网络之前,Google 建议您先查看该政策,以确保迁移过程已准确完成。

请验证以下内容:

  • 防火墙政策规则配置是否正确,以及是否已为每个规则正确迁移以下规则组成部分:

    • 相对优先级
    • 流量方向
    • 对匹配项执行的操作
    • 日志设置
    • 目标参数
    • 来源参数(适用于入站流量规则)
    • 目的地参数(适用于出站流量规则)
    • 协议和端口限制条件
  • 验证安全标记是否已附加到正确的虚拟机。使用 resource-manager tags bindings list 命令

    gcloud resource-manager tags bindings list \
        --location=ZONE_ID \
        --parent //compute.googleapis.com/projects/PROJECT_ID/zones/ZONE_ID/instances/INSTANCE_NAME \
        --effective
    

    替换以下内容:

    • ZONE_ID:您的虚拟机所在的可用区。
    • PROJECT_ID:您的项目的 ID。
    • INSTANCE_NAME:您的虚拟机的名称。

迁移后的任务

如需激活并使用新的全球网络防火墙政策,请完成迁移后任务。如需了解详情,请参阅迁移后任务

后续步骤