Deploy a Cloud Run service

检查我的进度

/ 20

Enable and add policy to IAP

检查我的进度

/ 30

Access User Identity Information

检查我的进度

/ 25

Use Cryptographic Verification

检查我的进度

/ 25

此实验可能会提供 AI 工具来支持您学习。

GSP499

Google Cloud 自学实验

概览

在本实验中,您将使用 Cloud Run 构建一个很小的 Web 应用,然后探索使用 Identity-Aware Proxy (IAP) 来限制对该应用的访问权限,以及向该应用提供用户身份信息的各种方法。您的应用将:

  • 显示欢迎页面。
  • 访问 IAP 提供的用户身份信息。
  • 使用加密验证来防范仿冒用户身份信息的行为。

学习内容

在本实验中,您将学习如何执行以下任务:

  • 使用 Python 编写和部署简单的 Cloud Run 服务。
  • 启用和停用 IAP 以限制对应用的访问权限。
  • 将 IAP 中的用户身份信息传递给应用。
  • 对来自 IAP 的信息进行加密验证,以防范仿冒行为。

前提条件

了解 Python 编程语言的基本知识将有助于增强您的学习体验。

本实验主要会用到 Cloud Run 和 IAP。对于不相关的概念,我们仅会略作介绍,但是会提供相应代码块供您复制和粘贴。

Identity-Aware Proxy 简介

对 Web 应用的用户进行身份验证往往很有必要,而这通常需要在应用中进行特殊编程。对于 Google Cloud 应用,您可以将这些任务交给 Identity-Aware Proxy 服务来处理。如果您只需要限制选定用户具有访问权限,则无需对应用进行任何更改。如果应用需要知道用户的身份(例如,为了在服务器端保留用户的偏好),只需编写极少的应用代码,Identity-Aware Proxy 即可提供该功能。

什么是 Identity-Aware Proxy?

Identity-Aware Proxy (IAP) 是一项 Google Cloud 服务,可拦截发送给应用的 Web 请求,使用 Google Identity 服务对发出请求的用户进行身份验证,并仅允许来自已获授权的用户的请求通过。此外,它还可以修改请求标头,在其中包含有关经过身份验证的用户的信息。

设置和要求

点击“开始实验”按钮前的注意事项

请阅读以下说明。实验是计时的,并且您无法暂停实验。计时器在您点击开始实验后即开始计时,显示 Google Cloud 资源可供您使用多长时间。

此实操实验可让您在真实的云环境中开展实验活动,免受模拟或演示环境的局限。为此,我们会向您提供新的临时凭据,您可以在该实验的规定时间内通过此凭据登录和访问 Google Cloud。

为完成此实验,您需要:

  • 能够使用标准的互联网浏览器(建议使用 Chrome 浏览器)。
注意:请使用无痕模式(推荐)或无痕浏览器窗口运行此实验。这可以避免您的个人账号与学生账号之间发生冲突,这种冲突可能导致您的个人账号产生额外费用。
  • 完成实验的时间 - 请注意,实验开始后无法暂停。
注意:请仅使用学生账号完成本实验。如果您使用其他 Google Cloud 账号,则可能会向该账号收取费用。

如何开始实验并登录 Google Cloud 控制台

  1. 点击开始实验按钮。如果该实验需要付费,系统会打开一个对话框供您选择支付方式。右侧是实验设置和访问权限面板,其中包含以下内容:

    • 打开 Google Cloud 控制台按钮
    • 您在本实验中必须使用的临时凭证(用户名和密码)
    • 帮助您逐步完成该实验所需的其他信息(如果需要)

    请注意,实验计时器位于页面顶部附近,将显示剩余时间。

  2. 点击打开 Google Cloud 控制台(如果您使用的是 Chrome 浏览器,请右键点击并选择在无痕式窗口中打开链接)。

    该实验会启动资源并打开另一个标签页,显示“登录”页面。

    提示:可以将这些标签页分别放在不同的窗口中,并排显示。

    注意:如果您看见选择账号对话框,请点击使用其他账号
  3. 如有必要,请复制下方的用户名,然后将其粘贴到登录对话框中。

    {{{user_0.username | "<用户名>"}}}

    您也可以在实验设置和访问权限面板中找到“用户名”。

  4. 点击下一步

  5. 复制下面的密码,然后将其粘贴到欢迎对话框中。

    {{{user_0.password | "<密码>"}}}

    您也可以在实验设置和访问权限面板中找到“密码”。

  6. 点击下一步

    重要提示:您必须使用实验提供的凭证。请勿使用您的 Google Cloud 账号凭证。 注意:在本实验中使用您自己的 Google Cloud 账号可能会产生额外费用。
  7. 依次点击进入后续页面:

    • 接受条款及条件。
    • 由于这是临时账号,请勿添加账号恢复选项或双重身份验证。
    • 请勿注册免费试用。

片刻之后,系统会在此标签页中打开 Google Cloud 控制台。

注意:如需访问 Google Cloud 产品和服务,请点击导航菜单,或在搜索字段中输入服务或产品的名称。 “导航菜单”图标和“搜索”字段

激活 Cloud Shell

Cloud Shell 是一种装有开发者工具的虚拟机。它提供了一个永久性的 5GB 主目录,并且在 Google Cloud 上运行。Cloud Shell 提供可用于访问您的 Google Cloud 资源的命令行工具。

  1. 点击 Google Cloud 控制台顶部的激活 Cloud Shell “激活 Cloud Shell”图标

  2. 在弹出的窗口中执行以下操作:

    • 继续完成 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 自动补全功能。

  1. (可选)您可以通过此命令列出活跃账号名称:
gcloud auth list
  1. 点击授权

输出:

ACTIVE: * ACCOUNT: {{{user_0.username | "ACCOUNT"}}} To set the active account, run: $ gcloud config set account `ACCOUNT`
  1. (可选)您可以通过此命令列出项目 ID:
gcloud config list project

输出:

[core] project = {{{project_0.project_id | "PROJECT_ID"}}} 注意:如需查看在 Google Cloud 中使用 gcloud 的完整文档,请参阅 gcloud CLI 概览指南

下载代码

点击 Cloud Shell 中的命令行区域,以便可以输入命令。

从公共存储桶中下载代码,然后切换到包含相应代码的文件夹:

gcloud storage cp gs://{{{project_0.project_id}}}-bucket/user-authentication-with-iap.zip . unzip user-authentication-with-iap.zip cd user-authentication-with-iap

对于本实验中的每个步骤,此文件夹都包含一个相应的子文件夹。您需要切换到正确的文件夹来执行相应的步骤。

任务 1. 部署应用并使用 IAP 对它加以保护

这是一个用 Python 编写的 Cloud Run 服务,可简单地显示“Hello, World”欢迎页面。我们将对它进行部署和测试,然后使用 IAP 来限制对它的访问权限。

检查应用代码

  • 从项目主文件夹切换到包含此步骤对应代码的 1-HelloWorld 子文件夹。
cd 1-HelloWorld

应用代码在 main.py 文件中。应用使用 Flask Web 框架通过模板的内容来对 Web 请求做出响应。该模板文件位于 templates/index.html。在此步骤中,它仅包含纯 HTML。第二个模板文件为 templates/privacy.html,包含示例隐私权政策架构。

另外还有一个文件 requirements.txt,其中列出了应用使用的所有非默认 Python 库。

您可以使用 cat 命令在 shell 中列出每个文件,如下所示:

cat main.py

或者,您也可以通过点击 Cloud Shell 工具栏中的打开编辑器(铅笔)图标启动 Cloud Shell 代码编辑器,然后按照上面的方法检查代码。

在这一步您无需更改任何文件。

部署到 Cloud Run

  1. 将应用部署到 Cloud Run:
gcloud run deploy user-auth-lab --source . --allow-unauthenticated --region={{{ project_0.default_region | "REGION" }}}
  1. 如果系统提示您启用 API,请输入 Y(表示“是”)。如果系统提示您创建 Artifact Registry 仓库以继续操作,请输入 Y(表示“是”)。

几分钟后,部署即会完成。您将看到一条包含服务网址的消息。

  1. 在新的浏览器标签页中打开显示的服务网址,以查看该网页。访问权限尚未受到限制。

IAP的“Hello World”标签页

点击检查我的进度以验证是否完成了以下目标: 部署 Cloud Run 服务

使用 IAP 限制访问权限

  1. 在 Google Cloud 控制台的导航菜单 (“导航菜单”图标) 中,依次点击安全 > Identity-Aware Proxy

  2. 点击启用 API

  3. 点击转到 Identity-Aware Proxy

  4. 点击 user-auth-lab 旁边的 IAP 列中的切换按钮,开启 IAP。

  5. 点击开启进行确认。

测试 IAP 是否已开启

  1. 打开一个新的浏览器标签页,然后前往应用的网址。系统会打开使用 Google 账号登录页面。

  2. 使用您用于登录控制台的学生账号凭证登录。

    系统会显示一个拒绝您访问的界面。 您已成功使用 IAP 保护您的应用,但尚未授权任何用户账号。

  3. 返回控制台中的 Identity-Aware Proxy 页面。

  4. 选中 user-auth-lab Cloud Run 服务旁边的复选框,以打开右侧的详细信息边栏。

  5. 点击添加主账号

  6. 新的主账号中,请输入您的学生邮箱。

  7. 选择角色部分,依次选择 Cloud IAP > IAP-secured Web App User

  8. 点击保存。 页面底部会显示“政策已更新”消息。

  9. 返回您的应用并重新加载页面。由于您已使用授权账号登录,因此现在应该可以看到自己的 Web 应用。

注意: 角色变更需要一段时间才会生效。如果页面仍显示“您没有访问权限”消息,请等待一段时间,然后尝试刷新页面。

点击检查我的进度以验证是否完成了以下目标: 启用政策并将其添加到 IAP

如果您仍然看到访问遭拒页面,请清除 IAP 登录 Cookie:

  1. 在服务网址末尾附加 /_gcp_iap/clear_login_cookie(例如 https://user-auth-lab-[random-hash].run.app/_gcp_iap/clear_login_cookie),然后打开该网址。
  2. 新的使用 Google 账号登录页面出现后,点击使用其他账号,然后重新输入您的学生凭证。

任务 2. 访问用户身份信息

一旦应用受到 IAP 保护,它就可以使用 IAP 在所传递的 Web 请求标头中提供的身份信息。在此步骤中,该应用将获取已登录用户的邮箱,以及 Google Identity 服务分配给该用户的永久性唯一身份用户 ID。该数据将在欢迎页面中显示给用户。

  • 在 Cloud Shell 中,切换到此步骤所对应的文件夹:
cd ~/user-authentication-with-iap/2-HelloUser

部署到 Cloud Run

  1. 将应用部署到 Cloud Run:
gcloud run deploy user-auth-lab --source . --region={{{ project_0.default_region | "REGION" }}}
  1. 如果系统提示您继续,请输入 Y(表示“是”)。

部署应该会在几分钟后完成。等待期间,您可以按照如下所述检查应用文件。

点击检查我的进度以验证是否完成了以下目标: 访问用户身份信息

检查应用文件

  1. 使用 cat 命令在 Cloud Shell 中查看主应用文件:
cat main.py
  1. 查看模板文件,了解其如何显示用户数据:
cat templates/index.html

此文件夹包含的文件集与您部署的上一个应用 1-HelloWorld 相同,但有两个文件发生了改变:main.pytemplates/index.html。程序已改为检索 IAP 在请求标头中提供的用户信息,并且模板现在会显示这些数据。

main.py 中有两行代码用于获取 IAP 提供的身份数据:

user_email = request.headers.get('X-Goog-Authenticated-User-Email') user_id = request.headers.get('X-Goog-Authenticated-User-ID')

X-Goog-Authenticated-User- 标头由 IAP 提供,并且名称不区分大小写,因此,如果您愿意,可以将它们全部小写或全部大写。render_template 语句现在包含这些值,因此应用可以显示这些信息:

page = render_template('index.html', email=user_email, id=user_id)

index.html 模板可以通过将名称括在双花括号中来显示这些值:

Hello, {{ email }}! Your persistent ID is {{ id }}.

如您所见,提供的数据带有 accounts.google.com 前缀,用于指出信息来源。如果需要,您的应用可以移除冒号前的所有内容(包括冒号)以获取原始值。

测试更新后的应用

  1. 检索应用的网址:
gcloud run services describe user-auth-lab --region={{{ project_0.default_region | "REGION" }}} --format='value(status.url)'
  1. 在新的浏览器标签页中打开该网址。
  2. 如果需要,请刷新页面,以查看显示的邮箱和永久性 ID。

关闭 IAP

如果 IAP 被停用或绕过,此应用会发生什么情况?我们关闭 IAP 来看看。

  1. 在 Cloud 控制台窗口中,依次点击导航菜单下的安全 > Identity-Aware Proxy
  2. 点击 Cloud Run 服务(例如 user-auth-lab)旁边的 IAP 切换开关,关闭 IAP
  3. 点击允许公开访问
  4. 刷新应用网页。您应该会看到相同的页面,但没有任何用户信息。

由于应用现在不受保护,用户可以发送似乎已通过 IAP 检查的 Web 请求。例如,您可以在 Cloud Shell 中运行以下 curl 命令(将 <your-url-here> 替换为应用的网址):

curl -X GET YOUR_URL -H "X-Goog-Authenticated-User-Email: totally fake email"

网页将显示在命令行上,其中会显示虚假邮件:

<!doctype html> <html> <head> <title>IAP Hello User</title> </head> <body> <h1>Hello World</h1> <p> Hello, totally fake email! Your persistent ID is None. </p> <p> This is step 2 of the User Authentication with IAP</em> codelab. </p> </body> </html>

应用无法知道 IAP 已被停用或绕过。对于存在潜在风险的情况,加密验证给出了解决方案。

任务 3. 使用加密验证

如果存在 IAP 被关闭或绕过的风险,应用可以检查并确保收到的身份信息有效。这需要用到 IAP 添加的第三个 Web 请求标头,即 X-Goog-IAP-JWT-Assertion。标头的值是一个以加密方式签名的对象,其中还包含用户身份数据。您的应用可以验证数字签名,并使用此对象中提供的数据来确定签名由 IAP 提供且未经篡改。

数字签名验证流程需要执行几个额外的步骤,例如检索最新的一组 Google 公钥。您可以根据有人可能能够关闭或绕过 IAP 的风险以及应用的敏感性,来决定您的应用是否需要这些额外的步骤。

  • 在 Cloud Shell 中,切换到此步骤所对应的文件夹:
cd ~/user-authentication-with-iap/3-HelloVerifiedUser

部署到 Cloud Run

  1. 找到受 IAP 保护的 Cloud Run 服务的签名标头 JWT 目标设备客户端 ID:

    • 前往 Cloud 控制台中的 Identity-Aware Proxy 页面。

    • 在列表中找到 user-auth-lab

    • 注意:您可能需要使用表格底部的水平滚动条向右滚动资源表格,才能显示最右侧的操作列。

    • 操作下,点击资源旁边的三个竖点按钮,然后选择获取 JWT 目标设备代码

    • 在随即显示的模态框中,将显示的客户端 ID 字符串复制并粘贴到文本编辑器中,然后选择确定

  2. 将应用部署到 Cloud Run,并使用您复制的客户端 ID 值设置 IAP_AUDIENCE 环境变量:

gcloud run deploy user-auth-lab --source . --set-env-vars IAP_AUDIENCE="YOUR_CLIENT_ID" --region={{{ project_0.default_region | "REGION" }}}
  1. 如果系统提示您继续,请输入 Y(表示“是”)。

部署应该会在几分钟后完成。等待期间,您可以按照如下所述检查应用文件。

点击检查我的进度以验证是否完成了以下目标: 使用加密验证

检查应用文件

  1. 使用 cat 命令在 Cloud Shell 中查看新的身份验证帮助程序文件:
cat auth.py
  1. 查看主应用文件,了解已验证的用户方法是如何集成的:
cat main.py

此文件夹包含的文件集与 2-HelloUser 相同,但有两个文件发生了改变,并增加了一个新文件。新文件是 auth.py,其中提供了 user() 方法来检索并验证以加密方式签名的身份信息。发生改变的文件是 main.pytemplates/index.html,它们现在会使用该方法的结果。另外,还显示了上次部署中发现的未经验证的标头以供比较。

  • 新功能主要在 user() 函数中:
def user(): assertion = request.headers.get('X-Goog-IAP-JWT-Assertion') if assertion is None: return None, None info = jwt.decode( assertion, keys(), algorithms=['ES256'], audience=audience() ) return info['email'], info['sub']

assertion 是指定的请求标头中提供的以加密方式签名的数据。代码使用一个库来验证和解码这些数据。验证功能使用 Google 提供的公钥来检查所签名的数据,并了解数据是为哪个受众群体准备的(本质上是受保护的 Google Cloud 项目)。辅助函数 keys()audience() 会收集并返回这些值。

已签名对象包含我们需要的两部分数据:经过验证的邮箱和唯一 ID 值(在 sub [表示订阅方] 标准字段中提供)。

第 3 步到这里就完成了。

测试加密验证

部署就绪后,您可以使用以下命令获取应用的网址:

gcloud run services describe user-auth-lab --region={{{ project_0.default_region | "REGION" }}} --format='value(status.url)'
  1. 在新的浏览器标签页中打开该网址。
  2. 提醒一下,您之前停用了 IAP,因此应用不会提供 IAP 数据。验证您是否看到一个页面,其中邮件和 ID 显示为
  3. 前往控制台中的 Identity-Aware Proxy 页面。
  4. 点击 Cloud Run 服务旁边的 IAP 切换开关,再次开启 IAP。
  5. 点击开启进行确认。
  6. 在 Cloud Shell 中,运行以下命令,以授予 IAP 服务代理调用 Cloud Run 服务的权限:
gcloud run services add-iam-policy-binding user-auth-lab \ --member="serviceAccount:service-$(gcloud projects describe {{{project_0.project_id}}} --format='value(projectNumber)')@gcp-sa-iap.iam.gserviceaccount.com" \ --role="roles/run.invoker" \ --region={{{ project_0.default_region | "REGION" }}}
  1. 刷新应用页面。验证以加密方式签名的邮件和用户 ID 现在是否已正确显示并经过验证!

请注意,验证方法所提供的邮箱没有 accounts.google.com: 前缀。

如果 IAP 被关闭或绕过,则已验证数据将会缺失或无效,因为该数据不可能具有有效的签名,除非它是由 Google 私钥持有者创建的。

恭喜!

您已部署 Cloud Run 服务。首先,您限制只有所选用户具有应用的访问权限。然后,您检索并显示了 IAP 允许访问应用的用户身份,并了解了如果 IAP 被停用或绕过,这些信息可能会如何被仿冒。最后,您验证了以加密方式签名的用户身份断言,这些断言是无法仿冒的。

后续步骤/了解详情

Google Cloud 培训和认证

…可帮助您充分利用 Google Cloud 技术。我们的课程会讲解各项技能与最佳实践,可帮助您迅速上手使用并继续学习更深入的知识。我们提供从基础到高级的全方位培训,并有点播、直播和虚拟三种方式选择,让您可以按照自己的日程安排学习时间。各项认证可以帮助您核实并证明您在 Google Cloud 技术方面的技能与专业知识。

上次更新手册的时间:2026 年 5 月 28 日

上次测试实验的时间:2026 年 5 月 28 日

版权所有 2026 Google LLC 保留所有权利。Google 和 Google 徽标是 Google LLC 的商标。其他所有公司名和产品名可能是其各自相关公司的商标。

准备工作

  1. 实验会创建一个 Google Cloud 项目和一些资源,供您使用限定的一段时间
  2. 实验有时间限制,并且没有暂停功能。如果您中途结束实验,则必须重新开始。
  3. 在屏幕左上角,点击开始实验即可开始

使用无痕浏览模式

  1. 复制系统为实验提供的用户名密码
  2. 在无痕浏览模式下,点击打开控制台

登录控制台

  1. 使用您的实验凭证登录。使用其他凭证可能会导致错误或产生费用。
  2. 接受条款,并跳过恢复资源页面
  3. 除非您已完成此实验或想要重新开始,否则请勿点击结束实验,因为点击后系统会清除您的工作并移除该项目

此内容目前不可用

一旦可用,我们会通过电子邮件告知您

太好了!

一旦可用,我们会通过电子邮件告知您

一次一个实验

确认结束所有现有实验并开始此实验

使用无痕浏览模式运行实验

使用无痕模式或无痕浏览器窗口是运行此实验的最佳方式。这可以避免您的个人账号与学生账号之间发生冲突,这种冲突可能导致您的个人账号产生额外费用。

完成此快速步骤即可开始实验。