本页面介绍如何通过授予对特定 Compute Engine 资源的访问权限(而非授予对项目、文件夹或组织等父资源的访问权限)来实施最小权限原则。
您可以通过针对资源设置 Identity and Access Management (IAM) 政策授予对该资源的访问权限。该政策会将一个或多个成员(例如一个用户或一个服务账号)绑定到一个或多个角色。每个角色都包含一系列可让成员与资源互动的权限。
如果您授予对父资源(例如,一个项目)的访问权限,则也隐含授予了对其所有子资源(例如,该项目中的所有虚拟机)的访问权限。如需限制对资源的访问权限,请尽可能针对较低级层的资源设置 IAM 政策,而不是在项目级层或更高级层设置。
如需大致了解如何授予、更改和撤消对与 Compute Engine 无关的资源的访问权限(例如,授予对 Google Cloud 项目的访问权限),请参阅 IAM 文档中有关授予、更改和撤消对资源的访问权限的内容。
准备工作
- 查看 IAM 概览。
- 阅读 Compute Engine 访问权限控制概览。
- 熟悉 Compute Engine 的 IAM 角色。
-
如果您尚未设置身份验证,请进行设置。身份验证是通过其进行身份验证以访问 Google Cloud 服务和 API 的过程。如需从本地开发环境运行代码或示例,您可以按如下方式向 Compute Engine 进行身份验证。
Select the tab for how you plan to use the samples on this page:
Console
When you use the Google Cloud console to access Google Cloud services and APIs, you don't need to set up authentication.
gcloud
-
Install the Google Cloud CLI, then initialize it by running the following command:
gcloud init
- Set a default region and zone.
-
授予或撤消对资源的访问权限:
-
针对项目的
compute.projects.get
权限 -
针对资源的
compute.RESOURCE_TYPE.get
-
针对资源的
compute.RESOURCE_TYPE.getIamPolicy
-
针对资源的
compute.RESOURCE_TYPE.setIamPolicy
-
针对项目的
-
测试调用者权限:针对资源的
compute.RESOURCE_TYPE.getIamPolicy
权限将 RESOURCE_TYPE 替换为您要管理访问权限的资源。例如
instances
、instanceTemplates
或images
。 - 在 Google Cloud Console 中,转到相应资源页面,您可以在该页面中添加权限。
- 选中要更新的资源旁边的复选框。
- 根据资源页面完成以下步骤。
- 对于虚拟机实例,请点击 权限。
- 对于所有其他资源,请完成以下操作:
- 检查信息面板是否可见。如果未显示,请点击显示信息面板。
- 选择权限标签页。
- 点击 添加主账号。
- 添加主账号的身份,然后选择所需的角色。
- 要保存更改,请点击保存。
RESOURCE_TYPE
:资源类型。有效值包括:disks
images
instances
instance-templates
machine-images
reservations
sole-tenancy node-groups
sole-tenancy node-templates
snapshots
RESOURCE_NAME
:资源的名称。例如my_instance
。PRINCIPAL
:您要授予该角色的主账号的有效身份。必须采用user|group|serviceAccount:EMAIL_ADDRESS
或domain:DOMAIN_ADDRESS
格式。例如:user:test-user@gmail.com
group:admins@example.com
serviceAccount:test123@example.domain.com
domain:example.domain.com
ROLE
:分配给此主账号的角色。使用资源各自的
getIamPolicy
方法来读取现有政策。例如,以下 HTTP 请求会读取虚拟机的 IAM 政策:POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME:getIamPolicy
替换以下内容:
PROJECT_ID
:此虚拟机所属的项目的 ID。ZONE
:虚拟机的可用区。 对于区域或全球资源,请将zones/ZONE
替换为regions/REGION
或global
。VM_NAME
:虚拟机实例的名称。
Compute Engine 会在响应中返回当前政策。
使用文本编辑器修改该政策,以添加或移除主账号及其关联的角色。例如,若要向 email@example.com 授予
compute.admin
角色,请将以下新绑定添加到政策中:{ "members": [ "user:email@example.com" ], "role":"roles/compute.admin" }
使用
setIamPolicy()
写入更新后的政策:POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME:setIamPolicy
替换以下内容:
PROJECT_ID
:此虚拟机所属的项目的 ID。ZONE
:虚拟机的可用区。 对于区域或全球资源,请将zones/ZONE
替换为regions/REGION
或global
。VM_NAME
:虚拟机实例的名称。
在请求正文中,提供上一步中写入的更新后 IAM 政策。
- 在 Google Cloud Console 中,转到相应资源页面,您可以在该页面中添加权限。
- 选中要更新的资源旁边的复选框。
- 根据资源页面完成以下步骤。
- 对于虚拟机实例,请点击 权限。
- 对于所有其他资源,请完成以下操作:
- 检查信息面板是否可见。如果未显示,请点击显示信息面板。
- 选择权限标签页。
- 点击您要从中移除主账号的角色卡片。这样会展开该卡片,并针对该资源显示具有相应角色的用户。
- 如需从该角色中移除主账号,请点击 删除。
RESOURCE_TYPE
:资源类型。有效值包括:disks
images
instances
instance-templates
machine-images
reservations
sole-tenancy node-groups
sole-tenancy node-templates
snapshots
RESOURCE_NAME
:资源的名称。例如my_instance
。PRINCIPAL
:主账号的有效身份。 必须采用user|group|serviceAccount:EMAIL_ADDRESS
或domain:DOMAIN_ADDRESS
格式。例如:user:test-user@gmail.com
group:admins@example.com
serviceAccount:test123@example.domain.com
domain:example.domain.com
ROLE
:您希望从中移除主账号的角色。使用资源各自的
getIamPolicy
方法来读取现有政策。例如,以下 HTTP 请求会读取虚拟机的 IAM 政策:POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME:getIamPolicy
替换以下内容:
PROJECT_ID
:此虚拟机所属的项目的 ID。ZONE
:虚拟机的可用区。 对于区域或全球资源,请将zones/ZONE
替换为regions/REGION
或global
。VM_NAME
:虚拟机实例的名称。
Compute Engine 会在响应中返回当前政策。
使用文本编辑器修改该政策,以从关联角色中移除成员。例如,从
compute.admin
角色中移除 email@example.com。{ "members": [ "user:owner@example.com" ], "role":"roles/compute.admin" }
使用
setIamPolicy()
写入更新后的政策:POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME:setIamPolicy
替换以下内容:
PROJECT_ID
:此虚拟机所属的项目的 ID。ZONE
:虚拟机的可用区。 对于区域或全球资源,请将zones/ZONE
替换为regions/REGION
或global
。VM_NAME
:虚拟机实例的名称。
在请求正文中,提供上一步中写入的更新后 IAM 政策。
向该资源发送请求,并以列表形式将要检查的权限加入请求正文中。
例如,您可以针对实例检查
compute.instances.start
、compute.instances.stop
和compute.instances.delete
权限。POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME/testIamPermissions { "permissions": [ "compute.instances.start", "compute.instances.stop", "compute.instances.delete" ] }
该请求会返回为调用者启用的权限。
{ "permissions": [ "compute.instances.start", "compute.instances.stop" ] }
- 了解如何通过 IAM 管理对自定义映像的访问权限。
- 详细了解服务账号。
- 详细了解 Compute Engine IAM 角色。
- 详细了解预定义 Compute Engine IAM 角色中包含的权限。
- 了解如何创建和管理自定义角色。
REST
如需在本地开发环境中使用本页面上的 REST API 示例,请使用您提供给 gcloud CLI 的凭据。
Install the Google Cloud CLI, then initialize it by running the following command:
gcloud init
如需了解详情,请参阅 Google Cloud 身份验证文档中的使用 REST 时进行身份验证。
所需的角色
如需获得管理对 Compute Engine 资源的访问权限所需的权限,请让管理员向您授予资源的 Compute Admin (
roles/compute.admin
) IAM 角色。如需详细了解如何授予角色,请参阅管理访问权限。此预定义角色包含 管理对 Compute Engine 资源的访问权限所需的权限。如需查看所需的确切权限,请展开所需权限部分:
所需权限
如需管理对 Compute Engine 资源的访问权限,需要具备以下权限:
支持的资源
如需查看支持资源级访问权限控制的 Compute Engine 资源列表,请参阅接受 IAM 政策的资源类型并过滤出 Compute Engine。
对于不支持资源级访问权限控制的其他 Compute Engine 资源,您必须在项目、文件夹或组织级层管理对这些资源的访问权限。如需了解组织、文件夹或项目,请参阅资源层次结构。
授予对 Compute Engine 资源的访问权限
主账号(例如用户或服务账号)可以访问 Compute Engine 资源。身份是主账号的属性。主账号 身份通常由与账号关联的电子邮件地址表示。
针对某项资源为主账号授予 IAM 角色之前,请了解对于某项特定资源可以授予哪些角色。如需了解详情,请参阅查看可针对资源授予的角色。
如需授予访问特定 Compute Engine 资源的权限,请针对该资源设置 IAM 政策。
控制台
gcloud
如需针对某资源向主账号授予角色,请使用该资源的 包含
--member
和--role
标志的add-iam-policy-binding
子命令。gcloud compute RESOURCE_TYPE add-iam-policy-binding RESOURCE_NAME \ --member='PRINCIPAL' \ --role='ROLE'
替换以下内容:
如果您要授予对目前处于预览版阶段的资源的访问权限,请改用
gcloud beta compute
命令。REST
如需通过 API 修改 IAM 政策,请执行以下操作:
撤消对资源的访问权限
最佳做法是,当主账号不再需要访问您的 Compute Engine 资源后,撤消其访问权限。
控制台
gcloud
如需从某个资源的主账号中移除角色,请使用该资源的 包含
--member
和--role
标志的remove-iam-policy-binding
子命令。gcloud compute RESOURCE_TYPE remove-iam-policy-binding RESOURCE_NAME \ --member='MEMBER' \ --role='ROLE'
替换以下内容:
如果您要撤消对目前处于预览版阶段的资源的访问权限,请改用
gcloud beta compute
命令。REST
如需直接通过 API 修改 IAM 政策,请执行以下操作:
测试调用者是否拥有权限
如果您不知道身份具有哪些权限,请使用
testIamPermissions
API 方法检查某个身份拥有的权限。该方法将资源网址和一组权限作为输入参数,返回调用者可以使用的一组权限。您可以对任何受支持的资源使用此方法。
通常而言,
testIamPermissions
适合与您的专有软件(如自定义图形界面)整合使用。如果您直接使用 Google Cloud 管理权限,通常无需调用testIamPermissions
。例如,如果您是基于 Compute Engine API 构建 GUI,且您的 GUI 设有用于启动实例的“开始”按钮,则可以通过调用
compute.instances.testIamPermissions()
来确定是应启用还是停用该按钮。如需测试调用者是否拥有资源的特定权限,请执行以下操作:
修改多个成员的资源访问权限
如果您希望同时修改多个成员对 Compute Engine 资源的访问权限,请查看有关如何以编程方式修改 IAM 政策的建议。
后续步骤
如未另行说明,那么本页面中的内容已根据知识共享署名 4.0 许可获得了许可,并且代码示例已根据 Apache 2.0 许可获得了许可。有关详情,请参阅 Google 开发者网站政策。Java 是 Oracle 和/或其关联公司的注册商标。
最后更新时间 (UTC):2024-10-04。
-