使用 IAM 对文件夹进行访问权限控制

Google Cloud 提供 Identity and Access Management (IAM),可实现对特定 Google Cloud 资源更细化的访问权限,并防止对其他资源的不当访问。IAM 允许您采用最小权限安全原则,因此您只需授予对您的资源的必要访问权限即可。

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

本页面介绍了可在文件夹级别使用的 IAM 角色,以及如何使用 Cloud Resource Manager API 创建和管理文件夹的 IAM 政策。如需详细了解 IAM,请参阅 IAM 文档。尤其是授予、更改和撤消访问权限部分。

文件夹的 IAM 角色概览

为了帮助您配置您的 IAM 角色,下表列出了:

  • 要实现的操作类型
  • 执行这些操作所需的角色
  • 这些角色将应用于的目标资源级层
操作类型 所需的角色 资源层级
管理组织资源中的文件夹 Folder Admin 组织资源
管理文件夹及其中包含的所有项目和文件夹 文件夹管理员 具体的文件夹
访问和管理文件夹的 IAM 政策 文件夹 IAM 管理员 具体的文件夹
创建新文件夹 文件夹创建者 新文件夹位置的父级资源
移动文件夹和项目 文件夹移动者 原始文件夹位置和新文件夹位置的父级资源
将项目移动到新文件夹 项目编辑者项目所有者 原始项目位置和新项目位置的父级资源
删除文件夹 文件夹编辑者或文件夹管理员 具体的文件夹

将 IAM 角色和权限与文件夹结合使用的最佳做法

分配 IAM 角色和权限以与文件夹结合使用时,请记住以下几点:

  • 尽可能使用群组来管理主账号。
  • 尽量减少使用基本角色,如所有者、编辑者和查看者。相反,请尝试使用预定义角色,以遵循最小权限原则。
  • 对于文件夹范围内的管理,请在文件夹级层分配权限,并将项目设置为自动继承权限。例如,您可以为部门管理员群组分配文件夹的 Folder Admin 角色。 需要拥有部门级权限的网络管理员可以拥有文件夹的 Network Admin 角色。
  • 在将资源移出文件夹之前,请认真考虑哪些权限可能会发生变化。否则,您可能会影响需要对该资源拥有那些权限的现有应用或工作流。
  • 将正式版项目移动到文件夹下之前,请认真计划并测试您的资源层次结构。为了实现此目的,一种方法是在组织资源下创建一个测试文件夹,并提前创建预期层次结构的原型。
  • 在文件夹级层向用户授予角色也将针对该文件夹下的每个资源向用户授予该角色。例如,如果您在文件夹级层授予用户 Compute Admin 角色 (roles/compute.admin),则该用户将拥有该文件夹中所有项目的 Compute Engine 资源的完整访问权限。

了解文件夹角色和权限

默认角色

当您创建文件夹时,系统会为您授予文件夹的文件夹管理员文件夹编辑者角色,为您提供作为创建者的完整控制权。请参阅下文,了解这些角色提供的权限。您可以在 IAM 政策中照常更改这些默认角色。

使用预定义角色

角色 权限

(roles/resourcemanager.folderAdmin)

提供使用文件夹的所有可用权限。

您可以授予此角色的最低级层资源:

  • 文件夹

essentialcontacts.*

  • essentialcontacts.contacts.create
  • essentialcontacts.contacts.delete
  • essentialcontacts.contacts.get
  • essentialcontacts.contacts.list
  • essentialcontacts.contacts.send
  • essentialcontacts.contacts.update

orgpolicy.constraints.list

orgpolicy.policies.list

orgpolicy.policy.get

resourcemanager.folders.*

  • resourcemanager.folders.create
  • resourcemanager.folders.delete
  • resourcemanager.folders.get
  • resourcemanager.folders.getIamPolicy
  • resourcemanager.folders.list
  • resourcemanager.folders.move
  • resourcemanager.folders.setIamPolicy
  • resourcemanager.folders.undelete
  • resourcemanager.folders.update

resourcemanager.hierarchyNodes.*

  • resourcemanager.hierarchyNodes.createTagBinding
  • resourcemanager.hierarchyNodes.deleteTagBinding
  • resourcemanager.hierarchyNodes.listEffectiveTags
  • resourcemanager.hierarchyNodes.listTagBindings

resourcemanager.projects.get

resourcemanager.projects.getIamPolicy

resourcemanager.projects.list

resourcemanager.projects.move

resourcemanager.projects.setIamPolicy

(roles/resourcemanager.folderIamAdmin)

提供管理文件夹的允许政策的权限。

您可以授予此角色的最低级层资源:

  • 文件夹

resourcemanager.folders.get

resourcemanager.folders.getIamPolicy

resourcemanager.folders.setIamPolicy

(roles/resourcemanager.folderCreator)

提供浏览层次结构和创建文件夹所需的权限。

您可以授予此角色的最低级层资源:

  • 文件夹

essentialcontacts.contacts.get

essentialcontacts.contacts.list

orgpolicy.constraints.list

orgpolicy.policies.list

orgpolicy.policy.get

resourcemanager.folders.create

resourcemanager.folders.get

resourcemanager.folders.list

resourcemanager.projects.get

resourcemanager.projects.list

(roles/resourcemanager.folderEditor)

提供修改文件夹以及查看文件夹的允许政策的权限。

您可以授予此角色的最低级层资源:

  • 文件夹

essentialcontacts.contacts.get

essentialcontacts.contacts.list

orgpolicy.constraints.list

orgpolicy.policies.list

orgpolicy.policy.get

resourcemanager.folders.delete

resourcemanager.folders.get

resourcemanager.folders.getIamPolicy

resourcemanager.folders.list

resourcemanager.folders.undelete

resourcemanager.folders.update

resourcemanager.projects.get

resourcemanager.projects.list

(roles/resourcemanager.folderMover)

提供将项目和文件夹移入和移出父级组织或文件夹的权限。

您可以授予此角色的最低级层资源:

  • 文件夹

resourcemanager.folders.move

resourcemanager.projects.move

(roles/resourcemanager.folderViewer)

提供获取文件夹并列出资源下的文件夹和项目的权限。

您可以授予此角色的最低级层资源:

  • 文件夹

essentialcontacts.contacts.get

essentialcontacts.contacts.list

orgpolicy.constraints.list

orgpolicy.policies.list

orgpolicy.policy.get

resourcemanager.folders.get

resourcemanager.folders.list

resourcemanager.projects.get

resourcemanager.projects.list

创建自定义角色

除了本主题中介绍的预定义角色外,您还可以创建自定义角色,这些角色是您按需定制的权限集合。创建用于 Resource Manager 的自定义角色时,请注意以下几点:
  • 列出和获取权限(如 resourcemanager.projects.get/list)应始终成对授予。
  • 当您的自定义角色包含 folders.listfolders.get 权限时,它还应包含 projects.listprojects.get
  • 请注意,组织、文件夹和项目资源的 setIamPolicy 权限允许用户授予所有其他权限,因此应谨慎分配权限。

授予角色以允许浏览文件夹

具备列出权限的用户可以浏览文件夹。通常需要授予的两种列出权限类型是 resourcemanager.folders.list(允许用户列出资源下的文件夹)和 resourcemanager.projects.list(允许用户浏览组织资源或文件夹下的项目)。Organization Administrator 角色初始设置为拥有这两项权限。对于尚未分配 Organization Administrator 角色的用户:

  • 可通过 Folder ViewerFolder Editor 角色授予 resourcemanager.folders.list
  • 可通过 ViewerBrowser 角色授予 resourcemanager.projects.list

为了让组织资源主账号浏览整个组织资源层次结构,应在组织资源层级授予列出权限。

授予角色以允许创建文件夹

如果用户需要在层次结构的某一级层创建文件夹,那么他们必须对该级层的父资源拥有 Folder Creator 角色。 如果用户能够同时获授文件夹创建权限和浏览权限,从而便能高效地导航到层次结构中将创建文件夹的位置,很可能大有益处。如需详细了解浏览权限,请参阅上述部分

文件夹创建者不向用户授予删除文件夹的权限。但是,当用户创建文件夹时,系统会自动为其授予 Folder Editor 角色。拥有 Folder Editor 角色的用户可以删除文件夹。

授予角色以支持文件夹移动

要在父级资源之间移动文件夹,用户必须同时拥有旧父级资源和新父级资源或者拥有相同的祖先实体组的文件夹移动者角色。

授予角色以支持项目移动

要将项目移入文件夹中,用户必须拥有项目的 Project EditorProject Owner 角色,并且必须拥有源父资源和目标父级资源的 Project Mover 角色。

这与将非组织拥有的项目移动到组织资源中的要求略有不同,在这种情况下,用户必须具有项目的 Project EditorProject Owner 角色,以及组织资源的 Project Creator 角色。

授予特定于文件夹的角色以允许创建项目

要创建项目,用户必须拥有 Project Creator 角色。 但是,该角色不会授予组织级层的项目创建权限,而是会限制用户仅在特定文件夹中查看和创建项目。

要授予特定于文件夹的权限,请执行以下操作:

  1. 在组织节点层级(例如 domain.com)为用户授予组织查看者角色。
  2. 创建新文件夹。
  3. 在文件夹层级将用户添加到 IAM,并向他们授予文件夹查看者项目创建者角色。

这样,用户就可以在其文件夹中创建项目,而不会看到更大组织资源中的每个项目。