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 的流量。
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 地址列表。您可以通过表格中的名称引用列表。
或者,使用 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 拓扑
5. 设置和要求
自定进度的环境设置
请记住项目 ID,它在所有 Google Cloud 项目中都是唯一的名称(上述名称已被占用,您无法使用,抱歉!)。它稍后将在此 Codelab 中被称为 PROJECT_ID
。
- 接下来,您需要在 Cloud 控制台中启用结算功能,才能使用 Google Cloud 资源。
运行此 Codelab 应该不会产生太多的费用(如果有费用的话)。请务必按照“清理”部分部分,其中会指导您如何关停资源,以免产生超出本教程范围的结算费用。Google Cloud 的新用户符合参与 300 美元的免费试用计划的条件。
启动 Cloud Shell
虽然可以通过笔记本电脑对 Google Cloud 进行远程操作,但在此 Codelab 中,您将使用 Google Cloud Shell,这是一个在云端运行的命令行环境。
在 GCP 控制台中,点击右上角工具栏上的 Cloud Shell 图标:
预配和连接到环境应该只需要片刻时间。完成后,您应该会看到如下内容:
这个虚拟机已加载了您需要的所有开发工具。它提供了一个持久的 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 网站。
- 还是在 Compute Engine 中,点击左侧菜单中的“虚拟机实例”
- 请注意以 us-east1-mig 开头的实例。这些实例属于代管式实例组。
- 点击 us-east1-mig 实例的外部 IP。您应该会看到客户端 IP(您的 IP 地址)、主机名(以 us-east1-mig 开头)
配置 HTTP 负载平衡器
- 在 Cloud 控制台中,点击导航菜单 ( ) >点击 网络服务 >负载均衡,然后点击“创建负载平衡器”。
- 在“HTTP(S) 负载均衡”下,点击“开始配置”。
- 选择“从互联网到我的虚拟机”,然后点击“继续”。
- 将名称设置为 http-lb。
配置后端
后端服务会将传入的流量定向到一个或多个关联的后端。每个后端由一个实例组和附加的服务容量元数据组成。
- 点击“后端配置”。
- 对于后端服务和点击“创建或选择后端服务”然后依次点击“后端服务”和“创建后端服务”。
- 后端类型为实例组
- 设置以下值,将所有其他值保留为默认值:
- 点击“完成”。
- 对于“健康检查”,请选择“创建健康检查”。
- 设置以下值,将所有其他值保留为默认值:
- 点击“保存并继续”。
- 点击“创建”以创建后端服务。
配置前端
主机和路径规则决定将如何定向您的流量。例如,您可以将视频流量定向到一个后端,将静态流量定向到另一个后端。不过,主机和路径规则的配置并不在本实验的涵盖范围内。
- 点击“前端配置”。
- http-front-end
- 指定以下内容,并将所有其他值保留为默认值
- 点击“完成”。
8. 查看并创建 HTTP 负载平衡器
- 点击“检查并最终确定”。
- 检查后端服务和前端。
- 点击“创建”。
- 等待几分钟,让负载平衡器创建完毕
- 点击负载平衡器的名称 (http-lb)。
- 请记下负载平衡器的 IPv4 地址,以供下一个任务使用(称为 http-lb)。
9. 验证是否成功发生了未经授权的访问
在实施“命名的 IP 地址”政策之前,请验证能否在未经授权的情况下成功访问实验平衡器和后续 Web 应用。请注意,实施命名的 IP 地址政策后,就只能访问预配的表达式集,才能访问 Web 应用。
- 确定您在上一步中创建的负载平衡器 IP 地址 (http-lb),然后将其粘贴到您的网络浏览器中。如以下屏幕截图所示,输出将类似。
注意:此步骤将需要几分钟时间,在网页生成后,客户端 IP 将来自 Google Front End,而不是您的工作站 IP。
在您的工作站中执行类似的验证,如下所示
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 地址验证
- 由于已实施安全政策,因此从您的工作站访问负载平衡器是未经授权的。
- 如需进行验证,请从工作站打开一个终端窗口,并对负载平衡器的 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 政策