配置对防火墙政策规则的批量更新

本文档介绍了网络管理员如何使用 YAML 配置文件批量更新多个分层防火墙政策规则和网络防火墙政策规则。批量更新流程包括:创建规则或将规则导出到 YAML 文件、修改该文件,然后使用 Google Cloud CLI 或 Compute Engine API 应用更改。

如果您使用 REST API 批量更新防火墙政策规则,请使用 patch 方法。借助 patch 方法,您可以通过在请求中提供 rules 字段来替换防火墙政策中的所有规则;您无需创建 YAML 文件。使用 patch 方法时,请保留优先级最低的默认 goto_next 规则。

如果您使用 gcloud CLI 批量更新防火墙政策规则,请使用以下 gcloud CLI 命令:

  • export-rules:用于将防火墙政策规则配置导出到 YAML 文件。在 YAML 文件中,您可以根据自己的需求添加、修改和移除防火墙政策规则配置。

  • import-rules:用于导入修改后的防火墙政策规则配置文件。 此命令会替换指定防火墙政策的现有规则。

在开始之前,请查看批量更新概览中的概念。

准备工作

如需执行批量更新,请确保您已安装并配置以下工具:

  • Google Cloud CLI
  • Compute Engine API
  • 如果您尚未设置身份验证,请进行设置。 身份验证是通过其进行身份验证以访问 Google Cloud 服务和 API 的过程。如需从本地开发环境运行代码或示例,您可以按本部分所述的方式向 Compute Engine 进行身份验证。

控制台

当您使用 Google Cloud 控制台访问 Google Cloud 服务和 API 时,无需设置身份验证。

gcloud

  1. 安装 Google Cloud CLI 后,运行以下命令对其进行初始化:

    
    gcloud init
    
    

    如果您使用的是外部身份提供方 (IdP),则必须先使用联合身份登录 gcloud CLI。

  2. 在本地客户端中设置默认区域和可用区。

REST

如需在本地开发环境中使用本页面上的 REST API 示例,请使用您提供给 gcloud CLI 的凭证。

安装 Google Cloud CLI 后,运行以下命令对其进行初始化:


gcloud init

如果您使用的是外部身份提供方 (IdP),则必须先使用联合身份登录 gcloud CLI。

如需了解详情,请参阅Google Cloud 身份验证文档中的使用 REST 时进行身份验证。

创建 YAML 文件

您可以使用 export-rules 命令将现有防火墙政策规则导出到 YAML 文件。如需了解详情,请参阅导出防火墙政策规则。 导出的 YAML 文件包含优先级最低的默认 goto_next 规则(优先级大于或等于 2147483644 的规则),请确保您不会修改这些默认 goto_next 规则。

不过,如果您不想使用 export-rules 命令,也可以手动创建新的 YAML 文件来修改规则。如需手动创建新的 YAML 文件,请执行以下操作:

  1. 创建 YAML 文件 RULES_YAML_FILE。将 RULES_YAML_FILE 替换为您选择的文件名。

  2. 将 rules 字段添加到 YAML 文件中。rules 字段包含防火墙政策规则的列表。 如需查看描述导出或导入格式的架构,请参阅 CLOUDSDKROOT/lib/googlecloudsdk/schemas/compute/beta/FirewallPolicy.yaml。其中,CLOUDSDKROOT 是 Google Cloud CLI 安装目录。

    以下是一个 YAML 架构示例。

        rules:
        -action: deny
         description:
         priority: 1
         disabled: false
         enable-logging: false
         kind: compute#firewallPolicyRule
         ...
        -action: goto_next
         priority: 2
         disabled: false
         enable-logging: false
         ...
      

    如需修改防火墙政策规则,请参阅修改防火墙政策规则。

导出防火墙政策规则

您可以使用 gcloud CLI 或 Compute Engine API 来启动更新。

导出分层防火墙政策

从分层防火墙政策导出防火墙政策规则。

gcloud

如需从分层防火墙政策中导出规则,请使用 gcloud compute firewall-policies export-rules 命令:

gcloud compute firewall-policies export-rules FIREWALL_POLICY \
    --destination=DESTINATION \
    --organization=ORGANIZATION

替换以下内容:

  • FIREWALL_POLICY:要从中导出规则的分层防火墙政策的简称或 ID
  • DESTINATION:将导出配置的 YAML 文件的路径
  • ORGANIZATION:要更新的组织防火墙政策所在的组织。如果 FIREWALL_POLICY 是简称,则必须设置此参数

API

如需从分层防火墙政策中导出现有规则,请在 Compute Engine API 中使用 firewallPolicies.get 方法:

  GET https://compute.googleapis.com/compute/v1/locations/global/firewallPolicy/FIREWALL_POLICY_NAME
  

替换以下内容:

导出网络防火墙政策

从网络防火墙政策导出防火墙规则。

gcloud

如需将网络防火墙政策规则配置导出到文件,请使用 gcloud compute network-firewall-policies export-rules 命令:

gcloud compute network-firewall-policies export-rules FIREWALL_POLICY \
    --destination=RULES_YAML_FILE_PATH \
    --global | --region=REGION

替换以下内容:

  • FIREWALL_POLICY:要从中导出规则的网络防火墙政策的名称
  • RULES_YAML_FILE_PATH:导出配置的 YAML 文件的路径
  • REGION:如果政策是全局政策,请指定 --global;如果政策是区域政策,请指定 REGION。

API

如需从全球网络防火墙政策中导出现有规则,请使用 Compute Engine API 中的 networkFirewallPolicies.get 方法:

  GET https://compute.googleapis.com/compute/v1/projects/PROJECT/global/firewallPolicies/FIREWALL_POLICY_NAME
   

替换以下内容:

  • PROJECT:您的项目的 ID
  • FIREWALL_POLICY_NAME:要导出的防火墙政策的名称

如需从区域级网络防火墙政策导出现有规则,请使用 Compute Engine API 中的 regionNetworkFirewallPolicies.get 方法:

GET https://compute.googleapis.com/compute/v1/projects/PROJECT/regions/REGION/firewallPolicies/FIREWALL_POLICY_NAME

替换以下内容:

  • PROJECT:您的项目的 ID
  • REGION:防火墙政策规则的区域
  • FIREWALL_POLICY_NAME:要导出的防火墙政策的名称

该请求返回防火墙政策资源定义。

修改防火墙政策规则

修改您在上一个部分中导出的防火墙政策规则。

  1. 打开导出的文件。例如 RULES_YAML_FILE。

  2. 添加 rules 字段,如以下示例所示。

        rules:
         -action: allow
          description: test-rule1
          direction: INGRESS
          disabled: false
          enableLogging: false
          kind: compute#firewallPolicyRule
      

  3. 添加其他配置字段,例如 action、direction 和 priority。以下是一个基本 YAML 文件的示例。

        rules:
         -action: allow
          description: test-rule1
          direction: INGRESS
          disabled: false
          enableLogging: false
          kind: compute#firewallPolicyRule
          match:
            layer4Configs:
            -ipProtocol: all
            srcIpRanges:
            -192.0.2.0/24
          priority: 1
          ruleTupleCount: 2
         -action: goto_next
          description: default egress rule
          direction: EGRESS
          enableLogging: false
          kind: compute#firewallPolicyRule
          match:
            destIpRanges:
            -::/0
            layer4Configs:
            -ipProtocol: all
          priority: 2147483644
          ruleTupleCount: 2
         -action: goto_next
          description: default ingress rule
          direction: INGRESS
          enableLogging: false
          kind: compute#firewallPolicyRule
          match:
            layer4Configs:
            -ipProtocol: all
            srcIpRanges:
            -::/0
          priority: 2147483645
          ruleTupleCount: 2
         -action: goto_next
          description: default egress rule
          direction: EGRESS
          enableLogging: false
          kind: compute#firewallPolicyRule
          match:
            destIpRanges:
            -198.51.100.0/24
            layer4Configs:
            -ipProtocol: all
          priority: 2147483646
          ruleTupleCount: 2
         -action: goto_next
          description: default ingress rule
          direction: INGRESS
          enableLogging: false
          kind: compute#firewallPolicyRule
          match:
            layer4Configs:
            -ipProtocol: all
            srcIpRanges:
            -192.0.2.0/24
          priority: 2147483647
          ruleTupleCount: 2
      

导入防火墙政策规则

使用所需的批量更新更改文件后,将规则导入防火墙政策。导入修改后的文件会将现有防火墙政策规则替换为提供的规则。

导入分层防火墙政策规则

将防火墙规则导入到分层防火墙政策中。

gcloud

如需将规则导入到分层防火墙政策,请使用 gcloud compute firewall-policies import-rules 命令:

gcloud compute firewall-policies import-rules FIREWALL_POLICY \
    --source=RULES_YAML_FILE_PATH \
    --organization=ORGANIZATION

替换以下内容:

  • FIREWALL_POLICY:要更新的分层防火墙政策的简称或 ID
  • RULES_YAML_FILE_PATH:要从中导入规则的 YAML 文件的路径
  • ORGANIZATION:要更新的组织防火墙政策所在的组织。如果 FIREWALL_POLICY 是简称,则必须设置此参数。

API

如需导入防火墙政策规则,请使用 Compute Engine API 中的 firewallPolicies.patch 方法:

  PATCH https://compute.googleapis.com/compute/v1/locations/global/firewallPolicy/FIREWALL_POLICY_NAME
  

替换以下内容:

导入网络防火墙政策

将修改后的防火墙规则 YAML 文件导入到网络防火墙政策中。

gcloud

如需将规则导入到网络防火墙政策,请使用 gcloud compute network-firewall-policies import-rules 命令:

gcloud compute network-firewall-policies import-rules FIREWALL_POLICY \
    --source=RULES_YAML_FILE_PATH \
    --global | --region=REGION

替换以下内容:

  • FIREWALL_POLICY:要更新的网络防火墙政策的名称
  • RULES_YAML_FILE_PATH:所选的规则导入路径
  • REGION:如果政策是全局政策,请指定 --global;如果政策是区域政策,请指定 REGION。

API

如需导入修改后的网络防火墙政策规则,请使用 Compute Engine API 中的 networkFirewallPolicies.patch 方法:

  PATCH https://compute.googleapis.com/compute/v1/projects/PROJECT/global/firewallPolicy/FIREWALL_POLICY_NAME
  

替换以下内容:

  • PROJECT:网络防火墙政策规则的项目 ID
  • FIREWALL_POLICY_NAME:要导出的网络防火墙政策的名称

如需导入修改后的区域级网络防火墙政策规则,请使用 Compute Engine API 中的 regionNetworkFirewallPolicies.patch 方法:

  PATCH https://compute.googleapis.com/compute/v1/projects/PROJECT/regions/REGION/firewallPolicies/FIREWALL_POLICY_NAME
   

替换以下内容:

  • PROJECT:区域网络防火墙政策规则的项目 ID
  • REGION:防火墙政策规则的区域
  • FIREWALL_POLICY_NAME:要导出的防火墙政策的名称

    此请求返回网络防火墙政策资源定义。

后续步骤