Cloud Armor 命名的 IP 列表

1. 简介

借助 Google Cloud Armor 的已命名 IP 地址列表,您可以引用由第三方提供商维护的 IP 地址和 IP 范围列表。您可以在安全政策中配置已命名的 IP 地址列表。您不必手动指定每个 IP 地址或 IP 范围。

学习内容

  • Cloud Armor 的已命名 IP 地址列表的优势
  • 创建 Cloud Armor 安全政策
  • 部署 Cloud Armor 的已命名 IP 地址列表
  • 创建全球负载平衡器
  • 使用示例测试应用创建代管式实例组

所需条件

  • 拥有安全政策和负载平衡器方面的经验

2. 仅允许来自允许的第三方提供商的流量

典型用例是创建一个许可名单,其中包含允许的第三方合作伙伴的 IP 地址,以确保只有来自该合作伙伴的流量才能访问负载平衡器和后端。

例如,CDN 提供商需要定期从源服务器提取内容,以将其分发到自己的缓存。与 Google 合作可在 CDN 提供商与 Google 网络边缘之间建立直接连接。Google Cloud 上的 CDN 用户可以在源站拉取期间使用此直接连接。在这种情况下,CDN 用户可能希望构建一项安全政策,仅允许来自该特定 CDN 提供商的流量。

在此示例中,CDN 提供商发布其 IP 地址列表 23.235.32.0/20、43.249.72.0/22、... 等。CDN 用户配置了一条安全规则,仅允许来自这些 IP 地址的流量。因此,允许两个 CDN 提供商接入点(23.235.32.10 和 43.249.72.10),并允许其流量。阻止来自未经授权的接入点 198.51.100.1 的流量。

27243e72ee25ee16

Google Cloud Armor 的已命名 IP 地址

3. 使用预先配置的规则简化配置和管理

CDN 提供商通常使用众所周知的 IP 地址,许多 CDN 用户都需要使用。随着提供商添加、移除和更新 IP 地址,这些名单会随着时间推移而发生变化。

在安全政策规则中使用已命名的 IP 地址列表可以简化 IP 地址配置和管理过程,因为 Google Cloud Armor 每天都会自动同步来自 CDN 提供商的信息。这样就无需手动维护大型 IP 地址列表,这既费时又容易出错。

IP 地址列表提供商

Google Cloud Armor 支持下表中的 IP 地址列表提供商。这些是与 Google 合作的 CDN 提供商。其 IP 地址列表通过各个公共网址发布。

这些合作伙伴会提供单独的 IPv4 地址和 IPv6 地址列表。Google Cloud Armor 使用提供的网址提取列表,然后将列表转换为已命名的 IP 地址列表。您可以通过表格中的名称引用列表。

7e9c09a008e04656

或者,使用 Cloud Shell 获取预配置的已命名 IP 地址列表的列表

登录 Cloudshell 并设置您的项目 ID

gcloud config list project
gcloud config set project [YOUR-PROJECT-ID]

Perform setting your projectID:
projectid=YOUR-PROJECT-ID

echo $projectid

通过 Cloud Shell

gcloud compute security-policies list-preconfigured-expression-sets \
    --filter="id:sourceiplist"

此操作会返回:

EXPRESSION_SET
sourceiplist-fastly
sourceiplist-cloudflare
sourceiplist-imperva

4. Codelab 拓扑

68a800f9adbf4570

5. 设置和要求

自定进度的环境设置

  1. 登录 Cloud 控制台,然后创建一个新项目或重复使用现有项目。 (如果您还没有 Gmail 或 Google Workspace 账号,则必须创建一个。)

96a9c957bc475304

b9a10ebdf5b5a448.png

a1e3c01a38fa61c2.png

请记住项目 ID,它在所有 Google Cloud 项目中都是唯一的名称(上述名称已被占用,您无法使用,抱歉!)。它稍后将在此 Codelab 中被称为 PROJECT_ID

  1. 接下来,您需要在 Cloud 控制台中启用结算功能,才能使用 Google Cloud 资源。

运行此 Codelab 应该不会产生太多的费用(如果有费用的话)。请务必按照“清理”部分部分,其中会指导您如何关停资源,以免产生超出本教程范围的结算费用。Google Cloud 的新用户符合参与 300 美元的免费试用计划的条件。

启动 Cloud Shell

虽然可以通过笔记本电脑对 Google Cloud 进行远程操作,但在此 Codelab 中,您将使用 Google Cloud Shell,这是一个在云端运行的命令行环境。

在 GCP 控制台中,点击右上角工具栏上的 Cloud Shell 图标:

bce75f34b2c53987.png

预配和连接到环境应该只需要片刻时间。完成后,您应该会看到如下内容:

f6ef2b5f13479f3a.png

这个虚拟机已加载了您需要的所有开发工具。它提供了一个持久的 5GB 主目录,并且在 Google Cloud 中运行,大大增强了网络性能和身份验证功能。只需一个浏览器,即可完成本实验中的所有工作。

6. 创建 VPC 网络

VPC 网络

通过 Cloud Shell

gcloud compute networks create 

named-list-vpc

 --subnet-mode custom

创建子网

通过 Cloud Shell

gcloud compute networks subnets create named-ip-subnet \
        --network 

named-list-vpc

 --range 10.0.0.0/24 --region us-east1

创建防火墙规则

通过 Cloud Shell

gcloud compute --project=$projectid firewall-rules create default-allow-http --direction=INGRESS --priority=1000 --network=named-list-vpc --action=ALLOW --rules=tcp:80 --source-ranges=0.0.0.0/0 
gcloud compute --project=$projectid firewall-rules create default-allow-health-check --direction=INGRESS --priority=1000 --network=named-list-vpc --action=ALLOW --rules=tcp --source-ranges=130.211.0.0/22,35.191.0.0/16 

创建负载均衡器

创建实例模板

通过 Cloud Shell

gcloud beta compute --project=$projectid instance-templates create us-east1-template --machine-type=e2-medium --subnet=projects/$projectid/regions/us-east1/subnetworks/named-ip-subnet --network-tier=PREMIUM --metadata=startup-script-url=gs://cloud-training/gcpnet/httplb/startup.sh --maintenance-policy=MIGRATE --image=debian-10-buster-v20210217 --image-project=debian-cloud --boot-disk-size=10GB --boot-disk-type=pd-balanced --boot-disk-device-name=us-east1-template --no-shielded-secure-boot --no-shielded-vtpm --no-shielded-integrity-monitoring --reservation-affinity=any

创建代管式实例组

通过 Cloud Shell

gcloud compute --project=$projectid  instance-groups managed create us-east1-mig --base-instance-name=us-east1-mig --template=us-east1-template --size=1 --zone=us-east1-b

7. 验证后端

验证是否在这两个区域中都创建了虚拟机实例,并访问其 HTTP 网站。

  1. 还是在 Compute Engine 中,点击左侧菜单中的“虚拟机实例”
  2. 请注意以 us-east1-mig 开头的实例。这些实例属于代管式实例组。
  3. 点击 us-east1-mig 实例的外部 IP。您应该会看到客户端 IP(您的 IP 地址)、主机名(以 us-east1-mig 开头)

配置 HTTP 负载平衡器

  1. 在 Cloud 控制台中,点击导航菜单 ( mainmenu.png) >点击 网络服务 >负载均衡,然后点击“创建负载平衡器”。
  2. 在“HTTP(S) 负载均衡”下,点击“开始配置”。

start_config.png

  1. 选择“从互联网到我的虚拟机”,然后点击“继续”。
  2. 将名称设置为 http-lb。

配置后端

后端服务会将传入的流量定向到一个或多个关联的后端。每个后端由一个实例组和附加的服务容量元数据组成。

  1. 点击“后端配置”。
  2. 对于后端服务和点击“创建或选择后端服务”然后依次点击“后端服务”和“创建后端服务”。
  3. 后端类型为实例组
  4. 设置以下值,将所有其他值保留为默认值:18bf7a852f0759ee
  5. 点击“完成”。
  6. 对于“健康检查”,请选择“创建健康检查”。health_check.png
    1. 设置以下值,将所有其他值保留为默认值:d2f85af1e988532b.png
  7. 点击“保存并继续”。
  8. 点击“创建”以创建后端服务。

b00c217bf592f0.png

配置前端

主机和路径规则决定将如何定向您的流量。例如,您可以将视频流量定向到一个后端,将静态流量定向到另一个后端。不过,主机和路径规则的配置并不在本实验的涵盖范围内。

  1. 点击“前端配置”。
  2. http-front-end
  3. 指定以下内容,并将所有其他值保留为默认值 51ae16211e72142f
  4. 点击“完成”。

8. 查看并创建 HTTP 负载平衡器

  1. 点击“检查并最终确定”。

8efe5b462a80071d

  1. 检查后端服务和前端。

30b06910bf7fae29

  1. 点击“创建”。
  2. 等待几分钟,让负载平衡器创建完毕
  3. 点击负载平衡器的名称 (http-lb)。
  4. 请记下负载平衡器的 IPv4 地址,以供下一个任务使用(称为 http-lb)。

9. 验证是否成功发生了未经授权的访问

在实施“命名的 IP 地址”政策之前,请验证能否在未经授权的情况下成功访问实验平衡器和后续 Web 应用。请注意,实施命名的 IP 地址政策后,就只能访问预配的表达式集,才能访问 Web 应用。

  1. 确定您在上一步中创建的负载平衡器 IP 地址 (http-lb),然后将其粘贴到您的网络浏览器中。如以下屏幕截图所示,输出将类似。

注意:此步骤将需要几分钟时间,在网页生成后,客户端 IP 将来自 Google Front End,而不是您的工作站 IP。

f93410e9568f1f32.png

在您的工作站中执行类似的验证,如下所示

bash-3.2$ curl <load-balancer-IP>

10. 输出示例

bash-3.2$ curl <load-balancer-ip>
<h1>HTTP Load Balancing Lab</h1><h2>Client IP</h2>Your IP address : 35.191.0.151<h2>Hostname</h2>Server Hostname: us-east1-mig-8nqq<h2>Server Location</h2>Region and Zone: us-east1-b

11. 配置已命名的 IP 列表

为指定 IP 列表创建新的 Cloud Amour 政策

通过 Cloud Shell

gcloud compute --project=$projectid security-policies create ca-policy

通过 Cloud Shell

gcloud compute --project=$projectid security-policies rules update 2147483647 --action=deny-403 --security-policy=ca-policy --description="Default rule, higher priority overrides it" --src-ip-ranges=\*

确定可用的 CDN 命名 IP 列表地址。

通过 Cloud Shell

gcloud compute security-policies list-preconfigured-expression-sets \
    --filter="id:sourceiplist"

此操作会返回:

EXPRESSION_SET
sourceiplist-fastly
sourceiplist-cloudflare
sourceiplist-imperva

在 Cloud Shell 中,根据 CDN 可用表达式集配置已命名的 IP 地址列表

gcloud beta compute security-policies rules create 600 \
    --security-policy ca-policy \
    --expression "evaluatePreconfiguredExpr('expression_set')" \
    --action "allow"

cloudflare 使用示例

gcloud beta compute security-policies rules create 600 \
    --security-policy ca-policy \
    --expression "evaluatePreconfiguredExpr('sourceiplist-cloudflare')" \
    --action "allow"

12. 应用 CA 安全政策

应用 CA 安全政策并等待几分钟,以便全局政策传播

gcloud compute backend-services update http-backend --security-policy ca-policy --global

13. 指定 IP 地址验证

  1. 由于已实施安全政策,因此从您的工作站访问负载平衡器是未经授权的。
  2. 如需进行验证,请从工作站打开一个终端窗口,并对负载平衡器的 IP 地址执行 curl 命令。curl 的输出将产生“403”“禁止”错误,因为您的工作站现在未经授权。

在工作站上

bash-3.2$ curl <load-balancer-IP>
<!doctype html><meta charset="utf-8"><meta name=viewport content="width=device-width, initial-scale=1"><title>403</title>403 Forbidden

清理步骤

gcloud -q compute backend-services update http-backend --security-policy "" --global

gcloud -q compute --project=$projectid security-policies delete ca-policy

gcloud -q compute forwarding-rules delete http-front-end --global

gcloud -q compute target-http-proxies delete http-lb-target-proxy

gcloud -q compute url-maps delete http-lb

gcloud -q compute backend-services delete http-backend --global

gcloud -q compute health-checks delete http-health-check

gcloud -q compute --project=$projectid instance-groups managed delete us-east1-mig --zone=us-east1-b

gcloud -q beta compute --project=$projectid instance-templates delete us-east1-template

gcloud -q compute --project=$projectid firewall-rules delete default-allow-http

gcloud -q compute --project=$projectid firewall-rules delete default-allow-health-check

gcloud -q compute networks subnets delete named-ip-subnet --region us-east1

gcloud -q compute networks delete named-list-vpc

14. 恭喜!

恭喜您完成此 Codelab。

所学内容

  • Cloud Armor 的已命名 IP 地址列表的优势
  • 创建全球负载平衡器
  • 使用示例测试应用创建代管式实例组
  • 创建 Cloud Armor 安全政策
  • 部署 Cloud Armor 的已命名 IP 地址列表
  • 验证命名的 IP Cloud Armor 政策