了解 IAM 自定义角色

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

IAM 还允许您创建自定义 IAM 角色。自定义角色可帮助您实施最低权限的原则,因为它们有助于确保组织中的主帐号只能有他们需要的权限。

在下列情况下,请考虑创建自定义角色:

  • 主帐号需要某项权限,但包含该权限的每个预定义角色也包括主帐号不需要且不应具有的权限。
  • 您可以使用角色建议来使用更合适的角色授权替换过于宽松的角色授权。在某些情况下,您可能会收到创建自定义角色的建议

自定义角色不支持某些 IAM 权限。如需查看是否支持特定权限,请参阅自定义角色支持的权限级别

准备工作

基本概念

在 IAM 中,您不能直接授予权限,而应授予包含一项或多项权限的角色。IAM 中有多种角色:基本角色、预定义角色和自定义角色。

基本角色包括在引入 IAM 之前已存在的三个角色:Owner、Editor 和 Viewer。

预定义角色由 Google 创建和维护。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 权限。

在项目级创建自定义角色时,该自定义角色不能包含仅在文件夹或组织级层可用的权限。例如,您无法在项目级自定义角色中使用 resourcemanager.organizations.get 权限,因为一个项目不能包含其他项目;因此,该权限仅在文件夹或组织级层有用。

您只能在创建一个自定义角色的项目或组织中授予该角色,不能在其他项目或组织中授予该角色,也不能在其他项目或组织中的资源级别上授予该角色。

所需的权限和角色

要创建自定义角色,调用者必须拥有 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 角色。

下表列出了“组织角色管理员”角色中的权限:

角色 权限
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 角色

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

下表列出了“角色管理员”角色中的权限:

角色 权限
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

自定义角色生命周期

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

创建

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

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

不受支持或不可用的权限

您可以在自定义角色中包括多项(但不是所有)IAM 权限。每个权限都具有以下某个支持级别供在自定义角色中使用:

支持级别 说明
SUPPORTED 自定义角色中完全支持该权限。
TESTING Google 正在对该权限进行测试,以检查其与自定义角色的兼容性。您可以在自定义角色中包括该权限,但可能会看到某些意外行为。不建议用于生产用途。
NOT_SUPPORTED 自定义角色中不支持该权限。

某些权限可能对您不可见或不可用于自定义角色,即使这些权限在自定义角色中受支持也是如此。例如,如果您尚未为服务启用 API,则可能无法在自定义角色中使用某项权限。此外,如果您要创建项目级层自定义角色,则无法在角色中使用组织级层权限。

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

关联权限

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

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

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

命名角色

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

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

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

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

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

角色说明

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

测试和部署

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

我们建议您使用 ALPHABETAGA 发布阶段来传达有关角色的以下信息:

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

如需可能的发布阶段的完整列表,请参阅角色参考

如需了解如何更改角色的发布阶段,请参阅修改现有自定义角色

维护

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

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

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

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

如需了解如何更新自定义角色的权限和说明,请参阅修改现有自定义角色

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

停用自定义角色

如果您不再希望自己单位任何人使用自定义角色,则可以停用该角色。如需停用此角色,请将其发布阶段更改为 DISABLED

当某个角色被停用后,授予该角色的所有角色绑定也会随之停用,这意味着向用户授予该角色不会产生任何影响。

如需了解如何停用自定义角色,请参阅停用自定义角色

已知限制

  • 一些预定义角色包含不允许在自定义角色中使用的权限。要查看您是否可以使用自定义角色中的特定权限,请参阅自定义角色支持的权限级别
  • 只有组织层级的自定义角色才支持 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 权限并重试此操作,否则系统将不会创建自定义角色。

后续步骤