当您在项目中添加新成员时,可以使用 Identity and Access Management (IAM) 政策为该成员授予一个或多个 IAM 角色。每个 IAM 角色都包含授予成员访问特定资源的权限。
Compute Engine 具有一组预定义 IAM 角色,本页对这些角色进行了说明。您还可以创建自定义角色,这些角色包含的权限子集直接对应于您的需要。
如需了解每种方法所需的权限,请参阅 Compute Engine API 参考文档:
如需了解如何授予访问权限,请参阅以下页面。
- 如需在项目级层设置 IAM 政策,请参阅 IAM 文档中的授予、更改和撤消对资源的访问权限。
- 如需针对特定 Compute Engine 资源设置政策,请阅读授予对 Compute Engine 资源的访问权限。
- 如需为 Compute Engine 服务帐号分配角色,请阅读为实例创建和启用服务帐号。
准备工作
- 阅读 IAM 文档。
什么是 IAM?
Google Cloud 提供 IAM,可让您授予对特定 Google Cloud 资源的更细化访问权限,并防止对其他资源进行不必要的访问。IAM 允许您采用最小权限安全原则,您只需授予对您资源的必要访问权限。
IAM 允许您通过设置 IAM 政策来控制谁(身份)对哪些资源具有何种权限(角色)。IAM 政策可为项目成员授予一个或多个特定角色,进而授予相应身份特定权限。例如,您可以为 Google 帐号分配给定资源(如项目)的 roles/compute.networkAdmin
角色,此后该帐号便可控制项目中网络相关的资源,但无法管理实例和磁盘等其他资源。您还可以使用 IAM 来管理为项目团队成员授予的 Google Cloud 控制台旧版角色。
serviceAccountUser 角色
同时授予 roles/compute.instanceAdmin.v1
和 roles/iam.serviceAccountUser
角色时,后者会授予成员创建和管理使用服务帐号的实例的权限。具体而言,同时授予 roles/iam.serviceAccountUser
和 roles/compute.instanceAdmin.v1
角色可让成员拥有执行以下操作的权限:
- 创建一个以服务帐号身份运行的实例。
- 将永久性磁盘附加到以服务帐号身份运行的实例上。
- 在以服务帐号身份运行的实例上设置实例元数据。
- 通过 SSH 连接到一个以服务帐号身份运行的实例。
- 将实例重新配置为以服务帐号身份运行。
您可以通过以下两种方式之一授予 roles/iam.serviceAccountUser
:
推荐。将该角色授予特定服务帐号中的成员。这会使得该成员有权访问具有
iam.serviceAccountUser
角色的服务帐号,但不允许其访问不具有iam.serviceAccountUser
角色的其他服务帐号。在项目级层为成员授予该角色。该成员有权访问项目中的所有服务帐号,包括将来创建的服务帐号。
如果您对服务帐号不熟悉,请详细了解服务帐号。
Google Cloud Console 权限
如需使用 Google Cloud Console 访问 Compute Engine 资源,您必须拥有一个包含项目的以下权限的角色:
compute.projects.get
以 instanceAdmin 身份连接到实例
为项目成员授予 roles/compute.instanceAdmin.v1
角色后,该项目成员即可使用标准 Google Cloud 工具(例如 gcloud CLI 或在浏览器中使用 SSH)连接到虚拟机 (VM) 实例。
当成员使用 gcloud CLI 或 SSH-in-browser 时,该工具将自动生成公钥/私钥对,并将公钥添加到项目元数据中。如果成员没有修改项目元数据的权限,则该工具会将成员的公钥添加到实例元数据中。
如果成员已有想使用的现有密钥对,则可以手动将其公钥添加到实例元数据中。详细了解如何将 SSH 密钥添加到实例。
IAM 与服务帐号
创建新的自定义服务帐号并将 IAM 角色授予服务帐号以限制访问实例的权限。将 IAM 角色与自定义服务帐号结合使用,您可以:
- 通过精细的 IAM 角色限制您的实例对 Google Cloud API 的访问权限。
- 为每个实例或每组实例授予唯一身份。
- 限制您的默认服务帐号的访问权限。
托管实例组和 IAM
代管式实例组 (MIG) 是代表您执行操作的资源,无需直接的用户互动。例如,MIG 可以在实例组中添加和移除虚拟机。
由 Compute Engine 执行的属于 MIG 的所有操作都是使用您项目的 Google API 服务代理完成的,此服务代理具有如下所示的电子邮件地址:PROJECT_ID@cloudservices.gserviceaccount.com
默认情况下,Google API 服务代理会在项目级层被授予 Editor 角色 (roles/editor
),从而获得足够的权限根据 MIG 的配置创建资源。如果您要为 Google API 服务代理自定义访问权限,请授予 Compute Instance Admin (v1) 角色 (roles/compute.instanceAdmin.v1
) 和(可选)Service Account User 角色 (roles/iam.serviceAccountUser
)。仅当 MIG 创建可以服务帐号身份运行的虚拟机时,才需要 Service Account User 角色。
请注意,Google API 服务代理也会被其他进程(包括 Deployment Manager)使用。
当您创建 MIG 或更新其实例模板时,Compute Engine 会验证 Google API 服务代理具有以下角色和权限:
- Service Account User 角色;如果您计划创建可以服务帐号身份运行的实例,则该角色很重要
- 针对通过实例模板引用的所有资源(例如映像、磁盘、VPC 网络和子网)的权限
预定义 Compute Engine IAM 角色
使用 IAM 时,Compute Engine API 中的每个 API 方法都要求发出 API 请求的身份具有使用相应资源的适当权限。您可以通过设置政策为项目成员(用户、群组或服务帐号)授予角色,进而授予相应权限。
除了基本角色(Viewer、Editor、Owner)和自定义角色之外,您还可以为项目成员分配以下 Compute Engine 预定义角色。
您可以针对同一资源向某位成员授予多个角色。例如,如果您的网络团队还负责管理防火墙规则,您可以将 roles/compute.networkAdmin
和 roles/compute.securityAdmin
同时授予该网络团队的 Google 群组。
下表描述了预定义 Compute Engine IAM 角色,以及每个角色所包含的权限。每个角色包含一组适合特定任务的权限。例如,Instance Admin 角色授予管理实例的权限,与网络相关的角色具有管理网络相关资源的权限,而安全角色具有管理安全相关资源(如防火墙和 SSL 证书)的权限。
某些权限通过
标记为所有者权限。如果满足以下任一条件,则权限为所有者权限: 图标- 该权限包含在 Owner 基本角色中,但未包含在 Viewer 或 Editor 基本角色中。
- 该权限未包含在任何基本角色中,但允许主帐号执行帐号所有者可能执行的任务,例如管理结算。
Compute Admin 角色
详情 | 权限 |
---|---|
Compute Admin( 拥有所有 Compute Engine 资源的完全控制权。
如果用户要管理配置为以服务帐号身份运行的虚拟机实例,您还必须授予 您可以授予此角色的最低级层资源:
包含 33 项所有者权限 |
compute.*
resourcemanager.projects.get resourcemanager.projects.list serviceusage.quotas.get serviceusage.services.get serviceusage.services.list |
Compute Image User 角色
详情 | 权限 |
---|---|
Compute Image User( 可在不具备其他映像权限的情况下列出和读取映像。在项目级层授予此角色后,获授此角色的用户可以列出项目中的所有映像,并根据项目中的映像创建实例和永久性磁盘等资源。 您可以授予此角色的最低级层资源:
|
compute.images.get compute.images.getFromFamily compute.images.list compute.images.useReadOnly resourcemanager.projects.get resourcemanager.projects.list serviceusage.quotas.get serviceusage.services.get serviceusage.services.list |
Compute Instance Admin(Beta 版)角色
详情 | 权限 |
---|---|
Compute Instance Admin(Beta 版)( 拥有创建、修改和删除虚拟机实例的权限。 这包括创建、修改和删除磁盘的权限,以及配置安全强化型虚拟机设置的权限。
如果用户要管理配置为以服务帐号身份运行的虚拟机实例,您还必须授予 例如,如果贵公司的某位员工负责管理多组虚拟机实例,但不负责管理网络或安全设置,也不负责管理以服务帐号身份运行的实例,则您可以在这些实例所属的组织、文件夹或项目级层授予此角色,也可以在个别实例级层授予此角色。 您可以授予此角色的最低级层资源:
包含 6 项所有者权限 |
compute.acceleratorTypes.*
compute. compute. compute.addresses.get compute.addresses.list compute.addresses.use compute.addresses.useInternal compute.autoscalers.*
compute.diskTypes.*
compute.disks.create compute.disks.createSnapshot compute.disks.delete compute.disks.get compute.disks.list compute.disks.resize compute.disks.setLabels compute.disks.update compute.disks.use compute.disks.useReadOnly compute.globalAddresses.get compute.globalAddresses.list compute.globalAddresses.use
compute.
compute.globalOperations.get compute.globalOperations.list compute.images.get compute.images.getFromFamily compute.images.list compute.images.useReadOnly
compute.
compute.instanceGroups.*
compute.instanceTemplates.*
compute.instances.*
compute.licenses.get compute.licenses.list compute.machineImages.*
compute.machineTypes.*
compute.
compute.networks.get compute.networks.list compute.networks.use compute.networks.useExternalIp compute.projects.get
compute.
compute.regionOperations.get compute.regionOperations.list compute.regions.*
compute.reservations.get compute.reservations.list compute.subnetworks.get compute.subnetworks.list compute.subnetworks.use compute. compute.targetPools.get compute.targetPools.list compute.zoneOperations.get compute.zoneOperations.list compute.zones.*
resourcemanager.projects.get resourcemanager.projects.list serviceusage.quotas.get serviceusage.services.get serviceusage.services.list |
Compute Instance Admin (v1) 角色
详情 | 权限 |
---|---|
计算实例管理员 (v1)( 拥有对 Compute Engine 实例、实例组、磁盘、快照和映像的完整控制权, 拥有所有 Compute Engine 网络资源的读取权限。 如果仅在实例级层向用户授予此角色,则该用户无法创建新实例。 包含 18 项所有者权限 |
compute.acceleratorTypes.*
compute. compute. compute.addresses.get compute.addresses.list compute.addresses.use compute.addresses.useInternal compute.autoscalers.*
compute.backendBuckets.get compute.backendBuckets.list compute.backendServices.get compute.backendServices.list compute.diskTypes.*
compute.disks.*
compute. compute. compute.firewalls.get compute.firewalls.list compute.forwardingRules.get compute.forwardingRules.list compute.globalAddresses.get compute.globalAddresses.list compute.globalAddresses.use compute. compute. compute.
compute.
compute.globalOperations.get compute.globalOperations.list compute.healthChecks.get compute.healthChecks.list compute.httpHealthChecks.get compute.httpHealthChecks.list compute.httpsHealthChecks.get compute.httpsHealthChecks.list compute.images.*
compute.
compute.instanceGroups.*
compute.instanceTemplates.*
compute.instances.*
compute. compute.
compute.
compute.interconnects.get compute.interconnects.list compute.licenseCodes.*
compute.licenses.*
compute.machineImages.*
compute.machineTypes.*
compute.networkAttachments.get compute.
compute.
compute.networks.get compute.networks.list compute.networks.use compute.networks.useExternalIp compute.projects.get compute. compute. compute. compute. compute. compute.regionHealthChecks.get compute.
compute.
compute. compute. compute.regionOperations.get compute.regionOperations.list compute. compute. compute.regionSslPolicies.get compute.regionSslPolicies.list compute. compute. compute. compute. compute. compute. compute. compute.regionUrlMaps.get compute.regionUrlMaps.list compute.regions.*
compute.reservations.get compute.reservations.list compute.resourcePolicies.*
compute.routers.get compute.routers.list compute.routes.get compute.routes.list compute.serviceAttachments.get compute. compute.snapshots.*
compute.sslCertificates.get compute.sslCertificates.list compute.sslPolicies.get compute.sslPolicies.list compute. compute.subnetworks.get compute.subnetworks.list compute.subnetworks.use compute. compute.targetGrpcProxies.get compute.targetGrpcProxies.list compute.targetHttpProxies.get compute.targetHttpProxies.list compute.targetHttpsProxies.get compute. compute.targetInstances.get compute.targetInstances.list compute.targetPools.get compute.targetPools.list compute.targetSslProxies.get compute.targetSslProxies.list compute.targetTcpProxies.get compute.targetTcpProxies.list compute.targetVpnGateways.get compute.targetVpnGateways.list compute.urlMaps.get compute.urlMaps.list compute.vpnGateways.get compute.vpnGateways.list compute.vpnTunnels.get compute.vpnTunnels.list compute.zoneOperations.get compute.zoneOperations.list compute.zones.*
resourcemanager.projects.get resourcemanager.projects.list serviceusage.quotas.get serviceusage.services.get serviceusage.services.list |
Compute Load Balancer Admin 角色
详情 | 权限 |
---|---|
Compute Load Balancer Admin 测试版( 拥有创建、修改和删除负载均衡器及相关资源的权限。 例如,如果您公司的负载均衡团队负责管理负载均衡器、负载均衡器的 SSL 证书、SSL 政策和其他负载均衡资源,而另一个网络团队负责管理其余网络资源,则向负载均衡团队群组授予此角色。 您可以授予此角色的最低级层资源:
包含 4 项所有者权限 |
certificatemanager. certificatemanager. certificatemanager. compute.addresses.*
compute.backendBuckets.*
compute.backendServices.*
compute. compute.disks.listTagBindings compute.forwardingRules.*
compute.globalAddresses.*
compute.
compute.
compute.healthChecks.*
compute.httpHealthChecks.*
compute.httpsHealthChecks.*
compute. compute.images.listTagBindings compute.instanceGroups.*
compute.instances.get compute.instances.list compute. compute. compute.instances.use compute.instances.useReadOnly
compute.
compute.networks.get compute.networks.list compute.networks.use compute.projects.get
compute.
compute.
compute.regionHealthChecks.*
compute.
compute.
compute. compute. compute.
compute.
compute.regionSslPolicies.*
compute.
compute.
compute.
compute.regionUrlMaps.*
compute.securityPolicies.get compute.securityPolicies.list compute.securityPolicies.use compute. compute. compute.sslCertificates.*
compute.sslPolicies.*
compute.subnetworks.get compute.subnetworks.list compute.subnetworks.use compute.targetGrpcProxies.*
compute.targetHttpProxies.*
compute.targetHttpsProxies.*
compute.targetInstances.*
compute.targetPools.*
compute.targetSslProxies.*
compute.targetTcpProxies.*
compute.urlMaps.*
networksecurity. networksecurity. networksecurity. networksecurity. networksecurity. networksecurity. resourcemanager.projects.get resourcemanager.projects.list serviceusage.quotas.get serviceusage.services.get serviceusage.services.list |
Compute Load Balancer Services User 角色
详情 | 权限 |
---|---|
Compute Load Balancer Services User Beta 版( 拥有使用其他项目中的负载均衡器的服务的权限。 |
compute.backendServices.get compute.backendServices.list compute.backendServices.use compute.projects.get compute. compute. compute. resourcemanager.projects.get resourcemanager.projects.list serviceusage.quotas.get serviceusage.services.get serviceusage.services.list |
Compute Network Admin 角色
详情 | 权限 |
---|---|
Compute Network Admin( 拥有创建、修改和删除网络资源(不包括防火墙规则和 SSL 证书)的权限。Network Admin 角色允许以只读方式访问防火墙规则、SSL 证书和实例(以查看其临时 IP 地址),但无法让用户创建、启动、停止或删除实例。
例如,如果您公司的安全团队负责管理防火墙和 SSL 证书,而网络团队负责管理其余网络资源,则向网络团队群组授予此角色。
或者,如果您有一个负责管理安全和网络的组合团队,则向组合团队的群组授予此角色以及
您可以授予此角色的最低级层资源:
包含 19 项所有者权限 |
compute.acceleratorTypes.*
|