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

您可以使用文件夹级 Identity and Access Management (IAM) 角色来管理对项目和资源组的访问权限。在允许政策中将角色绑定到主账号时,文件夹级角色可帮助您在资源层次结构中强制执行最小权限原则。

使用 Cloud Resource Manager API 创建和管理允许政策,或应用拒绝政策以明确阻止特定权限。如需设置新环境并授予初始访问权限,请按照Google Cloud 设置核对清单中的说明操作。如需管理持续访问权限,请参阅管理对项目、文件夹和组织的访问权限。

文件夹的 IAM 角色概览

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

  • 您要启用的操作类型。
  • 执行这些操作所需的角色。
  • 您需要应用这些角色的资源级别。
操作类型 所需的角色 资源层级
管理整个组织资源中的文件夹 Folder Admin 组织资源
管理文件夹及其中包含的所有项目和文件夹 Folder Admin 具体的文件夹
访问和管理文件夹的允许政策 Folder IAM Admin 具体的文件夹
创建新文件夹 文件夹创建者 新文件夹位置的父级资源
移动文件夹和项目 文件夹移动者 原始文件夹位置和新文件夹位置的父级资源
将项目移动到新文件夹 Project Editor 或 Project Owner 原始项目位置和新项目位置的父级资源
删除文件夹 Folder Editor 或 Folder Admin 具体的文件夹

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

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

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

了解文件夹角色和权限

文件夹充当组织内的管理边界,让您可以对项目进行分组并大规模应用政策。对这些文件夹的访问权限是通过从组织继承的权限以及直接在文件夹级层授予的角色共同管理的。

默认角色

创建文件夹会授予您 Folder Admin 和 Folder Editor 角色,这些角色提供完全控制权限。请参阅下表,了解这些角色提供的权限。您可以在允许政策中更改这些默认角色。

使用预定义角色

角色 权限

(roles/resourcemanager.folderAdmin)

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

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

  • 文件夹

essentialcontacts.*

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

iam.policybindings.*

  • iam.policybindings.get
  • iam.policybindings.list

orgpolicy.constraints.list

orgpolicy.policies.list

orgpolicy.policy.get

resourcemanager.capabilities.*

  • resourcemanager.capabilities.get
  • resourcemanager.capabilities.update

resourcemanager.folders.*

  • resourcemanager.folders.create
  • resourcemanager.folders.createPolicyBinding
  • resourcemanager.folders.delete
  • resourcemanager.folders.deletePolicyBinding
  • resourcemanager.folders.get
  • resourcemanager.folders.getIamPolicy
  • resourcemanager.folders.list
  • resourcemanager.folders.move
  • resourcemanager.folders.searchPolicyBindings
  • resourcemanager.folders.setIamPolicy
  • resourcemanager.folders.undelete
  • resourcemanager.folders.update
  • resourcemanager.folders.updatePolicyBinding

resourcemanager.hierarchyNodes.*

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

resourcemanager.projects.createPolicyBinding

resourcemanager.projects.deletePolicyBinding

resourcemanager.projects.get

resourcemanager.projects.getIamPolicy

resourcemanager.projects.list

resourcemanager.projects.move

resourcemanager.projects.searchPolicyBindings

resourcemanager.projects.setIamPolicy

resourcemanager.projects.updatePolicyBinding

(roles/resourcemanager.folderIamAdmin)

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

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

  • 文件夹

iam.policybindings.*

  • iam.policybindings.get
  • iam.policybindings.list

resourcemanager.folders.createPolicyBinding

resourcemanager.folders.deletePolicyBinding

resourcemanager.folders.get

resourcemanager.folders.getIamPolicy

resourcemanager.folders.searchPolicyBindings

resourcemanager.folders.setIamPolicy

resourcemanager.folders.updatePolicyBinding

(roles/resourcemanager.folderCreator)

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

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

  • 文件夹

essentialcontacts.contacts.get

essentialcontacts.contacts.list

orgpolicy.constraints.list

orgpolicy.policies.list

orgpolicy.policy.get

resourcemanager.capabilities.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.capabilities.*

  • resourcemanager.capabilities.get
  • resourcemanager.capabilities.update

resourcemanager.folders.delete

resourcemanager.folders.get

resourcemanager.folders.getIamPolicy

resourcemanager.folders.list

resourcemanager.folders.searchPolicyBindings

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.capabilities.get

resourcemanager.folders.get

resourcemanager.folders.list

resourcemanager.projects.get

resourcemanager.projects.list

创建自定义角色

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

授予角色以启用文件夹浏览

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

  • 可以使用文件夹查看者和文件夹编辑者角色授予 resourcemanager.folders.list。
  • 您可以使用 Viewer 或 Browser 角色授予 resourcemanager.projects.list。

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

授予角色以启用文件夹创建

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

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

授予角色以启用文件夹移动

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

授予角色以启用项目移动

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

这与将非组织拥有的项目移入组织资源的要求略有不同,后者要求用户必须拥有项目的 Project Editor 或 Project Owner 角色,以及组织资源的 Project Creator 角色。

授予文件夹专属角色以启用项目创建功能

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

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

  1. 在组织资源级层(例如 domain.com)向用户授予 Organization Viewer 角色。在 Google Cloud 控制台中,从页面顶部的项目和组织选择器中选择您的组织资源,或点击 IAM 页面上继承列中的网域。
  2. 创建新文件夹。
  3. 在文件夹级层将用户添加到 IAM,并向其授予文件夹查看者和项目创建者角色。

这样,用户就可以在其文件夹中创建项目,而无需向其授予对更大组织资源中每个项目的可见性。