借助地址组,您可以将多个 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
|
如需详细了解哪些角色包含特定 IAM 权限,请参阅 IAM 权限参考文档。
创建或修改地址组
以下部分介绍了如何创建地址组、如何在地址组中添加和移除地址,以及如何删除地址组。
创建地址组
创建地址组时,您必须分别使用 --capacity
和 --type
标志指定其容量和 IP 地址版本。创建地址组后,您将无法更改这些值。
此外,Google Cloud Armor 的容量上限可能高于其他产品(例如 Cloud 新一代防火墙)的容量上限。因此,如果您想在多个产品中使用同一地址组,则必须将容量设置为小于或等于这些产品中最低的容量上限。
控制台
在 Google Cloud 控制台中,前往地址组页面。
在项目选择器菜单中,选择您的项目(如果有)。
点击创建地址组。
在名称字段中,输入一个名称。
(可选):在说明字段中,添加说明。
对于范围,选择全球。
在类型部分,选择 IPv4 或 IPv6。
在用途部分,选择 Cloud Armor;或者,如果您还计划将地址组与 Cloud 新一代防火墙政策搭配使用,请选择防火墙和 Cloud Armor。
如需详细了解如何选择用途,请参阅地址组规范。
在容量字段中,输入地址组的容量。
在 IP 地址字段中,列出要包含在地址组中的 IP 地址或 IP 范围(以英文逗号分隔)。例如
1.1.1.0/24,1.2.0.0
。点击创建。
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
命令添加项。
控制台
在 Google Cloud 控制台中,前往地址组页面。
在项目选择器菜单中,选择您的项目(如果有)。
如需修改地址组,请点击地址组的名称。
点击修改。
在 IP 地址字段中,将新项添加到以英文逗号分隔的 IP 地址列表中。或者,您也可以点击导入地址,上传包含 IP 地址列表的 CSV 文件。
点击保存。
gcloud
在以下示例中,您将 IP 地址 192.168.1.2
、192.168.1.8
和 192.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
命令从地址组中移除项。
控制台
在 Google Cloud 控制台中,前往地址组页面。
在项目选择器菜单中,选择您的项目(如果有)。
如需修改地址组,请点击地址组的名称。
点击修改。
在 IP 地址字段中,删除您要从以英文逗号分隔的 IP 地址列表中移除的项。
点击保存。
gcloud
以下命令会移除您在上一个命令中添加的 IP 地址 192.168.1.2
、192.168.1.8
和 192.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
删除地址组
如果某个地址组被资源(包括防火墙政策或安全政策)引用,则无法删除该地址组。请按照以下步骤删除地址组:
控制台
在 Google Cloud 控制台中,前往地址组页面。
在项目选择器菜单中,选择您的项目(如果有)。
选中您要删除的地址组旁边的复选框。确保所选地址组未被任何防火墙政策或安全政策引用。
点击删除,然后再次点击删除进行确认。
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/27
和 66.249.77.64/27
访问 BACKEND_SERVICE_2:
- 创建一个名为 POLICY_1 的后端安全政策,并将其附加到 BACKEND_SERVICE_1。
在 POLICY_1 中,创建具有以下匹配条件的
deny
规则:evaluateAddressGroup('BAD_IPS', origin.ip)
创建另一个名为 POLICY_2 的后端安全政策,并将其附加到 BACKEND_SERVICE_2。
在 POLICY_2 中,创建具有以下匹配条件的
deny
规则,以排除66.249.77.32/27
和66.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 地址,请参阅规则语言属性。