使用 IAM 对项目进行访问权限控制

Google Cloud Platform 提供了 Identity and Access Management (IAM) 功能,可让您以更精细的方式授予对特定 Google Cloud Platform 资源的访问权限,并防止对其他资源进行不必要的访问。IAM 允许您采用最小权限安全原则,因此您只需授予对您的资源的必要访问权限即可。

IAM 允许您通过设置 IAM 政策来控制谁(用户)哪些资源具有什么访问权限(角色)。IAM 政策可授予用户特定角色,让用户拥有特定权限。

本页面介绍可在项目级层使用的 Identity and Access Management (IAM) 角色。如需详细了解 Cloud IAM,请参阅 IAM 文档,尤其是授予、更改和撤消访问权限部分。

权限和角色

使用 Cloud IAM 后,每个 Google Cloud Platform 方法都要求发出 API 请求的帐号具有访问相应资源的适当权限。有了权限,用户便可对 Cloud 资源执行特定操作。例如,具有 resourcemanager.projects.list 权限的用户可以列出自己拥有的项目;具有 resourcemanager.projects.delete 权限的用户可以删除项目。

下表列出了调用者在调用项目 API 时必须具备的权限:

方法 所需权限
resourcemanager.projects.create() resourcemanager.projects.create
resourcemanager.projects.delete() resourcemanager.projects.delete
resourcemanager.projects.get() resourcemanager.projects.get
resourcemanager.projects.getIamPolicy() resourcemanager.projects.getIamPolicy
resourcemanager.projects.list() 不需要任何权限。该方法可列出调用者具有 resourcemanager.projects.get 权限的项目。如果您在调用 list() 时提供了过滤条件(例如 byParent),则该方法会列出您具有 resourcemanager.projects.get 权限并且满足过滤条件的项目。
resourcemanager.projects.setIamPolicy() resourcemanager.projects.setIamPolicy
resourcemanager.projects.testIamPermissions() Does not require any permission.
resourcemanager.projects.undelete() resourcemanager.projects.undelete
resourcemanager.projects.update() 如需更新项目的元数据,您需要具有 resourcemanager.projects.update 权限。如需更新项目的父级并将项目移至某个组织,您需要具有该组织的 resourcemanager.projects.create 权限。

您不直接授予用户权限,而是向其授予角色(角色自带一个或多个权限)。 这些角色被授予资源层次结构中特定资源处的特定用户。在资源上授予用户的角色也将应用于该资源的所有子级。

例如,如果您在组织资源上授予用户 Compute Admin 角色 (roles/compute.admin),则该用户将完全控制组织中每个项目中的所有 Compute Engine 资源。如果您在文件夹中授予用户该角色,则他们将只能看到该文件夹下的项目。

您可以针对同一个项目授予一个或多个角色。使用 resourcemanager.projects.getIamPolicy() 方法查看权限时,系统只会显示分配给项目本身的权限,而不会显示任何继承的权限。

使用初始角色

下表列出了可以授予访问项目权限的原始角色、角色作用说明以及该角色中捆绑的权限。除非绝对必要,否则避免使用原始角色。这些角色非常强大,并且包含了在所有 Google Cloud 服务中的大量权限。如需详细了解何时应使用原始角色,请参阅 Cloud Identity and Access Management 常见问题解答

Cloud IAM 预定义的角色更加精细,使您可以仔细管理用户有权访问的权限集。有关可以在项目级别授予的角色的列表,请参阅理解角色。创建自定义角色可以进一步增强您对用户权限的控制。

角色 说明 权限
roles/owner 对所有资源拥有完整访问权限。 所有资源的所有权限。
roles/editor 拥有所有资源的修改权限。 可以创建和更新所有资源的访问权限。
roles/viewer 拥有所有资源的读取权限。 所有资源的获取和列出权限。
roles/browserBeta 版 有权浏览项目中的资源。
  • resourcemanager.organizations.get
  • resourcemanager.projects.get
  • resourcemanager.projects.getIamPolicy
  • resourcemanager.projects.list
  • resourcemanager.projectInvites.get

创建自定义角色

除了本主题中介绍的预定义角色以外,您还可以创建自定义角色,以便根据个人需求量身定制一组权限。创建用于 Resource Manager 的自定义角色时,请注意以下几点:
  • 列出和获取权限(如 resourcemanager.projects.get/list)应始终成对授予。
  • 如果您的自定义角色包含 folders.listfolders.get 权限,则也应同时包含 projects.listprojects.get 权限。
  • 请注意,组织、文件夹和项目的 setIamPolicy 权限可让用户授予其他所有权限,因此应谨慎分配这些权限。

项目级层的访问权限控制措施

您可以使用 Google Cloud Console,Resource Manager API 和 gcloud 命令行工具,在项目级层向用户授予角色。如需了解相关说明,请参阅授予、更改和撤消项目成员的访问权限

默认角色

当您创建项目时,系统会向您授予项目的角色/所有者角色,为您提供作为创建者的完整控制权。请参阅上文,了解此角色提供的权限。您可以在 Cloud IAM 政策中按常规方式更改此默认角色。

VPC Service Controls

使用 Resource Manager API 时,VPC Service Controls 可供额外的安全保护。如需详细了解 VPC Service Controls,请参阅 VPC Service Controls 概览

如需了解将 Resource Manager 与 VPC Service Controls 结合使用时目前所存在的限制,请参阅支持的产品和限制页面。