GSP878
概览
借助 Google Cloud Armor 边缘安全政策,您可以限制对 Cloud CDN(内容分发网络)和 Cloud Storage 中缓存对象的访问。边缘安全政策在 Google 网络的最外层、Cloud CDN 缓存所在的上游位置部署和强制执行。这样做的原因包括:防止受限地区的用户访问存储桶内的对象,以及确保仅在获得授权的地区分发媒体内容。
在本实验中,您将创建一个 Google Cloud Storage 存储桶,向其中上传图片,将其与负载均衡器绑定,然后在其上启用 Cloud CDN 和 Cloud Armor 边缘安全政策。
学习内容
在本实验中,您将学习如何完成以下操作:
- 设置包含可缓存内容的 Cloud Storage 存储桶
- 创建边缘安全政策来保护内容
- 验证边缘安全政策是否按预期正常生效
设置和要求
点击“开始实验”按钮前的注意事项
请阅读以下说明。实验是计时的,并且您无法暂停实验。计时器在您点击开始实验后即开始计时,显示 Google Cloud 资源可供您使用多长时间。
此实操实验可让您在真实的云环境中开展实验活动,免受模拟或演示环境的局限。为此,我们会向您提供新的临时凭据,您可以在该实验的规定时间内通过此凭据登录和访问 Google Cloud。
为完成此实验,您需要:
- 能够使用标准的互联网浏览器(建议使用 Chrome 浏览器)。
注意:请使用无痕模式(推荐)或无痕浏览器窗口运行此实验。这可以避免您的个人账号与学生账号之间发生冲突,这种冲突可能导致您的个人账号产生额外费用。
注意:请仅使用学生账号完成本实验。如果您使用其他 Google Cloud 账号,则可能会向该账号收取费用。
如何开始实验并登录 Google Cloud 控制台
-
点击开始实验按钮。如果该实验需要付费,系统会打开一个对话框供您选择支付方式。右侧是实验设置和访问权限面板,其中包含以下内容:
-
打开 Google Cloud 控制台按钮
- 您在本实验中必须使用的临时凭证(用户名和密码)
- 帮助您逐步完成该实验所需的其他信息(如果需要)
请注意,实验计时器位于页面顶部附近,将显示剩余时间。
-
点击打开 Google Cloud 控制台(如果您使用的是 Chrome 浏览器,请右键点击并选择在无痕式窗口中打开链接)。
该实验会启动资源并打开另一个标签页,显示“登录”页面。
提示:可以将这些标签页分别放在不同的窗口中,并排显示。
注意:如果您看见选择账号对话框,请点击使用其他账号。
-
如有必要,请复制下方的用户名,然后将其粘贴到登录对话框中。
{{{user_0.username | "<用户名>"}}}
您也可以在实验设置和访问权限面板中找到“用户名”。
-
点击下一步。
-
复制下面的密码,然后将其粘贴到欢迎对话框中。
{{{user_0.password | "<密码>"}}}
您也可以在实验设置和访问权限面板中找到“密码”。
-
点击下一步。
重要提示:您必须使用实验提供的凭证。请勿使用您的 Google Cloud 账号凭证。
注意:在本实验中使用您自己的 Google Cloud 账号可能会产生额外费用。
-
依次点击进入后续页面:
- 接受条款及条件。
- 由于这是临时账号,请勿添加账号恢复选项或双重身份验证。
- 请勿注册免费试用。
片刻之后,系统会在此标签页中打开 Google Cloud 控制台。
注意:如需访问 Google Cloud 产品和服务,请点击导航菜单,或在搜索字段中输入服务或产品的名称。
开始前须知
- 在 Cloud Shell 中,设置您的项目 ID 并为其创建环境变量:
export PROJECT_ID=$(gcloud config get-value project)
echo $PROJECT_ID
gcloud config set project $PROJECT_ID
任务 1. 创建 Cloud Storage 存储桶并上传对象
Cloud Storage 存储桶将是 Cloud CDN 的来源。
-
在控制台中,前往导航菜单 (
) > Cloud Storage > 存储桶。
-
如需创建新的 Cloud Storage 存储桶,请点击创建。
-
将存储桶名称设置为 -bucket。
-
点击继续。
-
对于位置类型,选择区域,然后选择 。
-
点击继续。
-
存储桶的默认存储类别是“标准”。点击继续。
-
取消选中禁止公开访问下的“禁止公开访问此存储桶”复选框。
-
选择访问权限控制下的精细控制。
-
点击继续。
-
点击创建。
大功告成,您成功创建了 Cloud Storage 存储桶!
将对象上传到存储桶
现在,将一个对象上传到存储桶,稍后您将使用该对象。默认情况下,Cloud Storage 存储桶是不公开的。在本实验中,您需要将该对象设置为向互联网公开。
- 在 Cloud Shell 中运行以下命令,将一张图片下载到 Cloud Shell。本实验使用一张来自 Google 首页的图片。
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://{{{project_0.startup_script.project_id|Bucket Name}}}
- 从 Cloud Shell 中移除下载的图片:
rm google.png
-
依次前往 Cloud Storage > 存储桶 > ,找到您上传到存储桶的对象。
-
现在,点击所上传对象右侧的三点状图标,然后点击编辑权限。
-
点击添加条目,然后从下拉列表中将相应实体设为公开。
-
点击保存。

点击检查我的进度,验证是否完成了以下目标:
创建 Cloud Storage 存储桶并上传对象
任务 2. 创建负载均衡器
Cloud CDN 和 Cloud Armor 都是可与 Google 的全球 Cloud Load Balancing 结合使用的组件。在本部分中,您将创建一个 HTTP 负载均衡器。
- 在导航菜单 (
) 中,依次点击查看所有产品 > 网络服务 > 负载均衡。
- 点击 +创建负载均衡器。
- 在负载均衡器的类型下,选择应用负载均衡器 (HTTP/HTTPS),然后点击下一步。
- 在公共或内部下,选择公共(外部),然后点击下一步。
- 在全球或单区域部署字段中,选择最适合全球性工作负载,然后点击下一步。
- 在负载均衡器世代字段中,选择全球外部应用负载均衡器,然后点击下一步。
- 点击配置按钮。
- 将负载均衡器命名为
edge-cache-lb。
创建前端配置
如需创建前端配置,请执行以下操作:
-
点击前端配置。
-
对于前端配置,请使用 HTTP(如果您有证书,也可以使用 HTTPS)和临时 IP 地址,并确保您已选择高级层级网络。此选项为默认设置。
-
点击完成。

创建后端配置
如需创建后端配置,请执行以下操作:
-
点击后端配置。
-
对于后端服务和后端存储桶,点击创建后端存储桶。
-
将后端存储桶名称设置为 lb-backend-bucket。
-
在下一个字段中,点击浏览按钮,选择之前创建的 Cloud Storage 存储桶。
-
将所有其他值保留为默认值。
-
点击创建。
创建主机和路径规则
如需创建主机和路径规则,请执行以下操作:
-
点击左侧的路由规则。
-
在“模式”下选择简单主机和路径规则,以便将所有请求发送到该存储桶。这是默认选项。
检查并创建 HTTP 负载均衡器
如需检查并创建 HTTP 负载均衡器,请执行以下操作:
- 点击检查并最终确定。
- 检查后端服务和前端。
- 点击创建。
获取负载均衡器 IP 地址
如需从控制台获取负载均衡器 IP 地址,请执行以下操作:
- 点击项目负载均衡器列表中的负载均衡器名称。记下负载均衡器的 IPv4 地址,以便在下一个任务中使用。将其记作
[LOAD_BALANCER_IP]。

对负载均衡器运行查询
几分钟后,通过负载均衡器查询您上传的对象。您需要用到负载均衡器的 IP 地址以及图片的名称。
- 在 Cloud Shell 中运行以下命令,并将 LOAD_BALANCER_IP 替换为负载均衡器的 IPv4 地址:
curl -svo /dev/null http://LOAD_BALANCER_IP/google.png
注意:最长可能需要 5 分钟时间才能访问 HTTP 负载均衡器。
输出:
student-cloudshell% 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
- 使用以下命令运行若干查询:
for i in `seq 1 50`; do curl http://LOAD_BALANCER_IP/google.png; done
确认 Cloud CDN 传送的内容
- 前往网络服务 > Cloud CDN,通过 CDN 或负载均衡监控功能,验证您的内容是否正通过 CDN 传送。

您的缓存命中率有望接近 100%。
点击检查我的进度,验证是否完成了以下目标:
创建负载均衡器
任务 3. 从 Cloud Storage 存储桶中删除对象
现在缓存已填充完毕,接下来要从存储桶中删除该对象。这将进一步证明您是将政策应用于缓存,而非后端。
-
在导航菜单 (
) 中,依次点击 Cloud Storage > 存储桶 > -bucket > 对象。
-
选择该对象,然后点击顶部的删除按钮将其删除。
-
出现提示时,点击删除。
点击检查我的进度,验证是否完成了以下目标:
从 Cloud Storage 存储桶中删除对象
任务 4. 创建边缘安全政策
Cloud Armor 政策是独立于 HTTP 负载均衡器定义的。部署 Cloud Armor 政策后,您可以将其与一个或多个 HTTP 负载均衡器后端服务或存储桶资源(称为“目标”)相关联。
- 在导航菜单 (
) 中,依次点击查看所有产品 > 网络安全 > Cloud Armor 政策,然后点击创建政策。
- 设置以下值,将所有其他值保留为默认值,然后点击下一步:
| 属性 |
值(按照说明输入值或选择选项) |
| 名称 |
edge-security-policy |
| 政策类型 |
边缘安全政策 |
| 默认规则操作 |
拒绝 |
- 在将政策应用于目标部分,点击添加目标并设置以下值:
| 属性 |
值 |
| 类型 1 |
后端存储桶(外部应用负载均衡器) |
| 后端存储桶目标 1 |
lb-backend-bucket |
-
点击完成。
-
点击创建政策。
验证边缘安全政策
现在,您已在后端存储桶前创建了边缘安全政策,接下来请验证该政策是否按预期正常生效。
检查安全政策
几分钟后,您可以检查 Cloud Armor 政策是否已生效。
在命令行中运行以下命令,您将收到 403 错误:
curl -svo /dev/null http://LOAD_BALANCER_IP/google.png
当您无权访问网页或 Web 服务器上的某些内容时,就会出现 403 错误。
输出:
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
查看日志
接下来,您需要查看日志,确认边缘安全政策的执行情况。
-
在导航菜单 (
) 中,依次点击查看所有产品 > 可观测性 > 日志记录 > Logs Explorer。
-
在查询框中输入以下代码段,然后点击运行查询:
resource.type:(http_load_balancer) AND jsonPayload.@type="type.googleapis.com/google.cloud.loadbalancing.type.LoadBalancerLogEntry" AND severity>=WARNING
- 请注意
403 响应和强制执行的安全政策。

点击检查我的进度,验证是否完成了以下目标:
为 Cloud Armor 创建边缘安全政策
移除安全政策
为了证明对象是从 CDN 缓存分发的,请移除 Cloud Armor 安全政策并查询该对象。源对象已从 Cloud Storage 中移除,这表明该对象目前正通过边缘缓存进行分发。
- 在导航菜单 (
) 中,依次点击查看所有产品 > 网络安全 > Cloud Armor 政策 > edge-security-policy > 目标。
- 选择
lb-backend-bucket 目标,然后点击移除以移除目标存储桶。确认移除。
- 等待几分钟,然后再次向 Cloud Storage 存储桶中的资源发送
curl 请求:
curl -svo /dev/null http://LOAD_BALANCER_IP/google.png
这次您将收到 200 响应。网页的呈现符合预期。
输出:
student-cloudshell% 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
多尝试几次,看看是否会收到 403 状态代码。
恭喜!
您已成功创建 Cloud Storage 存储桶,向其中上传了图片,将其与负载均衡器绑定,并在其上启用了 Cloud CDN 和边缘安全政策。
上次更新手册的时间:2024 年 12 月 10 日
上次测试实验的时间:2025 年 9 月 4 日
版权所有 2026 Google LLC 保留所有权利。Google 和 Google 徽标是 Google LLC 的商标。其他所有公司名和产品名可能是其各自相关公司的商标。