本页面介绍如何通过在文件夹中嵌套项目来整理 Google Cloud 层次结构 。
概览
在 Google Cloud 资源层次结构中,项目是资源的核心组织和结算单元。它们位于文件夹(或组织资源)与底层资源(例如虚拟机实例和存储分区)之间。
虽然文件夹是一种可选的分组机制,但在文件夹中整理项目具有以下几个主要优势:
可扩缩的治理:通过基于层次结构的继承,自动将 Identity and Access Management (IAM) 政策和安全限制应用于多个项目。
业务对齐:构建云环境,以反映组织的部门、成本中心或开发生命周期(例如开发、预演和生产)。
委托管理:授予特定团队自主管理自己的项目和子文件夹的权限,而无需在组织级层授予广泛的权限。
费用可见性:将相关项目分组,以简化支出跟踪并增强特定业务单位或应用的结算分析。
安全隔离:建立明确的信任边界,以限制配置更改的影响范围,并降低不同环境中的安全风险。
在文件夹中创建项目
如需在文件夹中创建项目,您必须拥有该文件夹的 Project Creator 角色 (roles/resourcemanager.projectCreator)。该角色可从父文件夹继承。
控制台
- 在 Google Cloud 控制台中,打开管理资源页面。
- 前往管理资源 页面。
- 从页面左上角的组织 下拉列表中选择您的组织资源。
- 点击创建项目 。
- 输入项目名称。
- 在目标位置框中,点击浏览以选择要在其中创建项目的文件夹。
- 点击创建。
gcloud
gcloud projects create PROJECT_ID --folder FOLDER_ID
替换以下内容:
PROJECT_ID:要创建的项目 ID 的 IDFOLDER_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:父级的类型,例如folder或organization。
请勿在文件夹名称或其他资源名称中添加敏感信息。 对文件夹或相关资源的任何引用都会公开文件夹名称和资源名称。
将项目移动到文件夹
在将项目移入或移出文件夹之前,您必须仔细考虑任何政策影响。您在项目级层定义的允许政策会随项目一起移动,但继承自父资源的政策不会移动。
移动项目时,直接附加的所有 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
您还可以通过自定义 角色或其他预定义角色获取这些权限。
控制台
如需移动项目,请执行以下操作:
在 Google Cloud 控制台中,前往 管理资源 页面。
从页面左上角的组织 下拉列表中选择您的组织。
点击项目所在行,从资源列表中选择您的项目。请注意,您 不得 点击项目名称,否则系统会将您带到项目的 Identity and Access Management (IAM) 页面。
点击行中的选项菜单(垂直省略号),然后点击移动 。
点击浏览 ,选择项目的目标移动文件夹。
点击移动。
gcloud
如需移动项目,请运行
gcloud beta projects move
命令:
gcloud beta projects move PROJECT_ID \ --DESTINATION_TYPE DESTINATION_ID
替换以下内容:
PROJECT_ID:要移动的项目的 ID 或编号。DESTINATION_TYPE:目标的类型,即organization或folder。DESTINATION_ID:要将项目移动到的组织资源或文件夹的 ID。
REST
您可以使用 v3
projects.move 方法
移动项目。
请求:
POST https://cloudresourcemanager.googleapis.com/v3/{name=PROJECT_NAME}:move
{
"destinationParent": DESTINATION_PARENT
}
替换以下内容:
PROJECT_NAME:要更新的项目的名称。例如,projects/415104041262DESTINATION_PARENT:要将项目移动到的新父级组织资源或文件夹。例如:organizations/12345678901
如果成功,请求将返回一个 操作,可用于跟踪项目移动。
将文件夹移动到另一个文件夹
如要将一个文件夹移动到另一个文件夹,则源文件夹和目标文件夹都必须具有 resourcemanager.folders.move 权限。
控制台
在控制台中,将文件夹移动到其他文件夹的过程与移动项目类似。
- 在 Google Cloud 控制台中,打开管理资源页面。
- 从页面左上角的组织 下拉列表中选择您的组织资源。
- 点击文件夹所在行,从项目和文件夹列表中选择文件夹。
- 点击行中的选项菜单(垂直省略号),然后点击移动 。
- 点击浏览 ,选择文件夹的目标移动文件夹。
- 点击移动。
gcloud
如需在组织资源下移动文件夹,请运行以下命令:
gcloud resource-manager folders move FOLDER_ID \
--organization=PARENT_ID
替换以下内容:
FOLDER_ID:要移动的文件夹的 IDPARENT_ID:父级组织资源的 ID
如需将文件夹移动到另一个文件夹,请运行以下命令:
gcloud resource-manager folders move FOLDER_ID \
--folder=PARENT_ID
替换以下内容:
FOLDER_ID:要移动的文件夹的 IDPARENT_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)。
控制台
在 Google Cloud 控制台中,打开 管理资源 页面。
在组织 下拉列表中,选择您的组织。
在资源列表中,点击文件夹的名称以展开该文件夹并查看其项目。
可选:使用列表顶部的过滤条件 栏,按名称或 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:标签的值。