管理文件夹中的项目

本页介绍了如何通过在文件夹中嵌套项目来整理 Cloud de Confiance by S3NS 层次结构。

概览

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

虽然文件夹是一种可选的分组机制,但将项目整理到文件夹中可带来多项关键优势:

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

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

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

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

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

在文件夹中创建项目

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

控制台

  1. 在 Cloud de Confiance 控制台中,打开“管理资源”页面。

    打开 Cloud de Confiance 控制台

  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. 在 Cloud de Confiance 控制台中,前往管理资源页面。

    转到“管理资源”

  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. 在 Cloud de Confiance 控制台中,打开“管理资源”页面。

    打开 Cloud de Confiance 控制台

  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. 在 Cloud de Confiance 控制台中,打开管理资源页面。

    打开“管理资源”页面

  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:标签的值。

后续步骤