Identity and Access Management (IAM) 为大多数 Google Cloud 服务提供多个预定义角色。每个预定义角色都包含执行任务或一组相关任务所需的权限。
对于简单任务,查找适当的预定义角色通常很简单。例如,如果主账号需要查看 Cloud Storage 存储桶中的对象,则 Storage Object Viewer 角色 (roles/storage.objectViewer
) 可能是一个不错的选择。
但是,有数百个预定义角色,这很难确定要授予主账号的最合适角色。找到满足最小权限原则的角色可能也很困难,该原则指出主账号不应具有比实际所需更多的权限。
本页面将引导您完成选择最合适的预定义角色的过程:
确定必要的权限
要确定主账号所需的权限,请先列出他们需要执行的任务,以及他们将用于执行这些任务的 Google Cloud 服务。例如,主账号可能需要使用 Compute Engine 来创建虚拟机实例。
在确定任务和服务后,您可以使用一些策略来确定每个任务的必要权限:
查看 Google Cloud 服务的文档。
对于某些服务,面向任务的方法指南在“准备工作”部分或每项任务的说明中列出了每项任务所需的角色或权限。例如,请参阅 Compute Engine 导入和导出虚拟机映像的前提条件。
一些其他服务会标识有关访问权限控制的页面所需的角色和权限。例如,请参阅 Spanner Google Cloud 控制台任务所需的权限。
确定用于完成任务的 REST 或 RPC API 方法,并查看 API 参考文档以获取所需的 IAM 权限。
对于某些服务,REST 和 RPC API 文档列出了每种方法所需的权限。例如,请参阅适用于
instances.get
方法的 Compute Engine 文档。查看每项服务的权限列表,并根据您的判断查找相关权限。
在大多数情况下,每个权限的名称也说明了该权限允许您执行的操作。例如,用于创建 Compute Engine 虚拟机实例的权限名为
compute.instances.create
。为了帮助您了解每个权限名称,请记得权限名称采用
SERVICE.RESOURCE_TYPE.ACTION
格式。
通常,您无需确定每个任务所需的每项权限。相反,请专注于为每个任务确定最相关的权限。如果预定义角色包含该权限,则该权限可能还包含相关权限。
在此过程中,您还应尝试确定哪些所需权限是最强大的。通常,更强大的权限包含在较少数量的预定义角色中。因此,如果您专注于这些权限,您将拥有较短的潜在角色列表供您选择。
例如,以下类型的权限特别强大:
- 创建和删除资源的权限
- 访问诸如加密密钥或个人身份信息 (PII) 等敏感数据的权限
- 用于为资源设置允许政策或拒绝政策的权限
- 更新组织、文件夹和项目的权限,可能会导致其他资源继承更新
相比之下,以下类型的权限的功能不太强大:
- 用于列出资源的权限
- 访问非敏感数据的权限
- 更新风险有限的设置(例如 Compute Engine 虚拟机实例的最低要求 CPU 平台)的权限
查找包含权限的角色
确定所需的权限后,您可以搜索包含这些权限的预定义角色,并创建一个可能合适的角色列表。如需查找这些角色,最简单的方法是搜索权限参考文档,其中列出了所有 IAM 权限以及包含每个权限的角色。
为了遵循最小权限原则,您可能需要确定多个要授予的预定义角色,尤其是在所需权限属于多个 Google Cloud 服务的情况下。例如,如果主账号需要查看 Cloud Storage 对象和管理 Cloud SQL 数据库,则单个预定义角色不太可能包含这两项服务的适当权限。如果存在此类角色,则该角色还可能包含主账号不需要的大量不相关的权限。为了降低风险,请查找包含 Cloud Storage 所需权限的一个角色,以及包含 Cloud SQL 所需权限的其他角色。
选择最合适的角色
现在您已拥有可能合适的预定义角色列表,接下来您可以从列表中选择最合适的角色。
首先消除以下类型的角色:
对于生产环境:基本角色,包括 Owner (
roles/owner
)、Editor (roles/editor
) 和 Viewer (roles/viewer
)。基本角色具有针对所有 Google Cloud 服务的数千项权限。在生产环境中,除非没有替代角色,否则请勿授予基本角色。应授予满足您的需求的最受限的预定义角色或自定义角色。
Service Agent 角色,标题通常以“Service Agent”结尾且名称以
serviceAgent
结尾。这些角色适用于服务代理,即 Google Cloud 服务用于访问资源的特殊服务账号类型。Service Agent 角色往往包含多项服务的权限,其中可能包括您的主账号不需要访问的服务。
接下来,使用预定义角色参考文档或 Google Cloud 控制台中的角色页面列出每个角色具有的权限。检查每个角色,确定您不希望主账号拥有的权限,并消除包含不需要的权限的任何角色。
如果此过程消除了所有预定义角色,请考虑创建一个适合您用例的自定义角色。否则,请选择包含最少权限的一个或多个角色,同时仍满足您的需求。
确定授予角色的位置
授予角色时,始终会针对属于资源层次结构的特定 Google Cloud 资源授予该角色。较低级层资源(例如 Compute Engine 虚拟机实例)会继承在较高级层资源(例如项目、文件夹和组织)上授予的角色。
选择您要授予已识别的预定义角色的位置:
- 如果主账号需要访问特定较低级层的资源,请针对这些资源授予相应角色。
如果主账号需要访问项目、文件夹或组织中的多个资源,请授予项目、文件夹或组织的角色。选择满足主账号需求的最低级别资源。
此外,还请考虑使用 IAM Conditions 仅在项目、文件夹或组织内的特定资源上授予角色。
如果您确定了多个预定义角色,请考虑是否应在资源层次结构的不同层级授予这些角色。例如,如果主账号需要访问单个 Cloud SQL 数据库,但访问了许多不同的 Compute Engine 虚拟机实例,您可能希望在数据库上授予 Cloud SQL 的角色和 Compute Engine 针对项目的角色。
向主账号授予角色
现在您可以将角色授予主账号了。如需了解如何授予角色,请参阅以下内容:
授予这些角色后,您可以使用 Policy Analyzer 和 Policy Troubleshooter 来检查主账号可以访问哪些资源并排查访问权限问题。
如果主账号拥有正确资源的预期权限,但无法完成其任务,那么您可能忽略了主账号所需的权限。通过向列表添加所需的权限来迭代您之前的尝试:查找包含这些权限的角色,并选择最合适的角色。
如果您不小心授予某个角色过多的权限,则角色建议可能会建议权限较少的角色来满足主账号的需求。某些角色绑定不会获得角色建议。
后续步骤
- 了解 Policy Simulator 如何帮助您测试主账号角色的更改。
- 了解 Policy Analyzer 如何告诉您主账号对资源拥有的访问权限。
- 详细了解如何排查访问权限问题。