角色与权限

本页面介绍了 Identity and Access Management (IAM) 角色,这些角色是 IAM 权限的集合。

一个角色包含一组权限,可让您对Google Cloud 资源执行特定操作。如需向主账号(包括用户、群组和服务账号)提供权限,您可以向主账号授予角色。

准备工作

角色类型

IAM 中有三种角色:

  • 基本角色,可提供对 Google Cloud 资源的广泛访问权限。
  • 预定义角色,为特定服务提供精细访问权限,并由 Google Cloud管理。
  • 自定义角色:根据用户指定的权限列表提供精细访问权限。

要确定基本角色、预定义角色或自定义角色中是否包含某项权限,您可以使用以下方法之一:

角色组成部分

每个角色都包含以下组成部分:

  • 标题:人类可读的角色名称。角色名称用于识别 Google Cloud 控制台中的角色。
  • 名称:角色的标识符,采用以下格式之一:

    • 预定义角色:roles/SERVICE.IDENTIFIER
    • 项目级自定义角色:projects/PROJECT_ID/roles/IDENTIFIER
    • 组织级自定义角色:organizations/ORG_ID/roles/IDENTIFIER

    角色名称用于识别允许政策中的角色。

  • ID:角色的唯一标识符。对于基本角色和预定义角色,ID 与角色名称相同。对于自定义角色,ID 是角色名称中 roles/ 之后的所有内容。

  • 说明:人类可读的角色说明。

  • 阶段:角色在发布生命周期中所处的阶段,例如 ALPHABETAGA。如需详细了解发布阶段,请参阅测试和部署

  • 权限:角色包含的权限。有了权限,主账号便可对 Google Cloud 资源执行特定操作。当您向主账号授予角色时,主账号会获得该角色中的所有权限。

    权限采用以下格式:

    SERVICE.RESOURCE.VERB
    

    例如,拥有 compute.instances.list 权限的用户可以列出他们拥有的 Compute Engine 实例,而拥有 compute.instances.stop 权限的用户则可以停止虚拟机。

    权限通常(但不总是)与 REST 方法一一对应。也就是说,每项 Google Cloud 服务都有与其公开的每个 REST 方法相关联的权限。要调用方法,调用者需要具备关联的权限。例如,如需调用 Pub/Sub API 的 projects.topics.publish 方法,您需要拥有 pubsub.topics.publish 权限。

  • ETag:角色版本的标识符,有助于防止并发更新相互覆盖。基本角色和预定义角色始终具有 ETag AA==。每次修改角色时,自定义角色的 ETag 都会更改。

基本角色

基本角色是权限较高的角色,可授予对Google Cloud 资源的广泛访问权限。

IAM 中的基本角色包括 Admin (roles/admin)、Writer (roles/writer) 和 Reader (roles/reader)。IAM 还具有引入 IAM 之前就存在的三个旧版基本角色:Owner (roles/owner)、Editor (roles/editor) 和 Viewer (roles/viewer)。如需详细了解这些角色,请参阅本页面上的旧版基本角色

下表总结了 Admin、Writer 和 Reader 在所有 Google Cloud 服务中为正文提供的权限:

基本角色 权限
Reader (roles/reader)

有权执行不会影响状态的只读操作,例如查看(但不是修改)现有资源或数据。

如需查看 Reader 角色的权限列表,请参阅 Google Cloud 控制台中的角色详细信息:

前往 Reader 角色

Writer (roles/writer)

拥有 Reader 角色的所有权限,此外还有权执行会修改状态的操作(例如更改现有资源)。

Writer 角色的权限可让您创建和删除大多数 Google Cloud 服务的资源。但是,Writer 角色不提供对所有服务执行所有操作的权限。如需详细了解如何检查某个角色是否具有您所需的权限,请参阅本页面中的角色类型

如需查看 Writer 角色的权限列表,请参阅 Google Cloud 控制台中的角色详细信息:

前往 Writer 角色

Admin (roles/admin)

拥有 Writer 角色的所有权限,此外还有权执行以下操作:

  • 完成敏感任务,例如管理 Compute Engine 资源的标记绑定
  • 管理项目的角色和权限,以及项目中的所有资源
  • 为项目设置结算

Admin 角色不包含所有 Google Cloud 资源的所有权限。例如,它不包含修改 Cloud Billing 支付信息或创建 IAM 拒绝政策的权限。

如需查看 Admin 角色的权限列表,请参阅 Google Cloud 控制台中的角色详细信息:

前往 Admin 角色

您无法使用 Google Cloud 控制台授予 Reader、Writer 或 Admin 角色。请改用 API 或 gcloud CLI。您还可以使用 Privileged Access Manager 为这些角色创建权限。

如需查看相关说明,请参阅授予、更改和撤消访问权限

旧版基本角色

旧版基本角色在引入 IAM 之前就已存在。它们最初称为原初角色。与其他基本角色不同,您无法为旧版基本角色的角色绑定添加条件

旧版基本角色包括 Owner (roles/owner)、Editor (roles/editor) 和 Viewer (roles/viewer)。

当您向主账号授予旧版基本角色时,主账号会获得该角色中的所有权限。主账号还会获得服务为拥有旧版基本角色的主账号提供的所有权限,例如,通过 Cloud Storage 便利值BigQuery 特殊群组成员资格获得的权限。

下表总结了旧版基本角色在所有 Google Cloud 服务中授予主账号的权限:

旧版基本角色 权限
Viewer (roles/viewer)

有权执行不会影响状态的只读操作,例如查看(但不是修改)现有资源或数据。

如需查看 Viewer 角色的权限列表,请参阅 Google Cloud 控制台中的角色详细信息:

前往 Viewer 角色

Editor (roles/editor)

拥有所有 Viewer 权限,此外还有权执行会修改状态的操作(例如更改现有资源)。

Editor 角色的权限可让您创建和删除大多数 Google Cloud 服务的资源。但是,Editor 角色不提供对所有服务执行所有操作的权限。如需详细了解如何检查某个角色是否具有您所需的权限,请参阅本页面中的角色类型

如需查看 Editor 角色的权限列表,请参阅 Google Cloud 控制台中的角色详细信息:

前往 Editor 角色

Owner (roles/owner)

拥有所有 Editor 权限,此外还有权执行以下操作:

  • 完成敏感任务,例如管理 Compute Engine 资源的标记绑定
  • 管理项目的角色和权限,以及项目中的所有资源
  • 为项目设置结算

Owner 角色不包含所有 Google Cloud 资源的所有权限。例如,它不包含修改 Cloud Billing 支付信息或创建 IAM 拒绝政策的权限。

如需查看 Owner 角色的权限列表,请参阅 Google Cloud 控制台中的角色详细信息:

前往 Owner 角色

您可以使用 Google Cloud 控制台、API 和 gcloud CLI 授予旧版基本角色。但是,如需向组织外部的用户授予项目的 Owner 角色,您必须使用 Google Cloud 控制台,而不能使用 gcloud CLI。如果您的项目不属于组织,则必须使用 Google Cloud 控制台授予 Owner 角色。

如需查看相关说明,请参阅授予、更改和撤消访问权限

预定义角色

除了基本角色之外,IAM 还提供其他预定义角色,这些角色可提供对特定 Google Cloud资源的精细访问权限。这些角色由 Google 创建和维护。Google 会根据需要自动更新其权限,例如Google Cloud 添加新功能或服务时。

您可以在资源层次结构的任何级层向同一用户授予多个角色。例如,同一位用户可以拥有项目上的 Compute Network Admin 和 Logs Viewer 角色,并且对该项目中的 Pub/Sub 主题具有 Pub/Sub Publisher 角色。如需列出角色中包含的权限,请参阅获取角色元数据

如需有关选择最合适的预定义角色的帮助,请参阅选择预定义角色

如需查看预定义角色的列表,请参阅角色参考

自定义角色

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

自定义角色是用户定义的,可让您捆绑一个或多个受支持的权限以满足您的特定需求。创建自定义角色时,您必须选择要在哪个组织或者项目中创建该角色。然后,您可以在组织或项目的级别上授予该自定义角色,也可以在该组织或项目中的任何资源的级别上授予该角色。 您只能为每个组织和每个项目创建 300 个。

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

您可以通过将一个或多个受支持的 IAM 权限组合在一起来创建自定义角色。

支持的权限

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

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

组织级层自定义角色可以包含自定义角色支持的任何 IAM 权限。项目级层自定义角色可以包含任何受支持的权限,但只能在组织或文件夹级层使用的权限除外。

您无法在项目级角色中添加文件夹级权限和组织级权限的原因是,在项目级授予这些权限时,它们不会执行任何操作。这是因为 Google Cloud 中的资源按层次结构组织。权限会通过资源层次结构进行继承,这意味着权限对资源及其所有后代资源都有效。不过,在Google Cloud 资源层次结构中,组织和文件夹始终位于项目之上。因此,您将无法使用在项目级层授予的权限来访问文件夹或组织。因此,文件夹级和组织级权限(例如 resourcemanager.folders.list)对项目级自定义角色无效。

何时使用自定义角色

在大多数情况下,您应该可以使用预定义角色,而不是自定义角色。预定义角色由 Google 维护,并会在 Google Cloud中添加新权限、功能或服务时自动更新。相比之下,自定义角色并非由 Google 维护;向 Google Cloud添加新权限、功能或服务时,您的自定义角色将不会自动更新。

不过,在以下情况下,您可能需要创建自定义角色:

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

此外,请注意以下限制:

  • 自定义角色最多可以包含 3000 个权限。此外,自定义角色的名称、描述和权限名称的总大小不得超过 64 KB。
  • 您可以创建的自定义角色数量存在限制:

    • 您可以在组织中创建多达 300 个组织级自定义角色
    • 您可以在组织中的每个项目中创建最多 300 个项目级自定义角色。

关联权限

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

为确保自定义角色有效,您可以基于具有类似权限的预定义角色创建自定义角色。预定义角色是针对特定任务而设计的,并包含完成这些任务所需的所有权限。查看这些角色有助于您了解通常会一起授予哪些权限。然后,您可以使用这些信息来设计有效的自定义角色。

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

自定义角色生命周期

以下部分介绍了自定义角色生命周期各个阶段的关键注意事项。您可以根据这些信息来了解如何创建和管理自定义角色

创建

创建自定义角色时,请选择有助于您识别该角色的 ID、标题和说明:

  • 角色 ID:角色 ID 是角色的唯一标识符。此 ID 可以包含大写和小写字母数字字符、下划线和句点,且不得超过 64 字节。您无法在组织或项目中重复使用角色 ID。

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

  • 角色名称:角色名称会显示在 Google Cloud 控制台中的角色列表内。名称不必是唯一的,但我们建议您使用唯一的描述性名称,以便更好地区分您的角色。此外,请考虑在角色名称中指明角色是创建于组织级层还是项目级层。

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

  • 角色说明:角色说明是一个可选字段,您可以在此字段中提供有关角色的其他信息。例如,您可以添加角色的预期用途、创建或修改角色的日期,以及自定义角色所基于的任何预定义角色。说明长度不得超过 300 个字节,可以包含大写和小写字母数字字符及符号。

此外,在创建自定义角色时,请注意权限依赖项

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

发布

自定义角色包含发布阶段,该阶段是角色元数据的一部分。自定义角色最常见的发布阶段是 ALPHABETAGA。这些发布阶段均为参考信息;有助于您跟踪每个角色是否已准备好投入广泛使用。另一个常见的发布阶段是 DISABLED。在此发布阶段中可以停用自定义角色

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

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

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

维护

您负责维护自定义角色。这包括在用户的职责发生变化时更新角色,以及更新角色以允许用户访问需要额外权限的新功能。

如果您的自定义角色基于预定义角色,我们建议您定期检查这些预定义角色是否有权限更改。跟踪这些更改有助于您确定何时以及如何更新自定义角色。例如,您可能会注意到某个预定义角色已更新为包含使用新预览功能的权限,并决定将这些权限添加到您的自定义角色中。

为了更轻松地查看要监控的预定义角色,我们建议您在自定义角色的说明字段中列出您的自定义角色所基于的所有预定义角色。如果您使用 Google Cloud 控制台根据预定义的角色创建自定义角色,Google Cloud 控制台会自动执行此操作。

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

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

正在停用

如果您不再希望自己组织中的任何主账号使用自定义角色,则可以停用该角色。如需停用此角色,请将其发布阶段更改为 DISABLED

停用的角色仍会显示在您的 IAM 政策中,并且可以授予主账号,但不会产生任何影响。

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

后续步骤

+ 使用 Policy Troubleshooter 了解用户有权或无权访问某项资源的原因,或有权调用某个 API 的原因。