访问权限控制概览


默认情况下,所有 Google Cloud 项目都只包含一位用户:原始项目创建者。其他用户在被添加为项目成员或绑定到特定资源之后,才能访问相关项目和 Compute Engine 资源。本页面介绍向项目中添加新用户的方式,以及如何使用 Identity and Access Management (IAM) 为 Compute Engine 资源设置访问权限控制。

如需了解如何提供对 Compute Engine 实例上运行的应用的访问权限,请参阅如何确定授权

针对用户的访问权限控制选项

为了让用户能够创建和管理您的 Compute Engine 资源,您可以将用户作为团队成员添加到项目或特定资源,然后使用 IAM 角色向这些用户授予权限

团队成员可以是具有有效 Google 账号的个人用户、Google 群组、服务账号或 Google Workspace 网域。当您将团队成员添加到项目或资源中时,请指定要向其授予的角色。IAM 提供三种类型的角色:预定义角色基本角色自定义角色

资源会沿用 Google Cloud 资源层次结构中其父级资源的政策。资源的有效政策是为该资源设置的政策以及从其父级沿用而来的政策的集合。

预定义 Compute Engine 角色

预定义角色可授予一组相关权限。Compute Engine 提供了以下预定义角色:

角色名称 权限 目标用户
Compute Engine Image User

拥有列出和使用另一个项目中的映像的权限。将该角色与另一个角色一同授予某个成员后,该成员将可以使用另一个项目中的映像创建新资源。例如,授予此角色和 Instance Admin 角色后,成员将可以使用另一个项目中的映像创建虚拟机实例和永久性磁盘。

如果您创建的是托管实例组或者您使用 Deployment Manager 创建虚拟机实例,则可能需要将此角色授予项目的 Google API 服务账号,然后才能使用其他项目中的映像。

  • 服务账号
  • 系统管理员
  • 开发者
Compute Engine Instance Admin (v1)

拥有 Compute Engine 实例、实例组、磁盘、快照和映像的完全控制权。拥有对所有 Compute Engine 网络资源的只读权限。

如果成员正在管理配置为以服务账号身份运行的虚拟机实例,那么您还必须授予 roles/iam.serviceAccountUser 角色,这样他们才能将服务账号分配给虚拟机实例。

  • 系统管理员
  • 开发者
Compute Engine Admin 角色

拥有所有 Compute Engine 资源的完全控制权。如果用户正在管理配置为以服务账号身份运行的虚拟机实例,那么您还必须授予 roles/iam.serviceAccountUser 角色。

  • 系统管理员
  • 开发者
Compute Engine Network Admin

拥有创建、修改和删除网络资源(防火墙规则和 SSL 证书除外)的权限。Network Admin 角色提供对防火墙规则、SSL 证书和实例的只读权限(若拥有对实例的只读权限,便可查看其临时 IP 地址)。Network Admin 角色不允许成员创建、启动、停止或删除实例。

网络管理员
Compute Engine Security Admin

提供创建、修改和删除防火墙规则和 SSL 证书的权限。

安全管理员
Compute Engine Load Balancer Admin Beta 版

拥有创建、修改和删除负载均衡器及相关资源的权限。

负载均衡器管理员
Compute Engine Service Account User

拥有创建可使用服务账号的实例的权限,以及在已配置为以服务账号身份运行的实例上挂接磁盘和设置元数据的权限。

您不应该单独授予此角色,因为此角色不向 Compute Engine API 提供任何权限。您应该将此角色和另一个角色(例如 Instance Admin 角色)一同授予某个成员。

  • 系统管理员
  • 开发者
Compute Engine Viewer 角色

拥有获取和列出 Compute Engine 资源的只读权限,无权读取上面存储的数据。例如,获授此角色的账号可以清点项目中的所有磁盘,但无法读取这些磁盘上的任何数据。

系统管理员
Compute Engine Network User

拥有使用共享 VPC 网络的权限。具体而言,就是将此角色授予需要在宿主项目中使用资源的服务所有者。获授此角色后,服务所有者可以使用属于宿主项目的子网和网络。例如,网络用户可以创建属于共享 VPC 宿主网络的虚拟机实例,但不能在宿主项目中删除或创建新网络。

  • 系统管理员
  • 开发者
Compute Engine Network Viewer

拥有所有网络资源的只读权限。例如,如果您有用于检查网络配置的软件,则可以向该软件的服务账号授予 Network Viewer 角色。

  • 网络管理员
  • 系统管理员
  • 开发者
  • 服务账号
Compute Engine Storage Admin Beta 版

拥有创建、修改和删除磁盘、映像及快照的权限。

例如,如果您的公司有人负责管理映像,但您不希望他们拥有项目的 Editor 角色,则可以向其账号授予此角色。

  • 系统管理员
  • 开发者
Compute Engine Shared VPC Admin

拥有管理共享 VPC 宿主项目的权限,具体来说,就是启用宿主项目并将服务项目关联到宿主项目所在的网络。此角色只能在组织层级授予。

项目创建者

如需查看获得了某个特定角色授予的权限的 API 方法列表,请参阅 Compute Engine IAM 角色文档。

预定义角色矩阵

下表对每个 Compute Engine 角色的权限展开了全面对比。

能力 Instance Admin (v1) Image User Network User Network Viewer Network Admin Security Admin Storage Admin Shared VPC Admin Compute Admin Compute Viewer Load Balancer Admin
创建或删除虚拟机实例 *
通过 SSH 连接虚拟机实例 * *
列出或获取虚拟机实例
创建或删除映像、磁盘、快照
列出或获取映像
创建或删除实例组 *
列出或获取实例组
创建和管理负载均衡器
创建和管理 VPN
查看网络/子网资源
查看防火墙规则
创建和管理防火墙和 SSL 证书 用于防火墙,
用于 SSL 证书
创建和管理共享 VPC 宿主项目
在共享 VPC 宿主项目中使用网络和子网
创建和管理网络和子网

* 如果虚拟机实例可以服务账号的身份运行,您还需要授予 Service Account User 角色。

如需查看获得了某个特定角色授予的权限的 API 方法列表,请参阅 Compute Engine IAM 角色文档。

基本 IAM 角色

基本 IAM 角色直接对应于传统的 Project Owner、Project Editor 和 Project Viewer 角色。通常,您应尽可能使用预定义角色;但是,在 IAM 不受支持的某些情况下,您可能需要使用基本角色来授予正确的权限。

角色名称 权限
Owner 拥有 Viewer 和 Editor 的所有权限,还可以更改结算设置、管理访问权限控制和删除项目。
Editor 拥有 Viewer 的所有权限,还可以创建、修改和删除资源。
Viewer 拥有对所有资源的只读权限;没有更改资源的权限。

如需详细了解基本角色,请参阅基本角色文档。

如果预定义角色或基本角色无法满足您的需求,您可以创建自定义角色

Compute Engine 资源的 IAM 政策

您可以将 IAM 政策直接与诸如虚拟机实例、映像和磁盘等 Compute Engine 资源相关联,从而授予对 Compute Engine 资源的访问权限。通过 IAM 政策,您可以管理这些资源的 IAM 角色,甚至在项目级层管理角色。这可让您灵活应用最小权限原则,例如,仅授予协作者完成其工作所需的特定资源的权限。

借助 Compute Engine 资源的 IAM 政策,组织可以:

  • 授予用户访问特定资源子集的权限。假设 Alice 应该管理项目中的实例子集。通过实例级层的 IAM 政策,您只为她授予这些实例的 compute.instanceAdmin.v1 角色。如果您在项目级层授予 Alice 相同的角色,那么她将有权修改项目中的所有实例。
  • 允许管理员授予访问权限。管理员可以授予其他人访问实例、磁盘和映像的权限,而无需成为强大的 Project Owner。假设 Bob 是开发者,已获授特定映像的 compute.storageAdmin 角色。他可以通过为团队成员授予映像的 compute.imageUser 角色来与他们共享映像。如果没有 Compute Engine 资源的 IAM 政策,Bob 无法与团队成员共享该映像,除非他成为 Project Owner,因为他需要修改项目的 IAM 政策。

资源会沿用其父级资源的政策。如果在项目级层设置政策,则项目的所有子资源都会沿用该政策。资源的有效政策是为该资源设置的政策及其从层次结构中更高层级沿用而来的政策的集合。如需了解详情,请参阅 IAM 政策层次结构

组织政策

如果您是 Google Workspace 成员,那么您的项目可能属于组织资源。组织资源是 Google Cloud 资源层次结构中与 Google Workspace 账号密切关联的超级节点。为 Google Workspace 网域创建组织资源后,该网域成员创建的所有 Google Cloud 项目都将属于组织资源。

组织可以实施组织政策,这些政策用于限制整个 Google Cloud 资源层次结构中允许的配置。对于 Compute Engine,您可以实施以下政策:

若要设置组织政策,您必须已获授组织的 orgpolicy.policyAdmin 角色。如果您的政策有例外情况,您还可以设置特定于项目的替代政策。

如需详细了解组织,请参阅组织文档。

如需详细了解组织政策,请参阅组织政策文档。

向用户授予对虚拟机实例的 SSH 访问权限

若要允许用户使用 SSH 连接到虚拟机实例,而不授予他们管理 Compute Engine 资源的权限,请将用户的公钥添加到项目,或将用户的公钥添加到特定的实例。使用此方法,您可以避免将用户添加为项目成员,同时仍允许其访问特定实例。

如需详细了解 SSH 以及如何管理 SSH 密钥,请参阅 SSH 密钥概述

请注意,如果您向某位项目成员授予 roles/compute.instanceAdmin.v1 角色,只要该实例未设置为以服务账号的身份运行,该成员便可以使用 SSH 自动连接到实例。如果实例设置为以服务账号的身份运行,您还必须先授予 roles/iam.serviceAccountUser 角色,然后成员才能连接到实例。

如果您将某个成员添加为 Project Owner 或 Editor,则该成员会自动拥有对项目中的虚拟机实例的 SSH 访问权限。

针对虚拟机实例上运行的应用的访问权限控制

如果您在实例上运行应用代码,并且应用需要向其他 Google Cloud API 进行身份验证,那么您可以创建服务账号并授予这些服务账号特定的 IAM 角色,以便这些服务账号代表您向其他 Google Cloud API 进行身份验证。服务账号是一个没有用户凭据的特殊账号,非常适合用于服务器与服务器之间的互动。

如需详细了解服务账号,请参阅服务账号文档。

Compute Engine 工作负载的托管式工作负载身份

您可以使用托管式工作负载身份设置来自 Certificate Authority Service (CA Service) 的 X.509 证书的自动预配和生命周期管理。托管式工作负载身份证书由 CA Service 颁发,后者是一项可用性高、可扩缩的 Google Cloud 服务,可帮助您简化和自动执行 CA 服务的部署、管理和安全维护,同时掌控您的私钥。

借助托管式工作负载身份,您可以受益于由 Compute Engine 管理的每个虚拟机的 mTLS。每个虚拟机的 mTLS 使用创建虚拟机时颁发的 X.509 证书。这些 mTLS 证书会自动轮替,因此您无需再费心管理证书。

托管式工作负载身份为实现任意两个 Compute Engine 虚拟机之间经过相互身份验证的加密通信奠定了基础。例如,当您使用托管式工作负载身份时,一个虚拟机中运行的服务 A 通过使用 mTLS 建立的加密通道与在另一个虚拟机中运行的服务 B 通信。

如需了解如何配置托管式工作负载身份,请参阅通过 mTLS 向其他工作负载验证工作负载的身份

后续步骤