GSP213

概览
在实际应用中,您需要保护敏感数据并确保 Web 应用在任何时候的持续可用性。您将了解如何利用 Google Cloud VPC 网络在 Google Cloud 环境中部署更安全、可伸缩且易于管理的 Web 服务器。
在本实验中,您将在默认的 VPC 网络上创建两个 Nginx Web 服务器,并使用带标记的防火墙规则控制从外部通过 HTTP 对 Web 服务器的访问权限。然后深入了解 IAM 角色和服务账号。
- 两个 Web 服务器可实现冗余性,如果其中一个出现故障,另一个可继续为 Web 流量提供服务,从而避免停机。
- 带标记的防火墙规则可精确控制哪些流量可以访问特定的 Web 服务器。
- 通过为服务账号分配执行任务所需的权限,您可以遵循最小权限原则,从而确保 Cloud 资源的安全。
目标
在本实验中,您将学习如何执行以下任务:
- 在 VPC 网络上创建 Nginx Web 服务器
- 创建带标记的防火墙规则
- 创建服务账号并为其授予 IAM 角色
- 深入了解 Network Admin 和 Security Admin 角色的权限
设置和要求
点击“开始实验”按钮前的注意事项
请阅读以下说明。实验是计时的,并且您无法暂停实验。计时器在您点击开始实验后即开始计时,显示 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
Cloud Shell 是一种装有开发者工具的虚拟机。它提供了一个永久性的 5GB 主目录,并且在 Google Cloud 上运行。Cloud Shell 提供可用于访问您的 Google Cloud 资源的命令行工具。
-
点击 Google Cloud 控制台顶部的激活 Cloud Shell
。
-
在弹出的窗口中执行以下操作:
- 继续完成 Cloud Shell 信息窗口中的设置。
- 授权 Cloud Shell 使用您的凭据进行 Google Cloud API 调用。
如果您连接成功,即表示您已通过身份验证,且项目 ID 会被设为您的 Project_ID 。输出内容中有一行说明了此会话的 Project_ID:
Your Cloud Platform project in this session is set to {{{project_0.project_id | "PROJECT_ID"}}}
gcloud
是 Google Cloud 的命令行工具。它已预先安装在 Cloud Shell 上,且支持 Tab 自动补全功能。
- (可选)您可以通过此命令列出活跃账号名称:
gcloud auth list
- 点击授权。
输出:
ACTIVE: *
ACCOUNT: {{{user_0.username | "ACCOUNT"}}}
To set the active account, run:
$ gcloud config set account `ACCOUNT`
- (可选)您可以通过此命令列出项目 ID:
gcloud config list project
输出:
[core]
project = {{{project_0.project_id | "PROJECT_ID"}}}
注意:如需查看在 Google Cloud 中使用 gcloud
的完整文档,请参阅 gcloud CLI 概览指南。
任务 1. 创建 Web 服务器
在本部分,您将在默认的 VPC 网络中创建两个 Web 服务器(blue 和 green)。然后在这两个 Web 服务器上安装 Nginx,并修改欢迎页面以便区分。
创建服务器 blue
创建服务器 blue 并为其添加网络标记。
-
在 Cloud 控制台中,前往导航菜单 (
) > Compute Engine > 虚拟机实例。
-
如需创建新实例,请点击创建实例。
-
在机器配置中,
选择以下值:
属性 |
值(按照说明输入值或选择选项) |
名称 |
blue |
区域 |
|
可用区 |
|
如需详细了解可用的区域和可用区,请参阅 Compute Engine 指南中的“可用的区域和可用区”部分了解 Google Cloud Compute Engine 区域和可用区指南。
-
点击网络。
注意:网络通过网络标记来识别应遵循特定的防火墙规则和网络路由的虚拟机实例。在本实验的后面部分,您将创建一条防火墙规则,以允许对有 web-server 标记的虚拟机实例进行 HTTP 访问。您也可以勾选允许 HTTP 流量复选框,以将此实例标记为 http-server,然后为 tcp:80 创建带标记的防火墙规则。
-
点击创建。
测试完成的任务
点击检查我的进度,确认您已完成的任务。如果您成功完成了任务,系统会给出评分。
创建服务器 blue。
创建服务器 green
创建不带网络标记的服务器 green。
-
仍然是在控制台中,在虚拟机实例页面上,点击创建实例。
-
在机器配置中,
选择以下值:
属性 |
值(按照说明输入值或选择选项) |
名称 |
green |
区域 |
|
可用区 |
|
-
点击创建。
测试完成的任务
点击检查我的进度,确认您已完成的任务。如果您成功完成了任务,系统会给出评分。
创建服务器 green。
安装 Nginx 并自定义欢迎页面
在这两个虚拟机实例上安装 Nginx,并修改欢迎页面以便区分。
- 仍然是在虚拟机实例对话框中,对于 blue,点击 SSH 以启动一个终端并进行连接。
注意:如果与虚拟机的连接失败,并显示 SSH 身份验证失败
错误,请点击重试以重新建立连接。
- 在连接到 blue 的 SSH 终端运行以下命令以安装 Nginx:
sudo apt-get install nginx-light -y
- 在 Nano 编辑器中打开欢迎页面:
sudo nano /var/www/html/index.nginx-debian.html
- 将
<h1>欢迎使用 Nginx!</h1>
行替换为 <h1>欢迎访问服务器 blue!</h1>
。
- 依次按 Ctrl+O、ENTER、Ctrl+X。
- 验证更改:
cat /var/www/html/index.nginx-debian.html
输出应该包含以下内容:
<h1>欢迎访问服务器 blue!</h1>
<p>如果您看到本页面,说明 Nginx 已在 Web 服务器上成功安装并正常运行。您需要进一步对其进行配置。</p>
- 断开 SSH 终端与 blue 的连接:
exit
对服务器 green 重复相同的步骤:
- 对于 green,点击 SSH 以启动一个终端并进行连接。
- 安装 Nginx:
sudo apt-get install nginx-light -y
- 在 Nano 编辑器中打开欢迎页面:
sudo nano /var/www/html/index.nginx-debian.html
- 将
<h1>欢迎使用 Nginx!</h1>
行替换为 <h1>欢迎访问服务器 green!</h1>
。
- 依次按 Ctrl+O、ENTER、Ctrl+X。
- 验证更改:
cat /var/www/html/index.nginx-debian.html
输出应该包含以下内容:
<h1>欢迎访问服务器 green!</h1>
<p>如果您看到本页面,说明 Nginx 已在 Web 服务器上成功安装并正常运行。您需要进一步对其进行配置。</p>
- 断开 SSH 终端与 green 的连接:
exit
测试已完成的任务
点击检查我的进度,确认您已完成的任务。如果您成功完成了任务,系统会给出评分。
安装 Nginx 并自定义欢迎页面。
任务 2. 创建防火墙规则
创建带标记的防火墙规则并测试 HTTP 连接。
创建带标记的防火墙规则
创建一条适用于带 web-server 网络标记的虚拟机实例的防火墙规则。
- 在 Cloud 控制台中,前往导航菜单 (
) > VPC 网络 > 防火墙。
- 注意 default-allow-internal 防火墙规则。
注意:default-allow-internal 防火墙规则将允许默认网络内来自所有协议/端口的流量。您需要使用网络标记 web-server 创建一条防火墙规则,以只允许此网络以外的流量访问服务器 blue。
-
点击创建防火墙规则。
-
设置以下值,将所有其他值保留为默认值。
属性 |
值(按照说明输入值或选择选项) |
名称 |
allow-http-web-server |
网络 |
default |
目标 |
指定的目标标记 |
目标标记 |
web-server |
来源过滤条件 |
IPv4 范围 |
来源 IPv4 范围 |
0.0.0.0/0 |
协议和端口 |
指定的协议和端口,然后勾选“tcp”,并输入“80”;再勾选“其他协议“,并输入“icmp”。
|
注意:请务必在来源 IP 范围中包含 /0 以指定所有网络。
- 点击创建。
测试完成的任务
点击检查我的进度,确认您已完成的任务。如果您成功完成了任务,系统会给出评分。
创建带标记的防火墙规则。
创建 test-vm
使用 Cloud Shell 命令行创建 test-vm 实例。
-
打开新的 Cloud Shell 终端。
-
运行以下命令,以在 可用区创建一个 test-vm 实例:
gcloud compute instances create test-vm --machine-type=e2-micro --subnet=default --zone={{{project_0.default_zone|ZONE}}}
输出应如下所示:
NAME ZONE MACHINE_TYPE PREEMPTIBLE INTERNAL_IP EXTERNAL_IP STATUS
test-vm {{{project_0.default_zone|ZONE}}} e2-micro 10.142.0.4 35.237.134.68 RUNNING
注意:您可以从控制台或通过 gcloud 命令行轻松创建虚拟机实例。
测试已完成的任务
点击检查我的进度,确认您已完成的任务。如果您成功完成了任务,系统会给出评分。
创建 test-vm。
测试 HTTP 连接
从 test-vm 对 blue 和 green 的内部和外部 IP 地址运行 curl
命令。
- 在控制台中,前往导航菜单 (
) > Compute Engine > 虚拟机实例。
- 记下 blue 和 green 的内部和外部 IP 地址。
- 对于 test-vm,点击 SSH 以启动一个终端并进行连接。
- 要测试与 blue 内部 IP 的 HTTP 连接,请运行以下命令(需替换为 blue 的内部 IP):
curl <在此处输入 blue 的内部 IP 地址>
您将看到标题欢迎访问服务器 blue!
。
- 要测试与 green 内部 IP 的 HTTP 连接,请运行以下命令(需替换为 green 的内部 IP):
curl -c 3 <在此处输入 green 的内部 IP>
您将看到标题 欢迎访问服务器 green!
。
注意:您可以使用这两个服务器的内部 IP 地址通过 HTTP 进行访问。test-vm 与 Web 服务器的默认网络位于同一个 VPC 网络上,因此,default-allow-internal 防火墙规则允许通过 tcp:80 进行连接。
- 要测试与 blue 外部 IP 的 HTTP 连接,请运行以下命令(需替换为 blue 的外部 IP):
curl <在此处输入 blue 的外部 IP>
您将看到标题欢迎访问服务器 blue!
。
- 要测试与 green 外部 IP 的 HTTP 连接,请运行以下命令(需替换为 green 的外部 IP):
curl -c 3 <在此处输入 green 的外部 IP>
注意:此命令应该会运行失败!请求将被挂起。
- 按 Ctrl+C 以停止该 HTTP 请求。
注意:与预期一样,allow-http-web-server 只适用于带 web-server 标记的虚拟机实例,因此,您只能通过 HTTP 访问 blue 服务器的外部 IP 地址。
您可以打开新的标签页并前往 http://[服务器的外部 IP]
以在浏览器中对此进行验证。
任务 3. 深入了解 Network Admin 和 Security Admin 角色
Cloud IAM 让您可以授权哪些用户能对特定资源执行操作,给予您对 Cloud 资源的全面控制和可见性,以便进行集中管理。以下角色可与单个项目网络结合使用,以单独控制每个 VPC 网络的管理员权限:
-
Network Admin:拥有创建、修改和删除网络资源(不包括防火墙规则和 SSL 证书)的权限。
-
Security Admin:拥有创建、修改和删除防火墙规则和 SSL 证书的权限。
通过将这些角色应用于服务账号来深入了解这些角色,服务账号是属于虚拟机实例的一种特殊的 Google 账号,不属于某个最终用户。您需要授权 test-vm 使用服务账号以演示 Network Admin 和 Security Admin 角色的权限,而非创建新用户。
验证当前权限
目前,test-vm 使用的是 Compute Engine 默认服务账号,通过 Cloud Shell 命令行和 Cloud 控制台创建的所有实例均已启用该账号。
尝试列出或删除 test-vm 中的可用防火墙规则。
- 返回 test-vm 实例的 SSH 终端。
- 尝试列出可用防火墙规则:
gcloud compute firewall-rules list
输出应如下所示:
ERROR: (gcloud.compute.firewall-rules.list) Some requests did not succeed:
- Insufficient Permission
注意:此命令应该会运行失败!
- 尝试删除 allow-http-web-server 防火墙规则:
gcloud compute firewall-rules delete allow-http-web-server
- 如果提示您需要执行下一步操作,请输入 Y。
输出应如下所示:
ERROR: (gcloud.compute.firewall-rules.delete) Could not fetch resource:
- Insufficient Permission
注意:此命令应该会运行失败!
注意:Compute Engine 默认服务账号没有列出或删除防火墙规则的权限。没有适当角色的其他用户也是如此。
创建服务账号
创建服务账号并应用 Network Admin 角色。
-
在控制台中,前往 导航菜单 (
) > IAM 和管理 > 服务账号。
-
注意 Compute Engine 默认服务账号。
-
点击创建服务账号。
-
将服务账号名称设置为 Network-admin
,然后点击创建并继续。
-
在选择角色中,依次选择 Compute Engine > Compute Network Admin,点击继续,然后点击完成。
-
创建服务账号 Network-admin
后,点击右上角的三点状图标,点击下拉菜单中的管理密钥,点击添加密钥,然后从下拉菜单中选择创建新密钥。点击创建以下载 JSON 输出。
-
点击关闭。
一个 JSON 密钥文件将被下载到您的本地计算机。找到此密钥文件,在后面的步骤中,您需要将其上传到虚拟机。
-
将您的本地计算机上的 JSON 密钥文件重命名为 credentials.json。
测试已完成的任务
点击检查我的进度,确认您已完成的任务。如果您成功完成了任务,系统会给出评分。
创建 Network-admin 服务账号。
对 test-vm 进行授权并验证权限
对 test-vm 进行授权以使用 Network-admin 服务账号。
- 返回 test-vm 实例的 SSH 终端。
- 如需通过 SSH 虚拟机终端上传 credentials.json,请点击右上角的上传文件图标。
- 选择 credentials.json 并上传该文件。
- 在“文件传输”窗口中点击关闭。
注意:如果出现提示,请点击“未能通过 Cloud Identity-Aware Proxy 建立连接”对话框中的重试,然后重新上传文件。
- 使用您刚刚上传的凭据对虚拟机进行授权:
gcloud auth activate-service-account --key-file credentials.json
注意:您使用的映像已预安装 Cloud SDK,因此无需初始化 Cloud SDK。如果您在其他环境中尝试进行本实验,请务必按照Cloud SDK 的安装步骤进行安装。
- 尝试列出可用防火墙规则:
gcloud compute firewall-rules list
输出应如下所示:
NAME NETWORK DIRECTION PRIORITY ALLOW DENY
allow-http-web-server default INGRESS 1000 tcp:80
default-allow-icmp default INGRESS 65534 icmp
default-allow-internal default INGRESS 65534 all
default-allow-rdp default INGRESS 65534 tcp:3389
default-allow-ssh default INGRESS 65534 tcp:22
此命令应该会成功运行!
- 尝试删除 allow-http-web-server 防火墙规则:
gcloud compute firewall-rules delete allow-http-web-server
- 如果提示您需要执行下一步操作,请输入 Y。
输出应如下所示:
ERROR: (gcloud.compute.firewall-rules.delete) Could not fetch resource:
- Required 'compute.firewall.delete' permission for 'projects/[PROJECT_ID]/global/firewall/allow-http-web-server'
注意:此命令应会运行失败!
注意:与预期一样,Network Admin 角色具有列出防火墙规则的权限,但没有修改/删除防火墙规则的权限。
更新服务账号并验证权限
为 Network-admin 服务账号授予 Security Admin 角色以更新该账号。
-
在控制台中,前往导航菜单 (
) > IAM 和管理 > IAM。
-
找到 Network-admin 账号。重点关注名称列以便识别此账号。
-
点击 Network-admin 账号旁边的铅笔图标。
-
将角色更改为 Compute Engine > Compute Security Admin。
-
点击保存。
-
返回 test-vm 实例的 SSH 终端。
-
尝试列出可用防火墙规则:
gcloud compute firewall-rules list
输出应如下所示:
NAME NETWORK DIRECTION PRIORITY ALLOW DENY
allow-http-web-server default INGRESS 1000 tcp:80
default-allow-icmp default INGRESS 65534 icmp
default-allow-internal default INGRESS 65534 all
default-allow-rdp default INGRESS 65534 tcp:3389
default-allow-ssh default INGRESS 65534 tcp:22
此命令应该会成功运行!
- 尝试删除 allow-http-web-server 防火墙规则:
gcloud compute firewall-rules delete allow-http-web-server
- 如果提示您需要执行下一步操作,请输入 Y。
输出应如下所示:
Deleted [https://www.googleapis.com/compute/v1/projects/qwiklabs-gcp-00e186e4b1cec086/global/firewall/allow-http-web-server].
应该能够 ping 通。
注意:与预期一样,Security Admin 角色具有列出和删除防火墙规则的权限。
验证防火墙规则已删除
验证因已删除 allow-http-web-server 防火墙规则,您无法再通过 HTTP 访问服务器 blue 的外部 IP。
- 返回 test-vm 实例的 SSH 终端。
- 若要测试与 blue 的外部 IP 的 HTTP 连接,请运行以下命令(需替换为 blue 的外部 IP):
curl -c 3 <在此处输入 blue 的外部 IP>
注意:此命令应该会运行失败!
- 按 Ctrl+C 以停止该 HTTP 请求。
注意:应为合适的用户或服务账号授予 Security Admin 角色以免对防火墙规则进行任何不必要的更改!
恭喜!
在本实验中,您创建了两个 Nginx Web 服务器,并使用带标记的防火墙规则对外部 HTTP 流量进行控制。然后,您创建了一个服务账号,先为其授予 Network Admin 角色,然后为其授予 Security Admin 角色,从而深入了解这两个角色在权限方面的不同之处。
后续步骤/了解详情
通过以下实验详细了解服务账号和角色:
如需了解 Google Cloud Identity and Access Management 的基本概念,请参阅 Google Cloud Identity and Access Management 概览
Google Cloud 培训和认证
…可帮助您充分利用 Google Cloud 技术。我们的课程会讲解各项技能与最佳实践,可帮助您迅速上手使用并继续学习更深入的知识。我们提供从基础到高级的全方位培训,并有点播、直播和虚拟三种方式选择,让您可以按照自己的日程安排学习时间。各项认证可以帮助您核实并证明您在 Google Cloud 技术方面的技能与专业知识。
上次更新手册的时间:2025 年 6 月 9 日
上次测试实验的时间:2025 年 6 月 9 日
版权所有 2025 Google LLC 保留所有权利。Google 和 Google 徽标是 Google LLC 的商标。其他所有公司名和产品名可能是其各自相关公司的商标。