检查点
Create an instance with name as lab-1 in Project 1
/ 10
Update the default zone
/ 10
Create a configuration for Username 2 and name it as user2
/ 10
Restricting Username 2 to roles/viewer in Project 2
/ 10
Create a new role with permissions for the devops team
/ 10
Check binding to roles/iam.serviceAccountUser
/ 5
Bound Username 2 to devops role
/ 5
Create an instance with name as lab-2 in Project 1
/ 5
Check the created service account
/ 5
Check the binding for the service account to roles/iam.serviceAccountUser
/ 10
Check the binding for the service account to roles/compute.instanceAdmin
/ 10
Check lab-3 has the service account attached
/ 10
使用 gcloud 配置 IAM 权限
GSP647
概览
本实验介绍了关于 IAM 和 gcloud 需要了解的三个常见方面:
- 配置 gcloud 环境
- 使用多个 gcloud 配置
- 使用服务账号
在本实验中,您将使用 gcloud
CLI 工具设置和配置 Cloud Identity and Access Management (IAM) 的命令功能。
学习内容
在本实验中,您需要完成以下操作:
- 使用
gcloud
客户端查看 IAM 角色 - 创建多个 IAM 配置并在这些配置之间切换
- 确定并分配正确的 IAM 权限
- 创建和使用服务账号
起始环境
在开始时,您有两个用户账号和两个项目:
-
user1
是两个项目的“owner” -
user2
只是第一个项目的“viewer”。
第一个项目中运行了一个 Linux 虚拟机 (vm)。
什么是 IAM?
Google Cloud 提供了 Cloud Identity and Access Management (IAM),可帮助您定义谁(身份)对什么资源具有哪种访问权限(角色),从而管理访问权限控制。
在 IAM 中,不会直接向最终用户授予资源访问权限,而是会将权限分组为多个角色,然后将这些角色授予经过身份验证的主账号。(过去,IAM 通常将主账号称为成员。部分 API 仍在使用这一术语。)
身份
在 Cloud IAM 中,您向主账号授予访问权限。主账号可以是以下任一类型:
- Google 账号
- 服务账号
- Google 群组
- Google Workspace 账号
- Cloud Identity 网域
- 所有经过身份验证的用户
- 所有用户
如需详细了解这些身份类型,请参阅与身份相关的概念指南。
在本实验中,您将会用到 Google 账号、服务账号及 Cloud Identity 网域群组。
角色
角色是一组权限的集合。您不能直接为用户分配权限,只能为其授予角色。为用户授予角色,就是将该角色包含的所有权限都授予用户。
如需详细了解角色,请参阅角色指南。
什么是 gcloud?
gcloud CLI 是 Cloud SDK 的一部分。您必须在系统上下载并安装此 SDK 并对其进行初始化,然后才能使用 gcloud 命令行工具。借助此工具,您可以通过命令行或使用脚本和其他自动化功能执行多项常见平台任务。
如需详细了解有关 gcloud 的信息,请参阅 gcloud CLI 概览指南。
设置和要求
点击“开始实验”按钮前的注意事项
请阅读以下说明。实验是计时的,并且您无法暂停实验。计时器在您点击开始实验后即开始计时,显示 Google Cloud 资源可供您使用多长时间。
此实操实验可让您在真实的云环境中开展实验活动,免受模拟或演示环境的局限。我们会为您提供新的临时凭据,让您可以在实验规定的时间内用来登录和访问 Google Cloud。
为完成此实验,您需要:
- 能够使用标准的互联网浏览器(建议使用 Chrome 浏览器)。
- 完成实验的时间 - 请注意,实验开始后无法暂停。
如何开始实验并登录 Google Cloud 控制台
-
点击开始实验按钮。如果该实验需要付费,系统会打开一个弹出式窗口供您选择付款方式。左侧是实验详细信息面板,其中包含以下各项:
- 打开 Google Cloud 控制台按钮
- 剩余时间
- 进行该实验时必须使用的临时凭据
- 帮助您逐步完成本实验所需的其他信息(如果需要)
-
点击打开 Google Cloud 控制台(如果您使用的是 Chrome 浏览器,请右键点击并选择在无痕式窗口中打开链接)。
该实验会启动资源并打开另一个标签页,显示登录页面。
提示:请将这些标签页安排在不同的窗口中,并将它们并排显示。
注意:如果您看见选择账号对话框,请点击使用其他账号。 -
如有必要,请复制下方的用户名,然后将其粘贴到登录对话框中。
{{{user_0.username | "<用户名>"}}} 您也可以在实验详细信息面板中找到用户名。
-
点击下一步。
-
复制下面的密码,然后将其粘贴到欢迎对话框中。
{{{user_0.password | "<密码>"}}} 您也可以在实验详细信息面板中找到密码。
-
点击下一步。
重要提示:您必须使用实验提供的凭据。请勿使用您的 Google Cloud 账号凭据。 注意:在本次实验中使用您自己的 Google Cloud 账号可能会产生额外费用。 -
继续在后续页面中点击以完成相应操作:
- 接受条款及条件。
- 由于该账号为临时账号,请勿添加账号恢复选项或双重验证。
- 请勿注册免费试用。
片刻之后,系统会在此标签页中打开 Google Cloud 控制台。
任务 1. 配置 gcloud 环境
本实验中已有一个名为 centos-clean 的 Compute Engine 实例,它模拟了尚未安装 gcloud
的环境。您可以通过 Google Cloud 控制台连接到此实例。
-
依次选择导航菜单 > Compute Engine > 虚拟机实例,打开计算实例列表。
-
在包含 centos-clean 计算实例的行中,点击 SSH。
- 首次测试时,通过检查
gcloud
版本来确认它已成功安装。在 SSH 会话中,运行以下命令:
创建新实例并更新默认可用区
在验证已安装 gcloud
命令行工具后,可以创建一个计算实例来进行一些更改。
- 首先,在 gcloud 中进行身份验证。在 SSH 会话中,运行以下命令:
在看到提示“Do you want to continue (Y/n)?”时,按 Enter 键。
-
点击新标签页中显示的链接。
-
点击您当前正在使用的用户名 (
),然后点击允许。 -
在看到提示在您要登录的机器上的 gcloud CLI 中输入以下验证码时,点击“复制”按钮并返回到 SSH 会话,然后将验证码粘贴到输入授权代码:提示处。
-
在 SSH 会话中,设置区域和可用区:
- 在 SSH 会话中,运行以下命令:
如果前面的设置正确无误,此命令将创建一个实例。
但实例的大小如何?存储在何处?使用了什么映像?
服务使用了很多默认设置。有些可以通过 gcloud
配置来控制。例如,可以通过可用区设置来控制实例的位置。
- 检查您当前的 gcloud 配置。在 SSH 会话中,运行以下命令:
现在,您会看到 compute
、core
和 active configuration
三个部分。它们都可以更改,但在本实验中只更改可用区。查看您创建的虚拟机所在的可用区。
- 现在,在 SSH 会话中运行以下命令,以列出可使用的所有可用区:
-
从您的可用区所属的区域中选择另一个可用区。例如,如果您当前的可用区是
us-west2-a
,则可选择us-west2-b
。 -
将您当前的可用区改为同一区域中的另一个可用区。在 SSH 会话中运行以下命令,将
ZONE
替换为所选择的可用区:
- 验证可用区更改是否完成。在 SSH 会话中,运行以下命令:
可以看到,列出的可用区反映了您所做的更改。
您可以使用 gcloud config set
命令更改其他设置。这些更改是永久性的,将写入您的主目录中。
默认配置存储在以下配置文件中:~/.config/gcloud/configurations/config_default。
创建实例时,如果要使用非默认可用区,您可以使用 --zone 开关。例如,gcloud compute instances create lab-1 --zone us-central1-f
- 验证可用区是否已写入配置文件。在 SSH 会话中,运行以下命令:
您会看到该配置已存储为文本,并且可以对其进行备份或复制。
任务 2:创建多个 IAM 配置并在这些配置之间切换
现在,您已经设置了一个账号。如果您需要在不同的团队工作,或要使用不同的账号,还可以使用 gcloud config
来进行管理。
在下一个任务中,您将学习如何再创建一个配置并在两个配置之间切换。
创建新的 IAM 配置
在本实验中,您还有另一个可以登录并使用的 Google 账号。此账号具有第一个项目的只读 (viewer) 权限。下面来为该用户创建一个新配置。
- 为第二个用户账号启动新的
gcloud
配置。在 SSH 会话中,运行以下命令:
-
选择选项 2:“Create a new configuration”。
-
在“configuration name”中,输入 user2。
-
在“Log in with a new account”中,选择选项 3:“you're logging in with the other provided user name”。
-
在看到提示“Do you want to continue (Y/n)?”时,按 Enter 键。
-
点击新标签页中显示的链接。
-
点击“Use another account”。
-
复制第二个用户账号 (
),并将其粘贴到“email or phone”提示处。 -
复制您开始进行本实验时使用的密码,并将其粘贴到“enter your password”提示处。
-
点击我了解。
-
点击允许。
以上操作表示您允许 Cloud SDK 与您的 Google 账号拥有相同的访问权限。
-
在看到提示在您要登录的机器上的 gcloud CLI 中输入以下验证码时,点击“复制”按钮并返回到 SSH 会话,然后将验证码粘贴到输入授权代码:提示处。
-
对于 Pick cloud project to use:(选择要使用的云项目:),找到当前项目 (
) 并输入其对应的项目编号。
初始化完成后,您会看到已经设置好了可用区和区域。
测试新账号
此新账号只有项目的“viewer”访问权限,因此您可以试着查看项目信息和创建一些资源,测试一下您正在使用的是否确实是该账号。
- 检查您能否查看第一个项目的详细信息。在 SSH 会话中,运行以下命令:
第二个用户账号具有 viewer 访问权限,因此您应该会看到系统列出 centos-clean
和 lab-1
实例。
- 检查您是否确实无法在第一个项目中创建实例,因为给您分配的是基本角色“viewer”。在 SSH 会话中,运行以下命令:
第二个用户账号只具有“viewer”访问权限,无权创建实例,因此上述命令会运行失败。此过程可能会花点时间。
- 切换回第一个用户配置 (default)。在 SSH 会话中,运行以下命令:
现在,您将重新使用初始用户账号凭据。在后面学习有关角色和权限的内容时,您可以在这两个账号之间进行切换。
任务 3. 确定并分配正确的 IAM 权限
在此项目中,您有两个用户账号。第一个用户账号可以完全控制两个项目,可将其视为管理员账号。而第二个用户账号只具有两个项目的“viewer”访问权限。您可以将其视为开发者用户,其用户身份代表典型的开发者级别用户。
接下来,您需要使用 gcloud
为开发者用户配置对一个项目的访问权限,具体方法是为该项目创建一个自定义角色,该角色具备创建存储桶和实例的权限。
查看角色和权限
- 如需查看所有角色,请在 SSH 会话中运行以下命令:
系统将返回角色列表。在命令中添加 grep "name:"
是为了减少返回的数据量,让系统仅返回角色的名称。
检查其中任一角色,查看分配给该角色的权限。若要查看权限,请使用 gcloud iam roles describe
命令。可以试试查看简单的角色 roles/compute.instanceAdmin。
- 查看预定义的角色
compute.instanceAdmin
。在 SSH 会话中,运行以下命令:
您会看到 roles/compute.instanceAdmin 具有多项权限,但这些只是后续操作所需的最低权限:
- compute.instances.create
- compute.instances.delete
- compute.instances.start
- compute.instances.stop
- compute.instances.update
- compute.disks.create
- compute.subnetworks.use
- compute.subnetworks.useExternalIp
- compute.instances.setMetadata
- compute.instances.setServiceAccount
如需查看角色及其权限的完整列表,请参阅 IAM 权限参考指南。
向第二个用户授予对第二个项目的访问权限
现在,您已经知道角色包含了哪些权限,那么如何向用户账号分配角色及其所有关联的权限呢?
关联角色的方式有两种:
- 与用户和组织相关联
- 与用户和项目相关联
下面,将基本角色“viewer”与第二个用户和第二个项目相关联。
测试第二个用户是否确实不具有对第二个项目的访问权限。
- 将
gcloud
配置切换回第二个用户 (user2)。在 SSH 会话中,运行以下命令:
现在,您切换回了 user2
。
- 将
PROJECTID2
设置为第二个项目。在 SSH 会话中,运行以下命令:
bashrc
文件,请谨慎使用。您会收到一则警告:WARNING: You do not appear to have access to project [your 2nd project id] or it does not exist.
(警告:您似乎没有对 [您的第二个项目的 ID] 项目的访问权限,或该项目不存在)
- 在看到提示“Do you want to continue (Y/n)?”时,输入 N 并按 Enter 键。
这意味着 user2 确实不具有对 PROJECTID2 项目的访问权限,您可以在下一部分中解决此问题。
将 viewer 角色分配给第二个项目中的第二个用户
- 切换回 default gcloud 配置,此配置允许您将访问权限授予第二个用户。在 SSH 会话中,运行以下命令:
- 安装
jq
:
下面,将 USERID2
的值设置为第二个用户的用户名,并将 viewer 角色绑定到第二个用户和第二个项目。
- 在 SSH 会话中,运行以下命令:
运行此命令后,屏幕上将出现类似如下片段的文本(可能需要向上滚动查看):
任务 4. 测试 user2 是否具有访问权限
- 将 gcloud 配置切换到 user2。在 SSH 会话中,运行以下命令:
- 将 user2 的配置改为第二个项目。在 SSH 会话中,运行以下命令:
这次应该不会看到错误消息。
- 验证您是否具有 viewer 访问权限。在 SSH 会话中,运行以下命令:
现在,您会看到此项目中有 0 个实例。
- 以第二个用户的身份,试着在第二个项目中创建一个实例。在 SSH 会话中,运行以下命令:
此命令将运行失败,因为 user2 只具有该项目的 viewer 访问权限。
- 将 gcloud 配置切换到 default。在 SSH 会话中,运行以下命令:
现在,您将重新使用初始用户账号凭据。
创建具有所需权限的新角色
下面来创建一个具有开发者团队所需权限的新角色。
- 创建名为
devops
且具有实例创建权限的自定义角色。在 SSH 会话中,运行以下命令:
此命令将在项目中创建一个名为 devops
的自定义角色,并且该角色具有创建和管理实例的权限。
系统会列出该角色的完整名称。请注意,该角色包含在项目中,因此对应的路径将采用如下模式:projects/PROJECT/roles/ROLENAME
。
将角色绑定到第二个账号和两个项目
您已经创建了角色,现在需要将用户和角色绑定到项目。使用 gcloud projects add-iam-policy-binding
命令执行绑定。为了让此命令更易于执行,可以先设置几个环境变量:项目 ID 和用户账号。
- 将
iam.serviceAccountUser
角色绑定到第二个用户和第二个项目。在 SSH 会话中,运行以下命令:
您需要相关权限才能使用关联的服务账号来创建实例。iam.serviceAccountUser
角色具有这些权限,因此您可以使用此预定义角色。
- 将自定义角色
devops
绑定到第二个用户和第二个项目。您可以在此页面的左侧找到第二个用户账号。确保您已将 USERID 设置为第二个用户账号。
在 SSH 会话中,运行以下命令:
运行此命令后,屏幕上将出现类似如下片段的文本(可能需要向上滚动查看):
测试新分配的权限。
- 将 gcloud 配置切换到 user2。在 SSH 会话中,运行以下命令:
现在,您切换回了 user2。
- 试着创建一个名为 lab-2 的实例。在 SSH 会话中,运行以下命令:
user2 现在可以创建实例了。
- 验证该实例已存在。在 SSH 会话中,运行以下命令:
您的环境
在完成上述更改后,您的环境如下:
任务 5. 使用服务账号
您已经了解如何进行身份验证,以及如何通过 gcloud
使用不同角色来访问 Google Cloud 服务。现在来看一种典型方法。
您有一个应用,它使用应用编程接口 (API) 来对 Cloud Storage 存储桶执行读写操作。您不想每次启动新服务器时都进行身份验证,这不但让人很头疼,也不符合使用云技术的初衷!所以,您可以使用服务账号。
服务账号是一种特殊的 Google 账号,它属于您的应用或虚拟机,不属于最终用户个人。您的应用使用服务账号来调用服务的 Google API,这样用户就不必直接参与其中。
如需详细了解有关服务账号的信息,请参阅服务账号指南。
下面,您需要创建一个服务账号,将该服务账号与计算实例结合使用,然后测试该账号是否允许执行必要的访问。
创建服务账号
- 将 gcloud 配置切换到 default,
user2
无权设置和配置服务账号。在 SSH 会话中,运行以下命令:
- 在配置中,将项目设置为
PROJECTID2
。在 SSH 会话中,运行以下命令:
确保您设置的是正确的项目。
- 创建服务账号。在 SSH 会话中,运行以下命令:
- 获取该服务账号的电子邮件地址。在 SSH 会话中,运行以下命令:
- 将电子邮件地址放入名为
SA
的局部变量中。在 SSH 会话中,运行以下命令:
此命令会将该 SA 局部变量设置为服务账号的电子邮件地址。是不是很实用?
- 将
iam.serviceAccountUser
角色授予此服务账号。在 SSH 会话中,运行以下命令:
此角色允许服务账号为计算实例分配服务账号。
任务 6. 将服务账号与计算实例结合使用
- 将
compute.instanceAdmin
角色授予服务账号。在 SSH 会话中,运行以下命令:
此角色允许服务账号管理计算实例。
- 使用关联的 devops 服务账号创建实例。您还可以指定访问权限范围,以限定实例可进行的 API 调用。在 SSH 会话中,运行以下命令:
访问权限范围是为实例指定权限的传统方法。访问权限范围不是安全机制,而是用于定义来自 gcloud
工具或客户端库的请求中使用的默认 OAuth 范围。在发出未通过 OAuth 进行身份验证的请求(例如 gRPC 或 SignBlob API)时,访问权限范围不起作用。
在配置要以服务账号身份运行的实例时,您必须设置访问权限范围。
最佳实践是在实例上设置完整的云平台访问权限范围,然后使用 IAM 角色安全地限制服务账号的 API 访问权限。
访问权限范围作用于单个实例。您可以在创建实例时设置访问权限范围,此访问权限范围只会在该实例的生命周期内保留。
如果您未对该服务账号所属的项目启用相关 API,那么访问权限范围将不起作用。例如,在虚拟机实例上授予 Cloud Storage 的访问权限范围后,只有对项目启用了 Cloud Storage API 时,实例才能调用 Cloud Storage API。
任务 7. 测试服务账号
- 使用
gcloud compute ssh
连接到新创建的实例。在 SSH 会话中,运行以下命令:
在系统询问您是否要继续时,按 Enter 键。
按两次 Enter 键跳过创建密码的步骤。
- 使用的默认映像中已包含
gcloud
配置。在 SSH 会话中,运行以下命令:
服务账号现在已包含在配置中
- 创建一个实例。这是为了测试您能否通过服务账号获得必要的权限:
您可以按 Enter 键为此虚拟机接受默认可用区。
- 检查关联的角色能否正常使用。在 SSH 会话中,运行以下命令:
由于服务账号具有必要的权限,您会看到系统列出相关实例。
现在您的环境如下所示:
恭喜!
您已使用 Cloud SDK 工具 gcloud
完成以下任务:
- 安装和配置 gcloud 客户端
- 创建多个 IAM 配置并在配置之间切换
- 确定并分配正确的 IAM 权限
- 创建和使用服务账号
后续步骤/了解详情
Google Cloud 培训和认证
…可帮助您充分利用 Google Cloud 技术。我们的课程会讲解各项技能与最佳实践,可帮助您迅速上手使用并继续学习更深入的知识。我们提供从基础到高级的全方位培训,并有点播、直播和虚拟三种方式选择,让您可以按照自己的日程安排学习时间。各项认证可以帮助您核实并证明您在 Google Cloud 技术方面的技能与专业知识。
上次更新手册的时间:2024 年 4 月 10 日
上次测试实验的时间:2024 年 4 月 10 日
版权所有 2024 Google LLC 保留所有权利。Google 和 Google 徽标是 Google LLC 的商标。其他所有公司名和产品名可能是其各自相关公司的商标。