管理文件夹中的项目

本页面介绍如何通过在文件夹中嵌套项目来整理 Google Cloud 层次结构 。

概览

在 Google Cloud 资源层次结构中,项目是资源的核心组织和结算单元。它们位于文件夹(或组织资源)与底层资源(例如虚拟机实例和存储分区)之间。

虽然文件夹是一种可选的分组机制,但在文件夹中整理项目具有以下几个主要优势:

  • 可扩缩的治理:通过基于层次结构的继承,自动将 Identity and Access Management (IAM) 政策和安全限制应用于多个项目。

  • 业务对齐:构建云环境,以反映组织的部门、成本中心或开发生命周期(例如开发、预演和生产)。

  • 委托管理:授予特定团队自主管理自己的项目和子文件夹的权限,而无需在组织级层授予广泛的权限。

  • 费用可见性:将相关项目分组,以简化支出跟踪并增强特定业务单位或应用的结算分析。

  • 安全隔离:建立明确的信任边界,以限制配置更改的影响范围,并降低不同环境中的安全风险。

在文件夹中创建项目

如需在文件夹中创建项目,您必须拥有该文件夹的 Project Creator 角色 (roles/resourcemanager.projectCreator)。该角色可从父文件夹继承。

控制台

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

    打开 Google Cloud 控制台

  2. 前往管理资源 页面。
  3. 从页面左上角的组织 下拉列表中选择您的组织资源。
  4. 点击创建项目
  5. 输入项目名称
  6. 目标位置框中,点击浏览以选择要在其中创建项目的文件夹。
  7. 点击创建

gcloud

  gcloud projects create PROJECT_ID --folder FOLDER_ID

替换以下内容:

  • PROJECT_ID:要创建的项目 ID 的 ID
  • FOLDER_ID:应在其中创建项目的文件夹的 ID。

REST

请求 JSON:

   request_json= '{
      name: DISPLAY_NAME, projectId: PROJECT_ID, parent: {id: PARENT_ID, type: PARENT_TYPE}
   }'

Curl 请求:

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

替换以下内容:

  • PROJECT_ID:要创建的项目的唯一标识符。例如,my-awesome-proj-123
  • DISPLAY_NAME:要创建的项目的显示名称。
  • PARENT_ID:要在其下创建的父级的唯一标识符。例如,123
  • PARENT_TYPE:父级的类型,例如 folderorganization

请勿在文件夹名称或其他资源名称中添加敏感信息。 对文件夹或相关资源的任何引用都会公开文件夹名称和资源名称。

将项目移动到文件夹

在将项目移入或移出文件夹之前,您必须仔细考虑任何政策影响。您在项目级层定义的允许政策会随项目一起移动,但继承自父资源的政策不会移动。

移动项目时,直接附加的所有 Identity and Access Management 政策或组织政策都将与该项目一起移动。不过,资源层次结构中的项目也会受到它从父资源继承的政策影响。如果项目继承了为用户提供特定服务使用权的 IAM 角色,则用户在目标位置无权访问该服务,除非项目也将在目标位置继承权限。

例如,假设某服务帐号在文件夹 A 中将 Storage Object Creator 角色绑定到某用户。该服务帐号有权将数据上传到文件夹 A 中任何项目中的 Cloud Storage。如果您移动了其中一个项目,而文件夹 B 没有相同的继承权限,则该项目的服务帐号将无法上传数据,从而导致服务中断。

如果组织政策在源文件夹和目标文件夹中定义,则这些注意事项也适用。与 IAM 政策一样,组织政策是继承的。因此,您必须确保源文件夹和目标文件夹之间的组织政策一致。

如需详细了解组织政策,请参阅组织政策服务简介

要移动项目,您需要拥有源文件夹和目标文件夹的 Project Mover IAM 角色 (roles/resourcemanager.projectMover)。如果资源不在文件夹中,则您需要拥有组织资源的此角色。

这些角色授予您以下所需权限:

  • 针对项目的 resourcemanager.projects.update
  • 如果资源位于文件夹中 :针对源文件夹和目的地的 resourcemanager.projects.move
  • 如果资源不在文件夹中 :针对组织资源的 resourcemanager.projects.move

您还可以通过自定义 角色或其他预定义角色获取这些权限。

控制台

如需移动项目,请执行以下操作:

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

    转到“管理资源”

  2. 从页面左上角的组织 下拉列表中选择您的组织。

  3. 点击项目所在行,从资源列表中选择您的项目。请注意,您 不得 点击项目名称,否则系统会将您带到项目的 Identity and Access Management (IAM) 页面。

  4. 点击行中的选项菜单(垂直省略号),然后点击移动

  5. 点击浏览 ,选择项目的目标移动文件夹。

  6. 点击移动

gcloud

如需移动项目,请运行 gcloud beta projects move 命令:

gcloud beta projects move PROJECT_ID \
   --DESTINATION_TYPE DESTINATION_ID

替换以下内容:

  • PROJECT_ID:要移动的项目的 ID 或编号。
  • DESTINATION_TYPE:目标的类型,即 organizationfolder
  • DESTINATION_ID:要将项目移动到的组织资源或文件夹的 ID。

REST

您可以使用 v3 projects.move 方法 移动项目。

请求:

POST https://cloudresourcemanager.googleapis.com/v3/{name=PROJECT_NAME}:move
{
  "destinationParent": DESTINATION_PARENT
}

替换以下内容:

  • PROJECT_NAME:要更新的项目的名称。例如,projects/415104041262

  • DESTINATION_PARENT:要将项目移动到的新父级组织资源或文件夹。例如: organizations/12345678901

如果成功,请求将返回一个 操作,可用于跟踪项目移动。

将文件夹移动到另一个文件夹

如要将一个文件夹移动到另一个文件夹,则源文件夹和目标文件夹都必须具有 resourcemanager.folders.move 权限。

控制台

在控制台中,将文件夹移动到其他文件夹的过程与移动项目类似。

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

    打开 Google Cloud 控制台

  2. 从页面左上角的组织 下拉列表中选择您的组织资源。
  3. 点击文件夹所在行,从项目和文件夹列表中选择文件夹。
  4. 点击行中的选项菜单(垂直省略号),然后点击移动
  5. 点击浏览 ,选择文件夹的目标移动文件夹。
  6. 点击移动

gcloud

如需在组织资源下移动文件夹,请运行以下命令:

gcloud resource-manager folders move FOLDER_ID \
    --organization=PARENT_ID

替换以下内容:

  • FOLDER_ID:要移动的文件夹的 ID
  • PARENT_ID:父级组织资源的 ID

如需将文件夹移动到另一个文件夹,请运行以下命令:

gcloud resource-manager folders move FOLDER_ID \
    --folder=PARENT_ID

替换以下内容:

  • FOLDER_ID:要移动的文件夹的 ID
  • PARENT_ID:父文件夹的 ID

REST

请求 JSON:

request_json= '{
   destinationParent: "folders/DESTINATION_FOLDER_ID"
}'

移动文件夹 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:move

替换以下内容:

  • DESTINATION_FOLDER_ID:您要在其下 移动另一个文件夹的文件夹的 ID,例如 98765
  • DISPLAY_NAME:所移动文件夹的显示名称,例如 “My Awesome Folder。”

移动文件夹响应:

{
  "name": "operations/fm.1234567890",
  "metadata": {
    "@type": "type.googleapis.com/google.cloud.resourcemanager.v3.FolderOperation",
    "displayName": "DISPLAY_NAME",
    "operationType": "MOVE"
  }
}

获取操作 curl 请求:

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

获取操作响应:

{
  "name": "operations/fm.1234567890",
  "metadata": {
    "@type": "type.googleapis.com/google.cloud.resourcemanager.v3.FolderOperation",
    "displayName": "DISPLAY_NAME",
    "operationType": "MOVE"
  },
  "done": true,
  "response": {
    "@type": "type.googleapis.com/google.cloud.resourcemanager.v3.Folder",
    "name": "folders/12345",
    "parent": "folders/98765",
    "displayName": "DISPLAY_NAME",
    "lifecycleState": "ACTIVE",
    "createTime": "2017-07-19T23:29:26.018Z",
    "updateTime": "2017-07-20T00:54:44.295Z"
  }
}

查看或列出文件夹中的项目

如需查看或列出直接属于文件夹子项的项目,您必须拥有该文件夹的 Folder Viewer 角色 (roles/resourcemanager.folderViewer) 或 Browser 角色 (roles/browser)。

控制台

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

    打开“管理资源”页面

  2. 组织 下拉列表中,选择您的组织。

  3. 在资源列表中,点击文件夹的名称以展开该文件夹并查看其项目。

    可选:使用列表顶部的过滤条件 栏,按名称或 ID 搜索特定项目。

gcloud

如需列出直接属于特定文件夹子项的所有项目,请使用带有过滤条件的 gcloud projects list 命令:

gcloud projects list --filter="parent.id:FOLDER_ID AND parent.type:folder"

FOLDER_ID 替换为文件夹的唯一 ID。

REST

使用 projects.list 方法,并使用定义父文件夹的查询参数。

HTTP 请求:GET https://cloudresourcemanager.googleapis.com/v3/projects?parent=folders/FOLDER_ID

示例 curl 命令:

Bash

curl -H "Authorization: Bearer $(gcloud auth print-access-token)"
"https://cloudresourcemanager.googleapis.com/v3/projects?parent=folders/FOLDER_ID"

FOLDER_ID 替换为文件夹的唯一 ID。

按标签或标记过滤项目(可选)

如果文件夹中有大量项目,您可以使用过滤条件根据元数据查找特定资源。

控制台

  • 管理资源 页面的过滤条件 栏中,输入 Labels:key=value,将列表缩小到具有特定标签的项目。请注意,控制台对按标记进行可视化过滤的支持有限;如需进行高级标记查询,请使用 Google Cloud CLI。

gcloud

如需列出文件夹中具有特定标签值的项目,请将 --filter 标志与 tags 属性搭配使用:

gcloud projects list \
  --filter="parent.id:FOLDER_ID AND tags.TAG_KEY_PARENT/TAG_KEY_SHORT_NAME:TAG_VALUE_SHORT_NAME"

替换以下内容:

  • FOLDER_ID:文件夹的唯一 ID。
  • TAG_KEY_PARENT:标签键的父级资源(例如组织或项目)的 ID。
  • TAG_KEY_SHORT_NAME:标签键的简称。
  • TAG_VALUE_SHORT_NAME:标签值的简称。

如需按标签过滤,请执行以下操作:

gcloud projects list \
  --filter="parent.id:FOLDER_ID AND labels.KEY=VALUE"

替换以下内容:

  • FOLDER_ID:文件夹的唯一 ID。
  • KEY:标签的键。
  • VALUE:标签的值。

后续步骤