准备工作
- 实验会创建一个 Google Cloud 项目和一些资源,供您使用限定的一段时间
- 实验有时间限制,并且没有暂停功能。如果您中途结束实验,则必须重新开始。
- 在屏幕左上角,点击开始实验即可开始
Deploy a Cloud Run service
/ 20
Enable and add policy to IAP
/ 30
Access User Identity Information
/ 25
Use Cryptographic Verification
/ 25
Deploy a Cloud Run service
/ 20
Enable and add policy to IAP
/ 30
Access User Identity Information
/ 25
Use Cryptographic Verification
/ 25
在本实验中,您将使用 Cloud Run 构建一个很小的 Web 应用,然后探索使用 Identity-Aware Proxy (IAP) 来限制对该应用的访问权限,以及向该应用提供用户身份信息的各种方法。您的应用将:
在本实验中,您将学习如何执行以下任务:
了解 Python 编程语言的基本知识将有助于增强您的学习体验。
本实验主要会用到 Cloud Run 和 IAP。对于不相关的概念,我们仅会略作介绍,但是会提供相应代码块供您复制和粘贴。
对 Web 应用的用户进行身份验证往往很有必要,而这通常需要在应用中进行特殊编程。对于 Google Cloud 应用,您可以将这些任务交给 Identity-Aware Proxy 服务来处理。如果您只需要限制选定用户具有访问权限,则无需对应用进行任何更改。如果应用需要知道用户的身份(例如,为了在服务器端保留用户的偏好),只需编写极少的应用代码,Identity-Aware Proxy 即可提供该功能。
Identity-Aware Proxy (IAP) 是一项 Google Cloud 服务,可拦截发送给应用的 Web 请求,使用 Google Identity 服务对发出请求的用户进行身份验证,并仅允许来自已获授权的用户的请求通过。此外,它还可以修改请求标头,在其中包含有关经过身份验证的用户的信息。
请阅读以下说明。实验是计时的,并且您无法暂停实验。计时器在您点击开始实验后即开始计时,显示 Google Cloud 资源可供您使用多长时间。
此实操实验可让您在真实的云环境中开展实验活动,免受模拟或演示环境的局限。为此,我们会向您提供新的临时凭据,您可以在该实验的规定时间内通过此凭据登录和访问 Google Cloud。
为完成此实验,您需要:
点击开始实验按钮。如果该实验需要付费,系统会打开一个对话框供您选择支付方式。右侧是实验设置和访问权限面板,其中包含以下内容:
请注意,实验计时器位于页面顶部附近,将显示剩余时间。
点击打开 Google Cloud 控制台(如果您使用的是 Chrome 浏览器,请右键点击并选择在无痕式窗口中打开链接)。
该实验会启动资源并打开另一个标签页,显示“登录”页面。
提示:可以将这些标签页分别放在不同的窗口中,并排显示。
如有必要,请复制下方的用户名,然后将其粘贴到登录对话框中。
您也可以在实验设置和访问权限面板中找到“用户名”。
点击下一步。
复制下面的密码,然后将其粘贴到欢迎对话框中。
您也可以在实验设置和访问权限面板中找到“密码”。
点击下一步。
依次点击进入后续页面:
片刻之后,系统会在此标签页中打开 Google Cloud 控制台。
Cloud Shell 是一种装有开发者工具的虚拟机。它提供了一个永久性的 5GB 主目录,并且在 Google Cloud 上运行。Cloud Shell 提供可用于访问您的 Google Cloud 资源的命令行工具。
点击 Google Cloud 控制台顶部的激活 Cloud Shell 。
在弹出的窗口中执行以下操作:
如果您连接成功,即表示您已通过身份验证,且项目 ID 会被设为您的 Project_ID
gcloud 是 Google Cloud 的命令行工具。它已预先安装在 Cloud Shell 上,且支持 Tab 自动补全功能。
输出:
输出:
gcloud 的完整文档,请参阅 gcloud CLI 概览指南。
点击 Cloud Shell 中的命令行区域,以便可以输入命令。
从公共存储桶中下载代码,然后切换到包含相应代码的文件夹:
对于本实验中的每个步骤,此文件夹都包含一个相应的子文件夹。您需要切换到正确的文件夹来执行相应的步骤。
这是一个用 Python 编写的 Cloud Run 服务,可简单地显示“Hello, World”欢迎页面。我们将对它进行部署和测试,然后使用 IAP 来限制对它的访问权限。
1-HelloWorld 子文件夹。应用代码在 main.py 文件中。应用使用 Flask Web 框架通过模板的内容来对 Web 请求做出响应。该模板文件位于 templates/index.html。在此步骤中,它仅包含纯 HTML。第二个模板文件为 templates/privacy.html,包含示例隐私权政策架构。
另外还有一个文件 requirements.txt,其中列出了应用使用的所有非默认 Python 库。
您可以使用 cat 命令在 shell 中列出每个文件,如下所示:
或者,您也可以通过点击 Cloud Shell 工具栏中的打开编辑器(铅笔)图标启动 Cloud Shell 代码编辑器,然后按照上面的方法检查代码。
在这一步您无需更改任何文件。
几分钟后,部署即会完成。您将看到一条包含服务网址的消息。
点击检查我的进度以验证是否完成了以下目标:
在 Google Cloud 控制台的导航菜单 () 中,依次点击安全 > Identity-Aware Proxy。
点击启用 API。
点击转到 Identity-Aware Proxy。
点击 user-auth-lab 旁边的 IAP 列中的切换按钮,开启 IAP。
点击开启进行确认。
打开一个新的浏览器标签页,然后前往应用的网址。系统会打开使用 Google 账号登录页面。
使用您用于登录控制台的学生账号凭证登录。
系统会显示一个拒绝您访问的界面。 您已成功使用 IAP 保护您的应用,但尚未授权任何用户账号。
返回控制台中的 Identity-Aware Proxy 页面。
选中 user-auth-lab Cloud Run 服务旁边的复选框,以打开右侧的详细信息边栏。
点击添加主账号。
在新的主账号中,请输入您的学生邮箱。
在选择角色部分,依次选择 Cloud IAP > IAP-secured Web App User。
点击保存。 页面底部会显示“政策已更新”消息。
返回您的应用并重新加载页面。由于您已使用授权账号登录,因此现在应该可以看到自己的 Web 应用。
点击检查我的进度以验证是否完成了以下目标:
如果您仍然看到访问遭拒页面,请清除 IAP 登录 Cookie:
/_gcp_iap/clear_login_cookie(例如 https://user-auth-lab-[random-hash].run.app/_gcp_iap/clear_login_cookie),然后打开该网址。一旦应用受到 IAP 保护,它就可以使用 IAP 在所传递的 Web 请求标头中提供的身份信息。在此步骤中,该应用将获取已登录用户的邮箱,以及 Google Identity 服务分配给该用户的永久性唯一身份用户 ID。该数据将在欢迎页面中显示给用户。
部署应该会在几分钟后完成。等待期间,您可以按照如下所述检查应用文件。
点击检查我的进度以验证是否完成了以下目标:
cat 命令在 Cloud Shell 中查看主应用文件:此文件夹包含的文件集与您部署的上一个应用 1-HelloWorld 相同,但有两个文件发生了改变:main.py 和 templates/index.html。程序已改为检索 IAP 在请求标头中提供的用户信息,并且模板现在会显示这些数据。
main.py 中有两行代码用于获取 IAP 提供的身份数据:
X-Goog-Authenticated-User- 标头由 IAP 提供,并且名称不区分大小写,因此,如果您愿意,可以将它们全部小写或全部大写。render_template 语句现在包含这些值,因此应用可以显示这些信息:
index.html 模板可以通过将名称括在双花括号中来显示这些值:
如您所见,提供的数据带有 accounts.google.com 前缀,用于指出信息来源。如果需要,您的应用可以移除冒号前的所有内容(包括冒号)以获取原始值。
如果 IAP 被停用或绕过,此应用会发生什么情况?我们关闭 IAP 来看看。
user-auth-lab)旁边的 IAP 切换开关,关闭 IAP。由于应用现在不受保护,用户可以发送似乎已通过 IAP 检查的 Web 请求。例如,您可以在 Cloud Shell 中运行以下 curl 命令(将 <your-url-here> 替换为应用的网址):
网页将显示在命令行上,其中会显示虚假邮件:
应用无法知道 IAP 已被停用或绕过。对于存在潜在风险的情况,加密验证给出了解决方案。
如果存在 IAP 被关闭或绕过的风险,应用可以检查并确保收到的身份信息有效。这需要用到 IAP 添加的第三个 Web 请求标头,即 X-Goog-IAP-JWT-Assertion。标头的值是一个以加密方式签名的对象,其中还包含用户身份数据。您的应用可以验证数字签名,并使用此对象中提供的数据来确定签名由 IAP 提供且未经篡改。
数字签名验证流程需要执行几个额外的步骤,例如检索最新的一组 Google 公钥。您可以根据有人可能能够关闭或绕过 IAP 的风险以及应用的敏感性,来决定您的应用是否需要这些额外的步骤。
找到受 IAP 保护的 Cloud Run 服务的签名标头 JWT 目标设备客户端 ID:
前往 Cloud 控制台中的 Identity-Aware Proxy 页面。
在列表中找到 user-auth-lab。
注意:您可能需要使用表格底部的水平滚动条向右滚动资源表格,才能显示最右侧的操作列。
在操作下,点击资源旁边的三个竖点按钮,然后选择获取 JWT 目标设备代码。
在随即显示的模态框中,将显示的客户端 ID 字符串复制并粘贴到文本编辑器中,然后选择确定。
将应用部署到 Cloud Run,并使用您复制的客户端 ID 值设置 IAP_AUDIENCE 环境变量:
部署应该会在几分钟后完成。等待期间,您可以按照如下所述检查应用文件。
点击检查我的进度以验证是否完成了以下目标:
cat 命令在 Cloud Shell 中查看新的身份验证帮助程序文件:此文件夹包含的文件集与 2-HelloUser 相同,但有两个文件发生了改变,并增加了一个新文件。新文件是 auth.py,其中提供了 user() 方法来检索并验证以加密方式签名的身份信息。发生改变的文件是 main.py 和 templates/index.html,它们现在会使用该方法的结果。另外,还显示了上次部署中发现的未经验证的标头以供比较。
user() 函数中:assertion 是指定的请求标头中提供的以加密方式签名的数据。代码使用一个库来验证和解码这些数据。验证功能使用 Google 提供的公钥来检查所签名的数据,并了解数据是为哪个受众群体准备的(本质上是受保护的 Google Cloud 项目)。辅助函数 keys() 和 audience() 会收集并返回这些值。
已签名对象包含我们需要的两部分数据:经过验证的邮箱和唯一 ID 值(在 sub [表示订阅方] 标准字段中提供)。
第 3 步到这里就完成了。
部署就绪后,您可以使用以下命令获取应用的网址:
请注意,验证方法所提供的邮箱没有 accounts.google.com: 前缀。
如果 IAP 被关闭或绕过,则已验证数据将会缺失或无效,因为该数据不可能具有有效的签名,除非它是由 Google 私钥持有者创建的。
您已部署 Cloud Run 服务。首先,您限制只有所选用户具有应用的访问权限。然后,您检索并显示了 IAP 允许访问应用的用户身份,并了解了如果 IAP 被停用或绕过,这些信息可能会如何被仿冒。最后,您验证了以加密方式签名的用户身份断言,这些断言是无法仿冒的。
…可帮助您充分利用 Google Cloud 技术。我们的课程会讲解各项技能与最佳实践,可帮助您迅速上手使用并继续学习更深入的知识。我们提供从基础到高级的全方位培训,并有点播、直播和虚拟三种方式选择,让您可以按照自己的日程安排学习时间。各项认证可以帮助您核实并证明您在 Google Cloud 技术方面的技能与专业知识。
上次更新手册的时间:2026 年 5 月 28 日
上次测试实验的时间:2026 年 5 月 28 日
版权所有 2026 Google LLC 保留所有权利。Google 和 Google 徽标是 Google LLC 的商标。其他所有公司名和产品名可能是其各自相关公司的商标。
此内容目前不可用
一旦可用,我们会通过电子邮件告知您
太好了!
一旦可用,我们会通过电子邮件告知您
一次一个实验
确认结束所有现有实验并开始此实验
完成此快速步骤即可开始实验。