配置地址组

借助地址组,您可以将多个 IP 地址和 IP 地址范围合并为一个命名的逻辑单元,并可在多个产品中使用。本文档介绍了如何将地址组与 Google Cloud Armor 安全政策搭配使用。您需要拥有有效的 Google Cloud Armor Enterprise 订阅才能使用地址组。

准备工作

在配置地址组之前,您必须先启用 Network Security API networksecurity.googleapis.com

IAM 角色

如需创建和管理地址群组,您需要 Network Administrator 角色 (compute.networkAdmin)。您还可以定义具有一组等效权限的自定义角色。

下表提供了对地址组执行一组任务所需的 Identity and Access Management (IAM) 权限列表。

任务 IAM 角色名称 IAM 权限
创建和管理地址组 compute.networkAdmin networksecurity.addressGroups.*
发现和查看地址组 compute.networkUser networksecurity.addressGroups.list

networksecurity.addressGroups.get

networksecurity.addressGroups.use

如需详细了解哪些角色包含特定 IAM 权限,请参阅 IAM 权限参考文档

创建或修改地址组

以下部分介绍了如何创建地址组、如何在地址组中添加和移除地址,以及如何删除地址组。

创建地址组

创建地址组时,您必须分别使用 --capacity--type 标志指定其容量和 IP 地址版本。创建地址组后,您将无法更改这些值。

此外,Google Cloud Armor 的容量上限可能高于其他产品(例如 Cloud 新一代防火墙)的容量上限。因此,如果您想在多个产品中使用同一地址组,则必须将容量设置为小于或等于这些产品中最低的容量上限。

控制台

  1. 在 Google Cloud 控制台中,前往地址组页面。

    前往“地址组”

  2. 在项目选择器菜单中,选择您的项目(如果有)。

  3. 点击创建地址组

  4. 名称字段中,输入一个名称。

  5. (可选):在说明字段中,添加说明。

  6. 对于范围,选择全球

  7. 类型部分,选择 IPv4IPv6

  8. 用途部分,选择 Cloud Armor;或者,如果您还计划将地址组与 Cloud 新一代防火墙政策搭配使用,请选择防火墙和 Cloud Armor

    如需详细了解如何选择用途,请参阅地址组规范

  9. 容量字段中,输入地址组的容量。

  10. IP 地址字段中,列出要包含在地址组中的 IP 地址或 IP 范围(以英文逗号分隔)。例如 1.1.1.0/24,1.2.0.0

  11. 点击创建

gcloud

使用以下示例 gcloud network-security address-groups create 命令创建一个名为 GROUP_NAME 且容量为 1,000 个 IPv4 地址的地址组,可与 Google Cloud Armor 或 Cloud NGFW 搭配使用:

gcloud network-security address-groups create GROUP_NAME \
  --location global \
  --description  "address group description" \
  --capacity 1000 \
  --type IPv4 \
  --purpose DEFAULT,CLOUD_ARMOR

或者,您也可以将用途专门设置为 CLOUD_ARMOR,以创建容量更大的地址组。在以下示例中,您创建了一个容量为 10,000 个 IPv6 IP 地址范围的地址组:

gcloud network-security address-groups create GROUP_NAME \
  --location global \
  --description  "address group description" \
  --capacity 10000 \
  --type IPv6 \
  --purpose CLOUD_ARMOR

向地址组添加内容

创建地址组后,您可以使用 Google Cloud 控制台或 gcloud network-security address-groups add-items 命令添加项。

控制台

  1. 在 Google Cloud 控制台中,前往地址组页面。

    前往“地址组”

  2. 在项目选择器菜单中,选择您的项目(如果有)。

  3. 如需修改地址组,请点击地址组的名称。

  4. 点击修改

  5. IP 地址字段中,将新项添加到以英文逗号分隔的 IP 地址列表中。或者,您也可以点击导入地址,上传包含 IP 地址列表的 CSV 文件。

  6. 点击保存

gcloud

在以下示例中,您将 IP 地址 192.168.1.2192.168.1.8192.168.1.9 添加到地址组 GROUP_NAME 中。您可以使用 --item 标志提供以英文逗号分隔的项列表:

gcloud network-security address-groups add-items GROUP_NAME \
  --location global \
  --items 192.168.1.2,192.168.1.8,192.168.1.9

从地址组中移除项

您可以使用 Google Cloud 控制台或 gcloud network-security address-groups remove-items 命令从地址组中移除项。

控制台

  1. 在 Google Cloud 控制台中,前往地址组页面。

    前往“地址组”

  2. 在项目选择器菜单中,选择您的项目(如果有)。

  3. 如需修改地址组,请点击地址组的名称。

  4. 点击修改

  5. IP 地址字段中,删除您要从以英文逗号分隔的 IP 地址列表中移除的项。

  6. 点击保存

gcloud

以下命令会移除您在上一个命令中添加的 IP 地址 192.168.1.2192.168.1.8192.168.1.9

gcloud network-security address-groups remove-items GROUP_NAME \
  --location global \
  --items 192.168.1.2,192.168.1.8,192.168.1.9

删除地址组

如果某个地址组被资源(包括防火墙政策或安全政策)引用,则无法删除该地址组。请按照以下步骤删除地址组:

控制台

  1. 在 Google Cloud 控制台中,前往地址组页面。

    前往“地址组”

  2. 在项目选择器菜单中,选择您的项目(如果有)。

  3. 选中您要删除的地址组旁边的复选框。确保所选地址组未被任何防火墙政策或安全政策引用。

  4. 点击删除,然后再次点击删除进行确认。

gcloud

以下示例使用 gcloud network-security address-groups delete 命令删除名为 GROUP_NAME 的地址组。

gcloud network-security address-groups delete GROUP_NAME \
  --location global

将地址组与安全政策搭配使用

创建地址组并向其中添加 IP 地址后,您可以将其与任何现有的 Google Cloud Armor 后端安全政策搭配使用。以下示例展示了使用地址组的两种不同方式。

拒绝一组 IP 地址

在本示例中,假设您有一个名为 BAD_IPS 且包含 10,000 个已知是恶意的 IP 地址的 IP 地址组。您可以使用具有以下匹配条件的单个安全政策 deny 规则拒绝所有这些 IP 地址:

evaluateAddressGroup('BAD_IPS', origin.ip)

在多个安全政策中重复使用一组 IP 地址范围

在本示例中,假设您有与上一个示例相同的包含 10,000 个 IP 地址的列表,但其中一些 IP 地址已知是网络爬虫。您希望阻止所有这些 IP 地址访问某些后端服务,但允许网页抓取工具访问其他后端服务,以提高搜索引擎优化 (SEO) 效果。请按照以下步骤操作,拒绝所有地址访问 BACKEND_SERVICE_1,同时允许 IP 地址范围 66.249.77.32/2766.249.77.64/27 访问 BACKEND_SERVICE_2

  1. 创建一个名为 POLICY_1 的后端安全政策,并将其附加到 BACKEND_SERVICE_1
  2. POLICY_1 中,创建具有以下匹配条件的 deny 规则:

    evaluateAddressGroup('BAD_IPS', origin.ip)
    
  3. 创建另一个名为 POLICY_2 的后端安全政策,并将其附加到 BACKEND_SERVICE_2

  4. POLICY_2 中,创建具有以下匹配条件的 deny 规则,以排除 66.249.77.32/2766.249.77.64/27

    evaluateAddressGroup('BAD_IPS', origin.ip, [66.249.77.32/27, 66.249.77.64/27])
    

使用地址组与用户 IP 地址进行匹配

在本示例中,假设您有一个名为 BAD_IPS 且包含 10,000 个已知是恶意的 IP 地址的 IP 地址组。此外,您还使用了上游代理,其中包含标头中有关来源客户端的信息。您可以使用具有以下匹配条件的单个安全政策 deny 规则拒绝所有这些 IP 地址:

evaluateAddressGroup('BAD_IPS', origin.user_ip)

如需详细了解用户 IP 地址,请参阅规则语言属性

后续步骤