GSP190
概览
Cloud IAM 提供了适当的工具来管理资源权限,操作简单,自动化程度高。您不能直接授予用户权限。不过,您可以向其授予角色,角色捆绑了一项或多项权限。这样,您就可以将公司中的工作职责映射至多个群组和角色。用户只会获得其工作所需资源的访问权限,并且管理员可以轻松地为整个群组的用户授予默认权限。
Cloud IAM 中有两种角色:
预定义角色 由 Google 创建和维护。它们的权限会根据需要自动更新,例如向 Google Cloud 添加新功能或服务时。
自定义角色 是用户定义的,可让您捆绑一个或多个受支持的权限以满足您的特定需求。自定义角色并非由 Google 维护;Google Cloud 中添加了新权限、功能或服务时,您的自定义角色将不会自动更新。您可以通过将一个或多个可用的 Cloud IAM 权限组合在一起来创建自定义角色。有了权限,用户便可对 Google Cloud 资源执行特定操作。
学习内容
在本实验中,您将创建、更新、删除和恢复自定义角色。
前提条件
建议您先熟悉 IAM 角色,以便更有效地学习。
设置和要求
点击“开始实验”按钮前的注意事项
请阅读以下说明。实验是计时的,并且您无法暂停实验。计时器在您点击开始实验 后即开始计时,显示 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 概览指南 。
为项目设置区域
运行以下命令,为项目设置区域:
gcloud config set compute/region {{{project_0.default_region | Region}}}
IAM 自定义角色简介
Cloud IAM 还提供创建自定义 Cloud IAM 角色的功能。您可以创建具有一项或多项权限的自定义 Cloud IAM 角色,然后将该自定义角色授予用户。Cloud IAM 提供用于创建和管理自定义角色的界面和 API。
要点 :自定义角色使您能够执行最小权限原则,并确保组织中的用户和服务账号仅具有执行其预期职能所必不可少的权限。
注意 :您可以在组织级别和项目级别创建自定义角色,但无法在文件夹级别创建自定义角色。
您可以通过将一个或多个可用的 Cloud IAM 权限组合在一起来创建自定义角色。有了权限,用户便可对 Google Cloud 资源执行特定操作。
在 Cloud IAM 领域中,权限的表示形式为:
<服务>.<资源>.<动词>
例如,拥有 compute.instances.list
权限的用户可以列出他们拥有的 Compute Engine 实例,而拥有 compute.instances.stop
权限的用户则可以停止虚拟机。
权限通常(但不总是)与 REST 方法一一对应。也就是说,每项 Google Cloud 服务都有与其公开的每个 REST 方法相关联的权限。要调用某个方法,调用者需要具备该权限。 例如,topic.publish()
的调用者需要 pubsub.topics.publish
权限。
自定义角色只能用于为自身所属的项目或组织或其下的资源授予政策中的权限。您不能将一个项目或组织中的自定义角色授予其他项目或组织拥有的资源。
必需的权限和角色
要创建自定义角色,调用者必须具有 iam.roles.create
权限。
对于不是所有者(包括组织管理员)的用户,您必须为其分配 Organization Role Administrator 角色 (roles/iam.organizationRoleAdmin) 或 IAM Role Administrator 角色 (roles/iam.roleAdmin)。IAM Security Reviewer 角色 (roles/iam.securityReviewer) 让用户能够查看自定义角色,但不能管理它们。
自定义角色界面位于 Cloud 控制台中的“IAM 角色”下方。只有有权创建或管理自定义角色的用户才可使用此界面。默认情况下,只有项目所有者可以创建新角色。项目所有者可以通过为同一项目上的其他人授予 IAM Role Administrator 角色来控制对此功能的访问权限;对于组织,只有组织管理员才能授予 Organization Role Administrator 角色。
准备创建自定义角色
在创建自定义角色之前,您应先了解:
哪些权限可应用于资源
可针对资源授予哪些角色
角色元数据是什么
任务 1. 查看可用于资源的权限
在创建自定义角色之前,您应先了解哪些权限可应用于资源。您可以使用 gcloud 命令行工具、Cloud 控制台或 IAM API,查看可应用于某个资源及其下级资源的所有权限。例如,您可以查看可应用于某组织及其中项目的所有权限。
gcloud iam list-testable-permissions //cloudresourcemanager.googleapis.com/projects/$DEVSHELL_PROJECT_ID
输出如下:
name: appengine.applications.create
stage: GA
---
name: appengine.applications.get
stage: GA
---
name: appengine.applications.update
stage: GA
---
name: appengine.instances.delete
stage: GA
---
name: appengine.instances.get
stage: GA
---
name: appengine.instances.list
stage: GA
---
customRolesSupportLevel: TESTING
name: appengine.memcache.addKey
stage: BETA
---
customRolesSupportLevel: TESTING
name: appengine.memcache.flush
stage: BETA
---
任务 2. 查看角色元数据
在创建自定义角色之前,您应先查看预定义角色和自定义角色的元数据。角色元数据包括角色 ID 和角色所含的权限。您可以使用 Cloud 控制台或 IAM API 查看元数据。
如要查看角色元数据,请使用以下命令,并在执行命令时将 [ROLE_NAME]
替换为相应的角色。例如,roles/viewer
或 roles/editor
:
gcloud iam roles describe [ROLE_NAME]
输出示例(对于 roles/viewer):
description: Read access to all custom roles in the project.
etag: AA==
includedPermissions:
- iam.roles.get
- iam.roles.list
- resourcemanager.projects.get
- resourcemanager.projects.getIamPolicy
...
...
name: roles/iam.roleViewer
stage: GA
title: Viewer
任务 3. 查看可针对资源授予的角色
使用 gcloud iam list-grantable-roles
命令返回可应用于给定资源的所有角色的列表。
执行以下 gcloud
命令以列出项目中可授予的角色:
gcloud iam list-grantable-roles //cloudresourcemanager.googleapis.com/projects/$DEVSHELL_PROJECT_ID
输出将如下所示:
---
description: Full management of App Engine apps (but not storage).
name: roles/appengine.appAdmin
title: App Engine Admin
---
description: Ability to view App Engine app status.
name: roles/appengine.appViewer
title: App Engine Viewer
---
description: Ability to view App Engine app status and deployed source code.
name: roles/appengine.codeViewer
title: App Engine Code Viewer
---
...
...
任务 4. 创建自定义角色
要创建自定义角色,调用者必须拥有 iam.roles.create
权限。默认情况下,项目或组织的所有者拥有此权限,并可创建和管理自定义角色。
对于不是所有者的用户(包括组织管理员),您必须为其分配 Organization Role Administrator 角色或 IAM Role Administrator 角色。
您可以通过以下两种方式使用 gcloud iam roles create
命令创建新的自定义角色:
提供包含角色定义的 YAML 文件
使用标志指定角色定义
创建自定义角色时,您必须使用 --organization [ORGANIZATION_ID]
或 --project [PROJECT_ID]
标志指定该角色是应用于组织级别还是项目级别。以下各示例都是在项目级别创建自定义角色。
在接下来的部分中,您将在项目级别创建自定义角色。
使用 YAML 文件创建自定义角色
创建一个包含自定义角色定义的 YAML 文件。该文件必须采用以下结构:
title: [ROLE_TITLE]
description: [ROLE_DESCRIPTION]
stage: [LAUNCH_STAGE]
includedPermissions:
- [PERMISSION_1]
- [PERMISSION_2]
每个占位值的说明如下所示:
[ROLE_TITLE]
是角色的易记名称,例如 Role Viewer 。
[ROLE_DESCRIPTION]
是角色的简短说明,例如 My custom role description 。
[LAUNCH_STAGE]
表示角色在发布生命周期中所处的阶段,例如 ALPHA、BETA 或 GA。
includedPermissions
指定要包含在自定义角色中的一个或多个权限(例如 iam.roles.get )的列表。
现在可以开始操作了!运行以下命令,创建包含角色定义的 YAML 文件:
nano role-definition.yaml
将以下自定义角色定义添加到 YAML 文件:
title: "Role Editor"
description: "Edit access for App Versions"
stage: "ALPHA"
includedPermissions:
- appengine.versions.create
- appengine.versions.delete
然后依次按 CTRL+X 键、Y 键和 ENTER 键保存并关闭此文件。
执行以下 gcloud
命令:
gcloud iam roles create editor --project $DEVSHELL_PROJECT_ID \
--file role-definition.yaml
如果成功创建了角色,系统会返回以下响应:
Created role [editor].
description: Edit access for App Versions
etag: BwVs4O4E3e4=
includedPermissions:
- appengine.versions.create
- appengine.versions.delete
name: projects/{{{project_0.project_id | Project ID}}}/roles/editor
stage: ALPHA
title: Role Editor
点击检查我的进度 ,验证已完成以下目标:
使用 YAML 文件创建自定义角色
使用标志创建自定义角色
接下来,您将使用标志来创建一个新的自定义角色。这些标志的格式与 YAML 文件类似,因此您可以轻松理解命令的构建方式。
执行以下 gcloud
命令,使用标志创建新的角色:
gcloud iam roles create viewer --project $DEVSHELL_PROJECT_ID \
--title "Role Viewer" --description "Custom role description." \
--permissions compute.instances.get,compute.instances.list --stage ALPHA
输出示例:
Created role [viewer].
description: Custom role description.
etag: BwVs4PYHqYI=
includedPermissions:
- compute.instances.get
- compute.instances.list
name: projects/{{{project_0.project_id | Project ID}}}/roles/viewer
stage: ALPHA
title: Role Viewer
点击检查我的进度 ,验证已完成以下目标:
使用标志创建自定义角色
任务 5. 列出自定义角色
执行以下 gcloud
命令以列出自定义角色,指出是项目级还是组织级自定义角色:
gcloud iam roles list --project $DEVSHELL_PROJECT_ID
输出示例:
---
description: Edit access for App Versions
etag: BwVxLgrnawQ=
name: projects/{{{project_0.project_id | Project ID}}}/roles/editor
title: Role Editor
---
description: Custom role description.
etag: BwVxLg18IQg=
name: projects/{{{project_0.project_id | Project ID}}}/roles/viewer
title: Role Viewer
此外,还可以指定 --show-deleted
标志,列出已删除的角色。
执行以下 gcloud
命令以列出预定义角色:
gcloud iam roles list
任务 6. 更新现有自定义角色
通常,我们按照以下模式更新资源的元数据(如自定义角色):先读取其当前状态,接着在本地更新数据,然后发送修改后的数据以进行写入。如果有两个或更多的独立进程同时尝试执行该序列,此模式可能会导致冲突。
例如,当项目有两位所有者同时尝试对某一角色进行有冲突的更改时,部分更改可能会失败。
Cloud IAM 利用自定义角色的 etag
属性来解决此问题。该属性用于验证自上次请求以来自定义角色是否发生了更改。当您使用 etag 值向 Cloud IAM 发出请求时,Cloud IAM 会将请求中的 etag 值与自定义角色所关联的现有 etag 值进行比较。只有在两个 etag 值匹配的情况下,它才会写入相关更改。
您可以通过下列任一方式使用 gcloud iam roles update
命令更新自定义角色:
包含已更新角色定义的 YAML 文件
指定已更新角色定义的标志
更新自定义角色时,必须使用 --organization [ORGANIZATION_ID]
或 --project [PROJECT_ID]
标志指定该角色是应用于组织级别还是项目级别。以下各示例都是在项目级别创建自定义角色。
describe
命令返回角色的定义并包含用于唯一标识当前角色版本的 etag 值。您应在更新的角色定义中提供 etag 值,以确保任何并发的角色更改都不会被覆盖。
使用 YAML 文件更新自定义角色
通过执行以下 gcloud
命令获取角色的当前定义,并在执行命令时将 [ROLE_ID]
替换为 Editor 。
gcloud iam roles describe [ROLE_ID] --project $DEVSHELL_PROJECT_ID
describe
命令返回的输出如下所示:
description: [ROLE_DESCRIPTION]
etag: [ETAG_VALUE]
includedPermissions:
- [PERMISSION_1]
- [PERMISSION_2]
name: [ROLE_ID]
stage: [LAUNCH_STAGE]
title: [ROLE_TITLE]
复制此输出内容,以便在后续步骤中用来创建新的 YAML 文件。
使用编辑器创建一个 new-role-definition.yaml
文件:
nano new-role-definition.yaml
粘贴上一个命令的输出,然后将以下两个权限添加到 includedPermissions
下:
- storage.buckets.get
- storage.buckets.list
完成后,您的 YAML 文件如下所示:
description: Edit access for App Versions
etag: BwVxIAbRq_I=
includedPermissions:
- appengine.versions.create
- appengine.versions.delete
- storage.buckets.get
- storage.buckets.list
name: projects/{{{project_0.project_id | Project ID}}}/roles/editor
stage: ALPHA
title: Role Editor
通过依次按 CTRL+X 键、Y 键和 ENTER 键保存并关闭此文件。
接下来,您将使用 update
命令来更新角色。执行以下 gcloud
命令,并在执行命令时将 [ROLE_ID]
替换为 Editor :
gcloud iam roles update [ROLE_ID] --project $DEVSHELL_PROJECT_ID \
--file new-role-definition.yaml
如果成功更新了角色,系统会返回以下响应:
description: Edit access for App Versions
etag: BwVxIBjfN3M=
includedPermissions:
- appengine.versions.create
- appengine.versions.delete
- storage.buckets.get
- storage.buckets.list
name: projects/{{{project_0.project_id | Project ID}}}/roles/editor
stage: ALPHA
title: Role Editor
点击检查我的进度 ,验证已完成以下目标:
使用 YAML 文件更新自定义角色
使用标志更新自定义角色
可使用相应标志更新角色定义的每个部分。 如需查看 SDK 参考文档中的所有可用标志的列表,请参阅 gcloud iam roles update 主题。
使用以下标志添加或移除权限:
--add-permissions
:为角色添加一个或多个以英文逗号分隔的权限。
--remove-permissions
:从角色中移除一个或多个以英文逗号分隔的权限。
或者,您只需指定新权限即可,方法是使用 --permissions [PERMISSIONS]
标志,并提供以英文逗号分隔的权限列表以替换现有权限列表。
执行以下 gcloud
命令,使用标志为 Viewer 角色添加权限:
gcloud iam roles update viewer --project $DEVSHELL_PROJECT_ID \
--add-permissions storage.buckets.get,storage.buckets.list
如果成功更新了角色,系统会返回以下响应:
description: Custom role description.
etag: BwVxLi4wTvk=
includedPermissions:
- compute.instances.get
- compute.instances.list
- storage.buckets.get
- storage.buckets.list
name: projects/{{{project_0.project_id | Project ID}}}/roles/viewer
stage: ALPHA
title: Role Viewer
点击检查我的进度 ,验证已完成以下目标:
使用标志更新自定义角色
任务 7. 停用自定义角色
当某个角色被停用后,与该角色相关的所有政策绑定也会随之停用,这意味着系统不会授予该角色所含的任何权限,即使您为某个用户授予了该角色也是如此。
停用现有自定义角色的最简单方法是使用 --stage
标志并将其设为停用。
执行以下 gcloud
命令以停用 Viewer 角色:
gcloud iam roles update viewer --project $DEVSHELL_PROJECT_ID \
--stage DISABLED
如果成功更新了角色,系统会返回以下响应:
description: Custom role description.
etag: BwVxLkIYHrQ=
includedPermissions:
- compute.instances.get
- compute.instances.list
- storage.buckets.get
- storage.buckets.list
name: projects/{{{project_0.project_id | Project ID}}}/roles/viewer
stage: DISABLED
title: Role Viewer
点击检查我的进度 ,验证已完成以下目标:
停用自定义角色
任务 8. 删除自定义角色
使用 gcloud iam roles delete
命令删除自定义角色。删除后,角色将处于无效状态,并且不能用于创建新的 IAM 政策绑定:
gcloud iam roles delete viewer --project $DEVSHELL_PROJECT_ID
输出示例:
deleted: true
description: Custom role description.
etag: BwVxLkf_epw=
includedPermissions:
- compute.instances.get
- compute.instances.list
- storage.buckets.get
- storage.buckets.list
name: projects/{{{project_0.project_id | Project ID}}}/roles/viewer
stage: DISABLED
title: Role Viewer
角色被删除后,现有绑定仍会保留,但处于非活动状态。 删除的角色可以在 7 天内恢复。 7 天后,该角色便进入永久性删除过程(持续 30 天)。37 天后,该角色 ID 可再次使用。
注意 :如果某个角色正在逐步停用,请将其 role.stage 属性更改为 DEPRECATED ,并设置“deprecation_message”,以便让用户知道应使用哪些备用角色或从何处了解更多信息。
任务 9. 恢复自定义角色
您可以在 7 天内恢复角色。已删除的角色处于停用 状态。如要使该角色再次可用,请更新 --stage
标志:
gcloud iam roles undelete viewer --project $DEVSHELL_PROJECT_ID
点击检查我的进度 ,验证已完成以下目标:
恢复删除的自定义角色
恭喜!
在本实验中,您在 IAM 中成功创建并管理了自定义角色。
后续步骤/了解详情
如需详细了解 IAM,请参阅 Cloud Identity and Access Management 这篇文章。
Google Cloud 培训和认证
…可帮助您充分利用 Google Cloud 技术。我们的课程 会讲解各项技能与最佳实践,可帮助您迅速上手使用并继续学习更深入的知识。我们提供从基础到高级的全方位培训,并有点播、直播和虚拟三种方式选择,让您可以按照自己的日程安排学习时间。各项认证 可以帮助您核实并证明您在 Google Cloud 技术方面的技能与专业知识。
上次更新手册的时间:2024 年 4 月 15 日
上次测试实验的时间:2023 年 7 月 13 日
版权所有 2025 Google LLC 保留所有权利。Google 和 Google 徽标是 Google LLC 的商标。其他所有公司名和产品名可能是其各自相关公司的商标。