本页面介绍如何通过授予对特定 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
-
After installing the Google Cloud CLI, initialize it by running the following command:
gcloud init
If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.
- 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 控制台中,前往您要为其添加权限的相应资源页面。
- 选中要更新的资源旁边的复选框。
- 根据资源页面完成以下步骤。
- 对于虚拟机实例,请点击 权限。
- 对于所有其他资源,请完成以下操作:
- 检查信息面板是否可见。如果未显示,请点击显示信息面板。
- 选择权限标签页。
- 点击 添加主账号。
- 添加主账号的身份,然后选择所需的角色。
- 要保存更改,请点击保存。
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 控制台中,前往您要为其添加权限的相应资源页面。
- 选中要更新的资源旁边的复选框。
- 根据资源页面完成以下步骤。
- 对于虚拟机实例,请点击 权限。
- 对于所有其他资源,请完成以下操作:
- 检查信息面板是否可见。如果未显示,请点击显示信息面板。
- 选择权限标签页。
- 点击您要从中移除主账号的角色卡片。这样会展开该卡片,并针对该资源显示具有相应角色的用户。
- 如需从该角色中移除主账号,请点击 删除。
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 的凭据。
After installing the Google Cloud CLI, initialize it by running the following command:
gcloud init
If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.
如需了解详情,请参阅 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):2025-06-20。
-