了解 IAM 自定义角色

Identity and Access Management (IAM) 提供预定义角色,可让您分配对特定 Google Cloud 资源的精细访问权限,并防止对其他资源进行不必要的访问。

IAM 还提供创建自定义 IAM 角色的功能。您可以创建具有一项或多项权限的自定义 IAM 角色,然后将该自定义角色授予用户。IAM 提供用于创建和管理自定义角色的界面和 API。

本主题未提供您可以在自定义角色中包含的所有 IAM 权限的完整列表。如需查看自定义角色是否支持特定权限,请参阅自定义角色支持的权限级别

准备工作

基本概念

在 IAM 中,您不能直接授予用户权限。不过,您可以向其授予角色,角色捆绑了一项或多项权限。IAM 中有三种角色:原初角色、预定义角色和自定义角色。

原初角色包括 Owner、Editor 和 Viewer 三个角色,这些角色在 IAM 引入之前就已存在。

预定义角色由 Google 创建和维护。它们的权限会根据需要自动更新,例如向 Google Cloud 添加新功能或服务时。

自定义角色是用户定义的,可让您捆绑一个或多个受支持的权限以满足您的特定需求。自定义角色并非由 Google 维护;向 Google Cloud 添加新权限、功能或服务时,您的自定义角色将不会自动更新。

创建自定义角色时,您必须选择要在哪个组织或者项目中创建该角色。然后,您可以在组织或项目的级别上授予该自定义角色,也可以在该组织或项目中的任何资源的级别上授予该角色。

您可以通过将一个或多个可用的 IAM 权限组合在一起来创建自定义角色。有了权限,用户便可对 Google Cloud 资源执行特定操作。在 IAM 领域中,权限采用以下形式表示:

service.resource.verb

例如,拥有 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) 使用户能够查看自定义角色,但不能管理它们。如需了解如何授予这些角色,请参阅授予、更改和撤消访问权限

自定义角色界面位于 Google Cloud Console 中的“IAM 角色”下方。它仅适用于有权创建或管理自定义角色的用户。默认情况下,只有项目所有者可以创建新角色。项目所有者可以通过为同一项目上的其他人授予“IAM 角色管理员”角色来控制对此功能的访问;对于组织,只有组织管理员才能为组织授予“角色管理员”角色。

下文详细介绍了管理员角色。

Organization Role Administrator 角色

如果您的组织与您的 Google Cloud 帐号相关联,那么 Organization Role Administrator 角色可让您管理组织中的所有自定义角色。此角色只能在组织层级授予。只有组织管理员可以授予 Organization Role Administrator 角色。

下表列出了 Organization Role Administrator 角色中的权限:

角色 权限
roles/iam.organizationRoleAdmin iam.roles.create
iam.roles.delete
iam.roles.undelete
iam.roles.get
iam.roles.list
iam.roles.update
resourcemanager.projects.get
resourcemanager.projects.getIamPolicy
resourcemanager.projects.list
resourcemanager.organizations.get
resourcemanager.organizations.getIamPolicy

Role Administrator 角色

“角色管理员”角色可让您管理项目的所有自定义角色。如果您没有组织,请使用此角色。该角色只能由项目或组织所有者在项目层级授予。

下表列出了 Role Administrator 角色中的权限:

角色 权限
roles/iam.roleAdmin iam.roles.create
iam.roles.delete
iam.roles.undelete
iam.roles.get
iam.roles.list
iam.roles.update
resourcemanager.projects.get
resourcemanager.projects.getIamPolicy

自定义角色生命周期

在决定如何创建、管理自定义角色及为其建模时,会用到几个概念。

创建

在您决定创建自定义角色之前,请查看相应服务是否拥有满足您需求的预定义角色(或多个预定义角色的组合)。如需查看预定义角色的完整列表以及每个预定义角色中包含的权限,请参阅预定义角色参考

如果没有能满足您需求的预定义角色或预定义角色组合,您可以创建仅包含您需要授予的权限的自定义角色。如需了解详情,请参阅创建和管理自定义角色

不受支持或不可用的权限

某些权限可能对您不可见或不可用于自定义角色。例如,如果服务为 Beta 版,或者您尚未为该服务启用 API,则可能无法使用自定义角色中的某项权限。

要查看您是否可以使用自定义角色中的特定权限,请参阅自定义角色支持的权限级别。要查看可用于特定资源的权限,请参阅查看资源的可用权限

关联权限

某些权限仅在成对授予时才有效。例如,如需更新 IAM 政策,您必须使用读取-修改-写入模式。因此,除了 setIamPolicy 权限之外,几乎总是需要该服务和资源类型的 getIamPolicy 权限才能更新政策。

为确保自定义角色有效,您可以基于具有类似权限的预定义角色创建自定义角色。预定义角色可以帮您了解通常有哪些权限会组合使用。

要了解如何基于预定义角色创建自定义角色,请参阅创建和管理自定义角色

命名角色

每个角色都有一个 ID 和一个名称。角色 ID 是角色的唯一标识符。角色名称会显示在 Cloud Console 中的角色列表内。

在您创建角色的项目或组织中,角色 ID 必须是唯一的。这样可以确保该角色的完整 ID(包括其项目或组织)的唯一。角色 ID 最多可包含 64 个字符,并且可以包含大写和小写字母数字字符、下划线和英文句点。

角色 ID 不能更改,因此请务必谨慎选择您的角色 ID。您可以删除自定义角色,但只有在 37 天的删除过程结束之后,才能创建具有相同完整 ID 的新自定义角色。如需详细了解删除流程,请参阅删除自定义角色

自定义角色的名称不必是唯一的。因此,Cloud Console 可显示多个标题相同的自定义角色。为避免混淆,请为您的自定义角色使用唯一的描述性名称。此外,请考虑在角色名称中指明角色属于组织层级角色还是项目级层角色。

角色名称最多可以包含 100 字节,并且可以包含大写和小写字母数字字符及符号。您可以随时更改角色名称。

角色说明

考虑在修改自定义角色后更新角色说明,并同时包含该角色的修改日期及其预期用途的摘要。说明不得超过 256 个字符,且包含大写和小写字母数字字符及符号。

测试和部署

自定义角色包含发布阶段,该阶段存储在角色的 stage 属性中。发布阶段为参考信息;它有助于您跟踪每个角色是否已准备好投入广泛使用。

每个自定义角色都可以具有以下任一发布阶段:

发布阶段
ALPHA 该角色仍在开发或测试中,或者包含针对尚未公开发布的 Google Cloud 服务或功能的权限。它尚未准备好投入广泛使用。
BETA 该角色已在有限的范围内进行了测试,或包含针对未正式发布的 Google Cloud 服务或功能的权限。
GA 该角色已经过广泛测试,并且其所有权限都是针对已正式发布的 Google Cloud 服务或功能。

创建自定义角色时,请将其发布阶段设置为 ALPHA。让组织中的一些成员测试角色。确认自定义角色可正常使用后,将发布阶段改为 BETAGA

维护

工作职能和产品功能总是在不断变化。要使自定义角色保持最新状态并遵循最小权限原则,需要开展维护工作。

例如,当发布的服务获得新的 Beta 版功能时,这些 API 方法会变为公开可用,并且系统会自动将相关权限添加到相应的原初角色和预定义角色中。该服务的自定义角色不会沿用这些新的权限,因此分配给这些自定义角色的用户可能会报告他们无法访问新的测试版功能。此时,您可以选择添加它们,也可以创建一个单独的自定义角色,以便仅授予某些用户访问这些测试版功能的权限。

虽然 Google 可能会通过添加(或移除)权限来更新现有的预定义角色,但我们不会根据预定义角色修改自定义角色。自定义角色是权限的简单列表;自定义角色没有指向可能作为其依据的预定义角色的链接。

如果您的自定义角色基于任何预定义角色,我们建议您在自定义角色的说明字段中列出这些预定义角色。这样做可以让您更轻松地检查是否应根据对预定义角色的更改来更新自定义角色。Cloud Console 会在创建新的自定义角色时,自动将这些信息添加到说明中。如需了解如何更新自定义角色的说明,请参阅修改现有自定义角色

如需确定最近有哪些角色和权限发生了更改,请参阅权限更改日志

停用自定义角色

如果您不再希望组织中的人员使用此角色,请将其 role.stage 属性更改为 DEPRECATED,并视需要设置 deprecation_message,以便让用户知道应使用哪些备用角色或从何处获取更多信息。您还应该确保组织中没有任何可能仍在引用已弃用角色的政策。

如果您确定可以停用此角色,请调用 roles:UpdateRole()停用此角色

已知限制

  • 一些预定义角色包含不允许在自定义角色中使用的权限。要查看您是否可以使用自定义角色中的特定权限,请参阅自定义角色支持的权限级别
  • 只有组织层级的自定义角色才支持 resourcemanager.projects.list 权限,而项目级层自定义角色不支持此权限。当您将包含 resourcemanager.projects.list 权限的预定义角色复制到新的项目级层自定义角色时,系统将显示以下消息之一:
    • Cloud Console:系统会显示以下警告消息:“不适用于项目级层自定义角色”。系统会从已包含权限列表中自动取消选择 resourcemanager.projects.list 权限,您可以继续创建此角色。
    • Cloud SDK gcloud 命令行工具:系统会返回以下错误消息: INVALID_ARGUMENT: Permission resourcemanager.projects.list is not valid除非您先从角色定义中移除 resourcemanager.projects.list 权限并重试此操作,否则系统将不会创建自定义角色。
    • Google Cloud API:系统会返回 Permission resourcemanager.projects.list is not valid 错误消息以及 HTTP 400 错误代码和 INVALID_ARGUMENT 状态。除非您先从角色定义中移除 resourcemanager.projects.list 权限并重试此操作,否则系统将不会创建自定义角色。

后续步骤

了解如何创建自定义角色