创建文件夹

Google Cloud 文件夹可让您在资源层次结构中对项目进行分组和整理。您可以使用文件夹来委派管理职责、强制执行特定于环境的组织政策,以及简化各部门的费用管理。

作为Google Cloud 资源层次结构中的节点,文件夹可以包含组织资源下的项目、其他文件夹或两者的组合。您还可以使用文件夹对共用相同 Identity and Access Management (IAM) 角色、拒绝政策或组织政策的资源进行分组。虽然一个文件夹可以包含多个子文件夹或资源,但每个文件夹或资源只能有一个父级。

文件夹层次结构示例

在下图中,组织资源“Company”包含表示“Standard Workloads”“Regulated Workloads”和“Shared infrastructure”的文件夹。在“受监管的工作负载”下,文件夹按环境整理为“非生产环境”和“生产环境”。“生产环境”文件夹进一步整理为“面向客户(受限)”和“仅限内部(标准)”文件夹,以强制执行以政策为中心的访问权限控制。“测试项目”“开发项目”和“生产环境项目”等项目包含项目所需的资源。这样,您就可以在适当的粒度级别灵活地分配允许、拒绝或组织政策。

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

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

准备工作

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

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

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

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

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

设置管理文件夹的权限

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

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

最初,只有 Organization Admin 可以为组织资源分配 Folder Admin 角色。后续被分配此角色的账号可以将其授予其他账号。

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

控制台

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

    转到“管理资源”

  2. 如果信息面板未打开,请点击显示信息面板。
  3. 在资源表中,展开包含该文件夹的组织。
  4. 从组织下的资源列表中,选择要管理的文件夹。
  5. 在信息面板中,点击添加主账号。
  6. 在添加主账号字段中,输入您要向其授予权限的电子邮件地址。
  7. 在选择角色菜单中,选择 Resource Manager 类别,然后选择要授予的角色,例如 Folder Admin。
  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 Admin 或 Folder Creator 角色。例如,如需在组织级层创建文件夹,您必须在组织级层拥有以下角色之一。

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

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

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

控制台

如需创建文件夹,请执行以下操作:

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

    打开“管理资源”页面

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

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

  4. 在父级资源下,点击浏览,然后选择要在其下创建新文件夹的组织资源或文件夹。

    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:新文件夹的显示名称,例如“我的超棒文件夹”。
  • 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) 或 Folder Editor 角色 (roles/resourcemanager.folderEditor)。文件夹必须为空,然后才能删除。如需查看详细说明,请参阅删除文件夹。

配置对文件夹的访问权限

如需配置对文件夹的访问权限,您必须在父级拥有 Folder IAM Administrator 或 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 轮询完成情况。仅 folders create 和 folders move 命令支持 --async 标志。

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

  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. 查看操作状态。如需验证任务是否已完成,请使用 operations describe 命令以及上一步中提供的 ID。

    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'
    

后续步骤