
Before you begin
- Labs create a Google Cloud project and resources for a fixed time
- Labs have a time limit and no pause feature. If you end the lab, you'll have to restart from the beginning.
- On the top left of your screen, click Start lab to begin
Deploy an App Engine application
/ 20
Enable and add policy to IAP
/ 30
Access User Identity Information
/ 25
Use Cryptographic Verification
/ 25
在本实验中,您将使用 Google App Engine 构建一个很小的 Web 应用,然后探索使用 Identity-Aware Proxy (IAP) 来限制对该应用的访问权限,以及向该应用提供用户身份信息的各种方法。您的应用将:
了解 Python 编程语言的基本知识将有助于增强您的学习体验。
本实验主要会用到 Google App Engine 和 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 资源的命令行工具。
如果您连接成功,即表示您已通过身份验证,且当前项目会被设为您的 PROJECT_ID 环境变量所指的项目。输出内容中有一行说明了此会话的 PROJECT_ID:
gcloud
是 Google Cloud 的命令行工具。它已预先安装在 Cloud Shell 上,且支持 Tab 自动补全功能。
点击授权。
现在,输出的内容应如下所示:
输出:
输出:
输出示例:
gcloud
, in Google Cloud, refer to the gcloud CLI overview guide.
点击 Cloud Shell 中的命令行区域,以便可以输入命令。
从公共存储桶中下载代码,然后切换到包含相应代码的文件夹:
对于本实验中的每个步骤,此文件夹都包含一个相应的子文件夹。您需要切换到正确的文件夹来执行相应的步骤。
这是一个用 Python 编写的 App Engine 标准应用,只会显示“Hello, World”欢迎页面。我们将对它进行部署和测试,然后使用 IAP 来限制对它的访问权限。
1-HelloWorld
子文件夹。应用代码在 main.py
文件中。应用使用 Flask Web 框架通过模板的内容来对 Web 请求做出响应。该模板文件位于 templates/index.html
。对于此步骤而言,它仅包含纯 HTML。第二个模板文件为 templates/privacy.html
,包含示例隐私权政策架构。
另外还有两个文件:requirements.txt
和 app.yaml
,前者列出应用使用的所有非默认 Python 库,后者告诉 Google Cloud 这是一个 Python App Engine 应用。
您可以使用 cat 命令在 shell 中列出每个文件,如下所示:
或者,您也可以通过点击 Cloud Shell 窗口右上角的铅笔图标启动 Cloud Shell 代码编辑器,然后按照上面的方法检查代码。
在这一步您无需更改任何文件。
python39
。选择区域
当系统询问您是否要继续时,请输入 Y 表示“是”。
gcloud app deploy
命令。
几分钟后,部署即会完成。您会看到一条消息,提示您可以使用 gcloud app browse
查看应用。
从任何连接到互联网的计算机打开该网址都可以看到该网页。访问权限尚未受到限制。
点击检查我的进度以验证是否完成了以下目标:
在 Cloud 控制台窗口中,点击导航菜单 > 安全 > Identity-Aware Proxy。
点击启用 API。
点击转到 Identity-Aware Proxy。
点击配置权限请求页面。
在“用户类型”下选择内部,然后点击创建。
在必填空白字段中填写适当的值:
字段 |
值 |
应用名称 |
IAP 示例 |
用户支持电子邮件 |
从下拉菜单中选择您在本实验中使用的学员电子邮件地址。 |
应用首页 |
用于查看应用的网址。您可以在 Cloud Shell 中再次运行 gcloud app browse 命令来获得该网址。 |
应用隐私权政策链接 |
应用中的隐私权页面链接,由首页链接后跟 |
已获授权的网域 |
点击 + 添加网域,然后输入应用网址的主机名部分,例如 iap-example-999999.appspot.com。您可以在之前打开的 Hello World 网页的地址栏中看到此信息。请不要输入网址开头的 |
开发者联系信息 |
请至少输入一个电子邮件地址 |
点击保存并继续。
在范围页,点击保存并继续。
在摘要页,点击返回信息中心。
系统可能会提示您创建凭据。您无需在本实验中创建凭据,因此只需关闭此浏览器标签页即可。
点击 App Engine 应用行 IAP 列中的切换按钮开启 IAP。
打开浏览器标签页并访问您应用的网址。“使用 Google 账号登录”屏幕将会打开,要求您登录以访问该应用。
使用您用于登录控制台的账号登录。您会看到拒绝您访问的屏幕。
您已成功使用 IAP 保护您的应用,但尚未指示 IAP 允许哪些账号通过。
您需要将每个允许访问的电子邮件地址(或者 Google 群组地址或 Workspace 域名)添加为成员。
点击添加主账号。
输入您的学员电子邮件地址。
然后选择为该地址分配 Cloud IAP > IAP-Secured Web App User 角色。
您可以通过同样的方式输入更多地址或 Workspace 域名。
窗口底部会显示“政策已更新”消息。
点击检查我的进度以验证是否完成了以下目标:
返回您的应用并重新加载页面。您现在应该可以看到自己的 Web 应用,因为您已经以授权用户的身份登录。
如果您仍然看到“您没有访问权限”页面,则说明 IAP 未重新检查您的授权。在这种情况下,请执行以下步骤:
/_gcp_iap/clear_login_cookie
,例如输入 https://iap-example-999999.appspot.com/_gcp_iap/clear_login_cookie
。这会让 IAP 重新检查您的访问权限,您现在应该能看到应用的首页。
如果您可以使用其他浏览器,或可以在浏览器中使用无痕模式,并且有另一个有效的 Gmail 或 Workspace 账号,则可以使用该浏览器访问您的应用页面,然后使用其他账号登录。由于该账号尚未获得授权,因此浏览器会显示“您没有访问权限”页面,而不是您的应用。
一旦应用受到 IAP 保护,它就可以使用 IAP 在所传递的 Web 请求标头中提供的身份信息。在此步骤中,该应用将获取已登录用户的电子邮件地址,以及 Google Identity 服务分配给该用户的永久性唯一身份用户 ID。该数据将在欢迎页面中显示给用户。
python39
。部署应该会在几分钟后完成。等待期间,您可以按照如下所述检查应用文件。
点击检查我的进度以验证是否完成了以下目标:
此文件夹包含的文件集与您部署的上一个应用 1-HelloWorld
相同,但有两个文件发生了改变:main.py
和 templates/index.html
。程序已改为检索 IAP 在请求标头中提供的用户信息,并且模板现在会显示这些数据。
main.py
中有两行代码用于获取 IAP 提供的身份数据:
X-Goog-Authenticated-User- 标头由 IAP 提供,并且名称不区分大小写,因此,如果您愿意,可以将它们全部小写或全部大写。render_template 语句现在包含这些值,因此应用可以显示这些信息:
index.html 模板可以通过将名称括在双花括号中来显示这些值:
如您所见,提供的数据带有 accounts.google.com
前缀,用于指出信息来源。如果需要,您的应用可以移除冒号前的所有内容(包括冒号)以获取原始值。
说回部署,一切就绪后,您会看到一条消息,提示您可以使用 gcloud app browse
查看应用。
新版应用替换之前的版本可能需要几分钟的时间,请耐心等候。如果需要,请刷新页面,直到看到与上图类似的页面。
如果 IAP 被停用或以某种方式被绕过(例如,被同一个云项目中运行的其他应用绕过),此应用会发生什么情况?我们关闭 IAP 来看看。
系统会显示警告,指出这样会允许所有用户访问该应用。
由于应用现在不受保护,用户可以发送似乎已通过 IAP 检查的 Web 请求。例如,您可以在 Cloud Shell 中运行以下 curl 命令来执行此操作(将 <your-url-here>
替换为应用的确切网址):
网页将显示在命令行上,如下所示:
应用无法知道 IAP 已被停用或绕过。对于存在潜在风险的情况,加密验证给出了解决方案。
如果存在 IAP 被关闭或绕过的风险,应用可以检查并确保收到的身份信息有效。这需要用到 IAP 添加的第三个 Web 请求标头,即 X-Goog-IAP-JWT-Assertion
。标头的值是一个以加密方式签名的对象,其中还包含用户身份数据。您的应用可以验证数字签名,并使用此对象中提供的数据来确定签名由 IAP 提供且未经篡改。
数字签名验证流程需要执行几个额外的步骤,例如检索最新的一组 Google 公钥。您可以根据有人可能能够关闭或绕过 IAP 的风险以及应用的敏感性,来决定您的应用是否需要这些额外的步骤。
python39
。部署应该会在几分钟后完成。等待期间,您可以按照如下所述检查应用文件。
点击检查我的进度以验证是否完成了以下目标:
此文件夹包含的文件集与 2-HelloUser
相同,但有两个文件发生了改变,并增加了一个新文件。新文件是 auth.py
,其中提供了 user()
方法来检索并验证以加密方式签名的身份信息。发生改变的文件是 main.py
和 templates/index.html
,它们现在会使用该方法的结果。另外,还显示了上次部署中发现的未经验证的标头以供比较。
user()
函数中:assertion
是指定的请求标头中提供的以加密方式签名的数据。代码使用一个库来验证和解码这些数据。验证功能使用 Google 提供的公钥来检查所签名的数据,并了解数据是为哪个受众群体准备的(本质上是受保护的 Google Cloud 项目)。辅助函数 keys()
和 audience()
会收集并返回这些值。
已签名对象包含我们需要的两部分数据:经过验证的电子邮件地址和唯一 ID 值(在 sub
[表示订阅方] 标准字段中提供)。
第 3 步到这里就完成了。
部署就绪后,您会看到一条消息,提示您可以使用 gcloud app browse
查看应用。
如果浏览器中没有打开新标签页,请复制所显示的链接,按常规的方法在新标签页中将其打开。
提醒一下,您之前停用了 IAP,因此应用不会提供 IAP 数据。您应该会看到如下所示的页面:
与之前一样,您可能需要等待几分钟,直到最新版本生效后才能看到页面的新版本。
由于 IAP 已停用,因此未提供用户信息。现在重新开启 IAP。
在 Cloud 控制台窗口中,点击导航菜单 > 安全 > Identity-Aware Proxy。
点击 App Engine 应用旁边的 IAP 切换开关再次开启 IAP。点击开启。
刷新页面。页面应如下所示:
请注意,验证方法所提供的电子邮件地址没有 accounts.google.com:
前缀。
如果 IAP 被关闭或绕过,则已验证数据将会缺失或无效,因为该数据不可能具有有效的签名,除非它是由 Google 私钥持有者创建的。
您部署了一个 App Engine Web 应用。首先,您限制只有所选用户具有应用的访问权限。然后,您检索并显示了 IAP 允许访问应用的用户身份,并了解了如果 IAP 被停用或绕过,这些信息可能会如何被仿冒。最后,您验证了以加密方式签名的用户身份断言,这些断言是无法仿冒的。
…可帮助您充分利用 Google Cloud 技术。我们的课程会讲解各项技能与最佳实践,可帮助您迅速上手使用并继续学习更深入的知识。我们提供从基础到高级的全方位培训,并有点播、直播和虚拟三种方式选择,让您可以按照自己的日程安排学习时间。各项认证可以帮助您核实并证明您在 Google Cloud 技术方面的技能与专业知识。
上次更新手册的时间:2024 年 4 月 15 日
上次测试实验的时间:2024 年 2 月 28 日
版权所有 2025 Google LLC 保留所有权利。Google 和 Google 徽标是 Google LLC 的商标。其他所有公司名和产品名可能是其各自相关公司的商标。
此内容目前不可用
一旦可用,我们会通过电子邮件告知您
太好了!
一旦可用,我们会通过电子邮件告知您
One lab at a time
Confirm to end all existing labs and start this one