1. 简介
借助 Google Cloud Armor 边缘安全政策,您可以限制对 Google Cloud CDN 和 Google Cloud Storage 上的缓存对象的访问。举例来说,确保您的用户不会从受限地理位置访问存储分区中的对象,或确保您的媒体分发会在您获得许可的地理位置进行过滤。
在本实验中,我们将创建一个 GCS 存储分区,将图片上传到该存储分区,将其绑定到负载平衡器,然后为其启用 Cloud CDN 和边缘安全政策。
学习内容
- 如何设置具有可缓存内容的 Cloud Storage 存储分区
- 如何创建边缘安全政策来保护内容
- 如何验证边缘安全政策是否按预期运行
所需条件
- 网络基本知识和 HTTP 知识
- Unix/Linux 命令行基础知识
2. 设置和要求
自定进度的环境设置
- 登录 Google Cloud 控制台,然后创建一个新项目或重复使用现有项目。如果您还没有 Gmail 或 Google Workspace 账号,则必须创建一个。
- 项目名称是此项目参与者的显示名称。它是 Google API 尚未使用的字符串,您可以随时对其进行更新。
- 项目 ID 在所有 Google Cloud 项目中必须是唯一的,并且不可变(一经设置便无法更改)。Cloud Console 会自动生成一个唯一字符串;通常情况下,您无需关注该字符串。在大多数 Codelab 中,您都需要引用项目 ID(它通常标识为
PROJECT_ID
),因此如果您不喜欢某个 ID,请再生成一个随机 ID,还可以尝试自己创建一个,并确认是否可用。然后,项目创建后,ID 会处于“冻结”状态。 - 第三个值是一些 API 使用的项目编号。如需详细了解所有这三个值,请参阅文档。
- 接下来,您需要在 Cloud Console 中启用结算功能,才能使用 Cloud 资源/API。运行此 Codelab 应该不会产生太多的费用(如果有费用的话)。要关闭资源以避免产生超出本教程范围的费用,请按照此 Codelab 末尾提供的任何“清理”说明操作。Google Cloud 的新用户符合参与 $300 USD 免费试用计划的条件。
启动 Cloud Shell
虽然可以通过笔记本电脑对 Google Cloud 进行远程操作,但在此 Codelab 中,您将使用 Google Cloud Shell,这是一个在云端运行的命令行环境。
在 GCP 控制台中,点击右上角工具栏上的 Cloud Shell 图标:
预配和连接到环境应该只需要片刻时间。完成后,您应该会看到如下内容:
这个虚拟机已加载了您需要的所有开发工具。它提供了一个持久的 5GB 主目录,并且在 Google Cloud 中运行,大大增强了网络性能和身份验证功能。只需一个浏览器,即可完成本实验中的所有工作。
准备工作
在 Cloud Shell 中,确保已设置项目 ID
gcloud config list project gcloud config set project [YOUR-PROJECT-NAME] PROJECT_ID=[YOUR-PROJECT-NAME] echo $PROJECT_ID
启用 API
启用所有必要的服务
gcloud services enable compute.googleapis.com gcloud services enable logging.googleapis.com gcloud services enable monitoring.googleapis.com
3. 创建 Cloud Storage 存储分区
在 Cloud Console 中,转到导航菜单 > Cloud Storage > 浏览器。点击创建存储分区:
存储桶命名规则:
- 请勿在存储桶名称中添加敏感信息,因为存储桶命名空间是全局性的,公开可见。
- 存储桶名称只能包含小写字母、数字、短划线 (-)、下划线 (_) 和句点 (.)。包含句点的名称需要进行验证。
- 存储桶名称必须以数字或字母开头和结尾。
- 存储桶名称必须包含 3 到 63 个字符。含句点的名称最多可以包含 222 个字符,但是每个以句点分隔的部分不得超过 63 个字符。
- 存储桶名称不得以点分十进制的 IP 地址表示(例如 192.168.5.4)。
- 存储桶不得以“goog”前缀开头。
- 存储桶名称不得包含“google”或“google”的近似错拼变体。
- 此外,为保证 DNS 合规与未来的兼容性,不应使用下划线 (_),也不应在句点或短划线旁边再添加句点。例如,DNS 名称中不可以使用“..”、“-.”或“.-”。
点击继续。
位置类型:地区
位置:选择离您较远的区域
点击继续。
默认存储类别:标准
点击继续。
取消选中“禁止公开访问”下的 “禁止公开访问此存储分区”复选框。
选择“访问权限控制”下的精细控制。
点击继续。
配置好存储桶后,请点击创建:
大功告成,您成功创建了 Cloud Storage 存储桶!
4. 将对象上传到存储分区
现在,您可以上传对象到存储桶中。
首先,将此映像下载到 Cloud Shell 中的临时实例。在以下示例中,我们将使用 Google 首页中的 Google 图片。
通过 Cloud Shell
wget --output-document google.png https://www.google.com/images/branding/googlelogo/1x/googlelogo_color_272x92dp.png
使用 gsutil cp 命令将该图片从保存位置上传到您创建的存储分区中:
通过 Cloud Shell
gsutil cp google.png gs://YOUR-BUCKET-NAME
现在,移除下载的图片:
通过 Cloud Shell
rm google.png
找到您的对象,点击右侧的三点状图标,将权限修改为公开。
5. 创建负载平衡器
接下来,我们将创建 HTTP 负载平衡器。
前往网络 >>网络服务 >>负载均衡 >>创建负载平衡器 >>HTTP 负载平衡器 >>从互联网到我的虚拟机 >>传统 HTTP(S) 负载平衡器
首先,为您将创建的负载平衡器命名。
创建后端存储桶
创建新的后端存储分区(即您刚刚创建的存储分区),然后选择“已启用 CDN 和缓存静态内容”。点击“创建”。
创建主机和路径规则
转到左侧的“主机和路径规则”。我们将使用简单的主机/路径规则,并将任何请求发送到存储分区。
创建前端配置
选择前端配置。对于前端配置,我们将使用 HTTP(但如果您拥有证书,也可使用 HTTPS)和临时 IP 地址,并确保您已选择高级层网络。
点击“创建”
获取负载平衡器 IP
点击项目的负载平衡器列表中的负载平衡器名称,从控制台获取负载平衡器 IP。
查询负载平衡器
几分钟后,尝试向负载平衡器查询您上传的对象。您需要负载平衡器 IP 地址和映像名称。该命令的结构如下所示:
从航站楼起飞
curl -svo /dev/null http://LOAD_BALANCER_IP/google.png
输出
armanrye-macbookpro% curl -svo /dev/null http://34.98.81.123/google.png * Trying 34.98.81.123... * TCP_NODELAY set * Connected to 34.98.81.123 (34.98.81.123) port 80 (#0) > GET /google.png HTTP/1.1 > Host: YOUR_IP > User-Agent: curl/7.64.1 > Accept: */* > < HTTP/1.1 200 OK < X-GUploader-UploadID: ADPycdtoILI76KVsvBvdVGvSfzaxys1m3zYqCepBrmJxAI48ni24cWCRIdNu-53PX3DS6iycxp6xwFbMpwtcHHZQUQmEBxAgng < Expires: Mon, 13 Dec 2021 22:58:26 GMT < Date: Mon, 13 Dec 2021 21:58:26 GMT < Cache-Control: public, max-age=3600 < Last-Modified: Mon, 13 Dec 2021 21:45:57 GMT < ETag: "8f9327db2597fa57d2f42b4a6c5a9855" < x-goog-generation: 1639431957957903 < x-goog-metageneration: 2 < x-goog-stored-content-encoding: identity < x-goog-stored-content-length: 5969 < Content-Type: image/png < x-goog-hash: crc32c=TeiHTA== < x-goog-hash: md5=j5Mn2yWX+lfS9CtKbFqYVQ== < x-goog-storage-class: STANDARD < Accept-Ranges: bytes < Content-Length: 5969 < Server: UploadServer
验证您的内容是否正在通过 CDN 或负载均衡监控从 CDN 提供。您的命中率应该可以接近 100%。如果您需要运行多个查询,可以执行以下操作
从航站楼起飞
#for i in `seq 1 50`; do curl http://%loadbalncer-IP%/google.png; done
确认 Cloud CDN 提供的内容
导航至网络服务 >>,验证您是否在处理来自 CDN 的流量CDN
6. 从 GCS 中删除对象
现在我们填充了缓存,让我们从存储分区中删除对象,以强调我们是将政策应用于缓存而不是后端。
导航到 Cloud Storage >>%bucket name% >>对象
选择图片并将其删除。
7. 为 CDN 缓存创建边缘安全政策
导航至网络安全 >>Cloud Armor,然后点击“创建政策”
选择以下选项
Policy Type(政策类型):Edge Security Policy(边缘安全政策)
默认操作:拒绝
将政策应用于后端存储分区。
8. 验证边缘安全政策
现在,我们已经在后端存储分区前面创建了边缘安全政策,接下来验证该政策是否按预期工作。
检查安全政策
几分钟后,您将能够检查 Cloud Armor 政策是否正在运行。在命令行中,运行以下命令将会返回 403
从航站楼起飞
curl -svo /dev/null http://LOAD_BALANCER_IP/google.png
输出
curl -svo /dev/null http://34.98.81.123/google.png * Trying 34.98.81.123... * TCP_NODELAY set * Connected to 34.98.81.123 (34.98.81.123) port 80 (#0) > GET /google.png HTTP/1.1 > Host: YOUR_IP > User-Agent: curl/7.64.1 > Accept: */* > < HTTP/1.1 403 Forbidden < X-GUploader-UploadID: ADPycdtS6FtJOGIsiWYDrAAE8VFeQuNutcvbGoQe2t8EZxsuspVtmCjyiTv_P3CNktroHMOGFXkTCfG-Jj-rUO60ZGPpEbpqcw < Content-Type: application/xml; charset=UTF-8 < Content-Length: 111 < Date: Mon, 13 Dec 2021 23:09:35 GMT < Expires: Mon, 13 Dec 2021 23:09:35 GMT < Cache-Control: private, max-age=0 < Server: UploadServer <
调查日志
接下来,您可以检查日志以查看强制执行的边缘安全政策。依次点击操作 >>日志记录 >>日志浏览器
在查询中输入以下代码段,然后点击“运行”
resource.type:(http_load_balancer) AND jsonPayload.enforcedEdgeSecurityPolicy.name:(%SECURITY_POLICY_NAME%)
注意 403 响应和强制执行的安全政策
移除安全政策
移除安全政策并从缓存中查询对象。
导航至网络安全 >>Cloud Armor >>%POLICY NAME% >>目标,然后移除目标存储分区。
确认政策已移除
几分钟后,向存储分区中的资源发送另一个 curl。这次您会收到 200 响应。
从航站楼起飞
curl -svo /dev/null http://LOAD_BALANCER_IP/google.png
输出
armanrye-macbookpro% curl -svo /dev/null http://34.98.81.123/google.png * Trying 34.98.81.123... * TCP_NODELAY set * Connected to 34.98.81.123 (34.98.81.123) port 80 (#0) > GET /google.png HTTP/1.1 > Host: YOUR_IP > User-Agent: curl/7.64.1 > Accept: */* > < HTTP/1.1 200 OK < X-GUploader-UploadID: ADPycdtI7f49P3MSuZSZ8vl6RwfwmnIDJ59EeSKp7UPvLPawdaiRHXiNWLtseQTxUxceWOvSLvpYmT3pWVkV4qeIP7M < Date: Mon, 13 Dec 2021 23:06:46 GMT < Last-Modified: Mon, 13 Dec 2021 21:45:57 GMT < ETag: "8f9327db2597fa57d2f42b4a6c5a9855" < x-goog-generation: 1639431957957903 < x-goog-metageneration: 2 < x-goog-stored-content-encoding: identity < x-goog-stored-content-length: 5969 < Content-Type: image/png < x-goog-hash: crc32c=TeiHTA== < x-goog-hash: md5=j5Mn2yWX+lfS9CtKbFqYVQ== < x-goog-storage-class: STANDARD < Accept-Ranges: bytes < Content-Length: 5969 < Server: UploadServer < Age: 1621 < Cache-Control: public,max-age=3600 < { [775 bytes data] * Connection #0 to host 34.98.81.123 left intact * Closing connection 0
恭喜!您已完成有关 Cloud Armor Edge 安全政策的实验。
©2020 Google LLC 保留所有权利。Google 和 Google 徽标是 Google LLC 的商标。其他所有公司名称和产品名称可能是其各自相关公司的商标。
9. 实验清理
导航至网络安全 >>Cloud Armor >>%POLICY NAME%,然后选择“删除”
前往 Cloud Storage,选择您创建的存储分区,然后点击“删除”
前往网络 >>网络服务 >>负载均衡。选择您创建的负载平衡器,然后点击“删除”。
10. 恭喜!
您已完成“使用 Cloud Armor 保护边缘缓存”Codelab!
所学内容
- 如何设置 Cloud Storage 存储分区和关联的 Cloud 负载平衡器
- 如何创建 Cloud Armor 边缘安全政策
- 如何验证边缘安全政策是否按预期运行。
后续步骤
- 请尝试设置 Compute Engine 资源缓存命中的边缘安全政策。