创建文件夹

本页介绍如何创建 Google Cloud 文件夹,以便在资源层次结构中对项目进行分组和整理。您可以使用文件夹来委托管理职责、强制执行特定于环境的组织政策,以及简化部门间的费用管理。

文件夹是 Cloud Platform 资源层次结构中的节点。一个文件夹可以包含项目、其他文件夹或两者的组合。组织资源可以使用文件夹按照一定的层次结构对组织资源节点中的项目进行分组。例如,您的组织资源可能包含多个部门,每个部门都有自己的一组 Google Cloud 资源。借助文件夹,您可以按部门对这些资源进行分组。文件夹用于对共用相同允许或拒绝政策的资源进行分组。虽然一个文件夹可以包含多个文件夹或资源,但给定文件夹或资源只能有一个父级。

在下图中,组织资源“Company”包含代表“标准工作负载”“受监管的工作负载”和“共享基础架构”的文件夹。在“受监管的工作负载”下,文件夹按环境分为“非生产环境”和“生产环境”。“生产环境”文件夹进一步细分为“面向客户(受限)”和“仅限内部(标准)”文件夹,以强制执行以政策为中心的访问权限控制。“测试项目”“开发项目”和“生产环境项目”等项目包含项目所需的资源。这为他们提供了高度灵活性,便于在适当的精细程度时分配允许政策、拒绝政策或组织政策。

包含工作负载、环境和项目的文件夹层次结构。

您可以使用文件夹级别的允许政策和拒绝政策来控制对文件夹所含资源的访问权限。例如,如果向用户授予了针对某文件夹的 Compute Instance Admin 角色,则该用户对该文件夹中的所有项目都具有 Compute Instance Admin 角色。

准备工作

文件夹功能仅适用于拥有组织资源的 Google Workspace 和 Cloud Identity 客户。如需详细了解如何获取组织资源,请参阅获取组织资源

如果您想要了解如何充分使用文件夹,我们建议您:

  1. 查看使用 IAM 控制文件夹访问权限。该主题介绍如何控制哪些人对文件夹和及其中包含的资源具有什么访问权限。
  2. 了解如何设置文件夹权限。文件夹支持许多不同的 Identity and Access Management (IAM) 角色。如果您想要广泛设置权限,以使用户能够看到项目结构,请在组织资源级层向整个网域授予组织查看者文件夹查看者角色。要限制文件夹层次结构分支的公开范围,请针对您希望用户查看的一个或多个文件夹授予 Folder Viewer 角色。
  3. 创建文件夹。在规划如何组织云端资源时,我们建议您先将单个文件夹作为沙盒,在该文件夹中,您可以试验哪个层次结构最适合您的组织资源。根据资源和访问权限与配置政策连接点之间的隔离边界,考虑文件夹。您可以选择创建文件夹,以包含属于不同部门的资源,并针对文件夹分配管理员角色以委派管理员权限。文件夹还可用于对属于应用或不同环境的资源进行分组,如开发、生产、测试。请使用嵌套文件夹来对这些不同场景建模。

常见的场景是创建包含其他文件夹或项目的文件夹,如之前的资源层次结构所示。该结构称为文件夹层次结构。创建文件夹层次结构时,请注意以下事项:

  • 文件夹最多可以嵌套 10()层。
  • 父文件夹包含的文件夹不得超过 300 个。该限额仅表示直接子文件夹。反过来,这些子文件夹可以包含其他文件夹或项目。
  • 文件夹显示名在层次结构的同一层级内必须是唯一的。

设置文件夹管理权限

如需访问和管理文件夹,您需要向特定用户组分配特定于文件夹的 IAM 角色。如需详细了解这些角色,请参阅使用 IAM 对文件夹进行访问控制。我们还建议您查看最佳做法,以帮助您识别文件夹权限的最佳配置。

如需管理整个组织资源的文件夹,您需要拥有 Folder Admin 角色。该角色向用户授予在文件夹上创建、修改、删除、移动和更改 IAM 权限的权限,以及在文件夹之间移动项目的权限。

最初,只有组织管理员才能为组织资源分配 Folder Admin”角色。之后获得该角色的账号可向其他账号授予该角色。

如需设置文件夹权限,请按以下步骤操作:

控制台

  1. 在 Google Cloud 控制台中,打开管理资源页面。

    转到“管理资源”

  2. 如果信息面板未打开,请点击显示信息面板
  3. 资源表中,展开包含相应文件夹的组织。
  4. 从组织下的资源列表中,选择要管理的文件夹。
  5. 在信息面板中,点击添加主账号
  6. 添加主账号字段中,输入要向其授予权限的电子邮件地址。
  7. 选择角色菜单中,选择 Resource Manager 类别,然后选择要授予的角色,例如文件夹管理员
  8. 点击保存以授予新角色。

gcloud

如需使用 Google Cloud CLI 向主账号授予 Folder Admin 角色,请运行以下命令:

    gcloud organizations add-iam-policy-binding ORGANIZATION_ID \
    --member=user:USER_ID \
    --role=roles/resourcemanager.folderAdmin

REST

请求 JSON:

request_json= '{ policy: { version: "1", bindings: [ { role: "roles/folderAdmin",
members: [ "user:admin@myorganization.com", ] }, { role: "roles/folderCreator",
members: [ "user:admin@myorganization.com", ] } , { role: "roles/folderMover",
members: [ "user:admin@myorganization.com", ] } , ] } }'

Curl 请求:

curl -X POST -H "Content-Type: application/json" \
-H "Authorization: Bearer ${bearer_token}" \
-d "$request_json" \
https://cloudresourcemanager.googleapis.com/v3/ORGANIZATION_NAME:setIamPolicy

ORGANIZATION_NAME 替换为要设置允许政策的组织的名称,例如 organizations/123

创建文件夹

要创建文件夹,您必须在父级拥有 Folder AdminFolder Creator 角色。例如,要在组织级层创建文件夹,您必须在组织级层拥有这些角色之一。

作为创建文件夹的一部分,您必须为其分配一个名称。文件夹名称必须符合以下要求:

  • 名称可以包含字母、数字、空格、连字符和下划线。
  • 文件夹显示名的开头和结尾都必须是字母或数字。
  • 名称的长度必须介于 3 到 30 个字符之间。
  • 名称必须与同一父级下的所有其他文件夹不同。

如需创建文件夹,请按以下步骤操作:

控制台

您可以参阅“管理项目和文件夹”部分,在界面中创建文件夹。

  1. 前往 Google Cloud 控制台中的管理资源页面:

    打开“管理资源”页面

  2. 请务必在页面顶部的组织下拉列表中选择您的组织资源名称。

  3. 点击创建文件夹,然后选择以下选项之一:

  4. 文件夹名称框中,输入新文件夹的名称。

  5. 目标位置下,点击浏览,然后选择要在其中创建新文件夹的组织资源或文件夹。

    1. 点击创建

gcloud

您可以使用 Google Cloud CLI 以编程方式创建文件夹。

如需使用 gcloud 命令行工具在组织资源下创建文件夹,请运行以下命令。

gcloud resource-manager folders create \
   --display-name=DISPLAY_NAME \
   --organization=ORGANIZATION_ID

要创建其父级是另一个文件夹的文件夹,请运行以下命令:

gcloud resource-manager folders create \
   --display-name=DISPLAY_NAME \
   --folder=FOLDER_ID

替换以下内容:

  • DISPLAY_NAME:文件夹的显示名称。具有同一父级的两个文件夹的显示名必须不同。显示名的开头和结尾都必须是字母或数字,可以包含字母、数字、空格、连字符和下划线,不能超过 30 个字符。
  • ORGANIZATION_ID:如果父级是组织资源,则为父级组织资源的 ID。
  • FOLDER_ID:如果父级是文件夹,则为父级文件夹的 ID。

API

您可以通过 API 请求创建文件夹

请求 JSON:

request_json= '{
  display_name: DISPLAY_NAME,
  parent: ORGANIZATION_NAME
}'

创建文件夹 curl 请求:

curl -X POST -H "Content-Type: application/json" \
-H "Authorization: Bearer ${bearer_token}" \
-d "$request_json" \
https://cloudresourcemanager.googleapis.com/v3/folders

其中:

  • DISPLAY_NAME:新文件夹的显示名,例如“My Awesome Folder”。
  • ORGANIZATION_NAME:您要在其中创建文件夹的组织资源的名称,例如 organizations/123

创建文件夹响应:

如果调用成功注册了操作,响应正文将包含一个 Operation 实例。

{
  "name": "operations/fc.123456789",
  "metadata": {
    "@type": "type.googleapis.com/google.cloud.resourcemanager.v3.FolderOperation",
    "displayName": "DISPLAY_NAME",
    "operationType": "CREATE"
  }
}

获取操作 curl 请求:

curl -H "Authorization: Bearer ${bearer_token}" \
https://cloudresourcemanager.googleapis.com/v3/operations/fc.123456789

获取操作响应:

{
  "name": "operations/fc.123456789",
  "metadata": {
    "@type": "type.googleapis.com/google.cloud.resourcemanager.v3.FolderOperation",
    "displayName": "DISPLAY_NAME",
    "operationType": "CREATE"
  },
  "done": true,
  "response": {
    "@type": "type.googleapis.com/google.cloud.resourcemanager.v3.Folder",
    "name": "folders/12345",
    "parent": "organizations/123",
    "displayName": "DISPLAY_NAME",
    "lifecycleState": "ACTIVE",
    "createTime": "2017-07-19T23:29:26.018Z",
    "updateTime": "2017-07-19T23:29:26.046Z"
  }
}

在创建文件夹期间添加标记

标记提供了一种为资源创建注解的方法。您可以在创建文件夹时添加标记。为此,您必须授予标记用户角色。如需详细了解此角色包含的权限,请参阅创建和管理标记。 您只能通过以下方式之一为标记键值对添加命名空间:

gcloud

如需在创建文件夹期间添加标记,请运行以下命令:

  gcloud resource-manager folders create \
      --display-name=DISPLAY_NAME \
      --organization=ORGANIZATION_ID\
      --tags=KEY_VALUE_PAIRS

替换以下内容:

  • DISPLAY_NAME:文件夹的显示名称。
  • ORGANIZATION_ID:父组织资源的唯一标识符。
  • KEY_VALUE_PAIRS:您可以分配给资源的键值对的逗号分隔列表。以逗号分隔的键值对的示例如下:123/environment=production, 456/create=testresource

REST

以下代码段是一个 JSON 请求,用于创建文件夹并向其中添加标记。

  POST https://cloudresourcemanager.googleapis.com/v3/folders/
  Authorization: *************
  Content-Type: application/json

  {
    "display_name": "our-folder-456",
    "parent": "organizations/123",
    "tags": {
      "123/environment": "production",
      "123/costCenter": "marketing"
    }
  }

检索文件夹 ID

您可以使用 Google Cloud 控制台或 Google Cloud CLI 检索文件夹的 ID。

控制台

  1. 在 Google Cloud 控制台中,打开管理资源页面。
  2. 在资源列表中找到您的文件夹。文件夹 ID 显示在文件夹显示名称旁边的 ID 列中。

gcloud

如需查找文件夹 ID,请运行以下命令:

gcloud resource-manager folders list --organization=ORGANIZATION_ID

传播延迟

创建新文件夹后,该文件夹可能需要一段时间才能通过我们的全球系统传播,并在 Google Cloud 控制台中显示。此传播延迟通常会在几分钟内解决,但在极少数情况下可能需要更长时间。您可以使用 gcloud 命令行工具或 API 立即验证文件夹的创建情况。

删除文件夹

如需删除文件夹,您必须拥有 Folder Admin 角色 (roles/resourcemanager.folderAdmin) 或文件夹编辑者角色 (roles/resourcemanager.folderEditor)。文件夹必须为空,然后才能删除。如需查看详细说明,请参阅删除文件夹

配置对文件夹的访问权限

如需配置对文件夹的访问权限,您必须在父级拥有文件夹 IAM 管理员Folder Admin角色。

控制台

  1. 在 Google Cloud 控制台中,打开管理资源页面。

    打开“管理资源”页面

  2. 点击左上角的组织下拉列表,然后选择您的组织资源。

  3. 选择要为其更改权限的项目旁边的复选框。

    1. 在右侧信息面板权限下方,输入要添加的成员的电子邮件地址。

    2. 选择角色下拉列表中,选择要为这些成员授予的角色。

    3. 点击添加。此时将显示一条通知,确认添加或更新成员的新角色。

gcloud

您可以使用 Google Cloud CLI 或 REST API 以编程方式配置对文件夹的访问权限。

gcloud resource-manager folders \
    add-iam-policy-binding FOLDER_ID \
    --member=user:email1@example.com \
    --role=roles/resourcemanager.folderEditor
gcloud resource-manager folders \
    add-iam-policy-binding FOLDER_ID \
    --member=user:email1@example.com \
    --role=roles/resourcemanager.folderViewer

或者:

gcloud resource-manager folders \
    set-iam-policy FOLDER_ID POLICY_FILE

替换以下内容:

  • FOLDER_ID:新文件夹的 ID
  • POLICY_FILE:相应文件夹的政策文件的路径

API

setIamPolicy 方法用于设置文件夹的访问权限控制政策,以替换任何现有政策。resource 字段应该是文件夹的资源名称,例如 folders/1234

 request_json= '{
   policy: {
     version: "1",
     bindings: [
       {
         role: "roles/resourcemanager.folderEditor",
         members: [
           "user:email1@example.com",
           "user:email2@example.com",
         ]
       }
     ]
   }
 }'

Curl 请求:

   curl -X POST -H "Content-Type: application/json" \
   -H "Authorization: Bearer ${bearer_token}" \
   -d "$request_json" \
   https://cloudresourcemanager.googleapis.com/v3/FOLDER_ID:setIamPolicy

FOLDER_ID 替换为正在设置的 IAM 政策所属的文件夹的名称,例如 folders/123。

处理长时间运行的操作

某些文件夹操作(例如创建或迁移)由 Google Cloud 异步处理,因为它们需要全局传播。为避免阻塞终端或自动化脚本,您可以使用 --async 标志。

使用此标志后,命令会立即返回一个长时间运行的操作 (LRO) 对象。然后,您可以随时使用 operation_id 轮询完成情况。--async 标志仅适用于 folders createfolders move 命令。

如需使用该标志,请按以下步骤操作:

  1. 启动异步任务。请参阅以下示例命令:

    gcloud resource-manager folders create \
        --display-name="Test Async Folder" \
        --organization=2518 \
        --async
    

    输出会提供操作名称(例如 fc.8572)并显示 done: false

    示例响应:

    name: operations/fc.8572
    metadata:
    operation_type: CREATE
    display_name: Awe-Inspiring Async Folder
    destination_parent: organizations/2518
    done: false
    
  2. 查看操作状态。如需验证任务是否已完成,请使用上一步中提供的 ID 运行 operations describe 命令。

    gcloud beta resource-manager operations describe fc.8572
    

    一旦 done 为 true,响应块将包含新创建的资源的完整详细信息。

    name: operations/fc.8572
    done: true
    response:
      name: folders/6428
      display_name: Awe-Inspiring Async Folder
      lifecycle_state: ACTIVE
      create_time: '2024-03-20T10:00:00Z'
    

后续步骤