您可以在文件夹中创建、移动和查看项目,以整理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 政策一样,组织政策是继承的。因此,您必须确保源文件夹和目标文件夹之间的组织政策一致。
如需详细了解组织政策,请参阅Organization Policy Service 简介。
要移动项目,您需要拥有源文件夹和目标文件夹的 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:标签的值。
后续步骤
- 了解如何查看和更新项目。
- 了解用于管理项目的角色和权限。