Access Control Overview

By default, all Google Cloud Platform projects come with a single user: the original project creator. No other users have access to the project, and therefore, access to Compute Engine resources, until a user is added as a project member or is bound to a specific resource. This page describes the different ways you can add new users to your project and how to set access control for your Compute Engine resources.

In addition, if you run applications on a virtual machine (VM) instance, and the application needs access to Compute Engine or other Google Cloud Platform APIs, you can use service accounts to authenticate your applications instead of using user credentials.

Access control options for users

To give users the ability to create and manage your Compute Engine resources, you can add users as team members to your project or to specific resources and grant them permissions using Cloud Identity and Access Management roles.

A team member can be an individual user with a valid Google account, a Google Group, a service account, or a G Suite domain. When you add a team member to a project or to a resource, you specify which roles to grant them. Cloud IAM provides three types of roles: predefined roles, primitive roles, and custom roles.

Resources inherit the policies of their parent resources in the GCP resource hierarchy. The effective policy for a resource is the union of the policy set at that resource and the policy inherited from its parent.

Predefined Compute Engine roles

Predefined roles grant a set of related permissions. Compute Engine offers the following predefined roles:

Role Title Capabilities Target User
Compute Engine Image User

Permission to list and use images from another project. Grant a member this role together with another role so the member can use images from another project to create a new resource. For example, grant this role and the Instance Admin role so that a member can use images from another project to create VM instances and persistent disks.

If you are creating managed instance groups or if you are using Deployment Manager to create VM instances, you might need to grant the project's Google APIs service account this role in order to be able to use images from other projects.

  • Service accounts
  • Systems administrators
  • Developers
Compute Engine Instance Admin (v1)

Full control of Compute Engine instances, instance groups, disks, snapshots, and images. Read-only access to all Compute Engine networking resources.

If the member will be managing virtual machine instances that are configured to run as a service account, you must also grant the Service Account User role so that they can assign service accounts to VM instances.

  • Systems administrators
  • Developers
Compute Engine Admin Role

Full control of all Compute Engine resources. If the user will be managing virtual machine instances that are configured to run as a service account, you must also grant the roles/iam.serviceAccountUser role.

  • Systems administrators
  • Developers
Compute Engine Network Admin

Permissions to create, modify, and delete networking resources, except for firewall rules and SSL certificates. The network admin role allows read-only access to firewall rules, SSL certificates, and instances (to view their ephemeral IP addresses). The network admin role does not allow a member to create, start, stop, or delete instances.

Network administrators
Compute Engine Security Admin

Permissions to create, modify, and delete firewall rules and SSL certificates.

Security administrators
Compute Engine Load Balancer AdminBeta

Permissions to create, modify, and delete load balancers and associated resources.

Load balancer administrators
Compute Engine Service Account User

Permission to create instances that use service accounts, and permission to attach a disk and set metadata on an instance already configured to run as a service account.

You should not grant this role by itself because it provides no permissions to the Compute Engine API. You should grant a member this role and another role, such as the Instance Admin role.

  • Systems administrators
  • Developers
Compute Engine Viewer Role

Read-only access to get and list Compute Engine resources, without being able to read the data stored on them. For example, an account with this role could inventory all of the disks in a project, but it could not read any of the data on those disks.

System administrators
Compute Engine Network User

Permissions to use a shared VPC network. Specifically, grant this role to service owners that need to use resources in the host project. Once granted, service owners can use subnetworks and networks that belong to the host project. For example, a network user can create a VM instance that belongs to a shared VPC host network but they cannot delete or create new networks in the host project.

  • Systems administrators
  • Developers
Compute Engine Network Viewer

Read-only access to all networking resources. For example, if you have software that inspects your network configuration, you could grant that software’s service account the Network Viewer role.

  • Network administrators
  • Systems administrators
  • Developers
  • Service accounts
Compute Engine Storage AdminBeta

Permissions to create, modify, and delete disks, images, and snapshots.

For example, if your company has someone who manages images and you do not want them to have the editor role on the project, then grant their account this role.

  • Systems administrators
  • Developers
Compute Engine Shared VPC Admin

Permissions to administer shared VPC host projects, specifically enabling the host projects and associating service projects to the host project's network. This role can only be granted at the organization level.

Project creators

To see a list of API methods that a specific role grants permission to, review the Compute Engine IAM Roles documentation.

Predefined roles matrix

The following table provides a complete comparison of the capabilities of each Compute Engine role.

Capability 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
Create or delete VM instances Yes* No No No No No No No Yes No No
SSH into VM instances Yes* No No No No No No No Yes* No No
List or get VM instances Yes No No Yes Yes No No No Yes Yes Yes
Create or delete images, disks, snapshots Yes No No No No No Yes No Yes Yes No
List or get images Yes Yes No No No No Yes No Yes Yes No
Create or delete instance groups Yes* No No No No No No No Yes No Yes
List or get instance groups Yes No No Yes Yes No No No Yes Yes Yes
Create and manage load balancers No No No No Yes No No No Yes No Yes
Create and manage VPNs No No No No Yes No No No Yes No No
View network/subnetwork resources Yes No Yes Yes Yes No No No Yes Yes Yes
View firewall rules Yes No Yes Yes Yes Yes No No Yes Yes No
Create and manage firewalls and SSL certificates No No No No No Yes No No Yes No No for firewalls, yes for SSL certificates
Create and manage shared VPC host projects No No No No No No No Yes Yes No No
Use networks and subnetworks in a shared VPC host project No No Yes No No No No No Yes No No
Create and manage networks and subnetworks No No No No Yes No No No Yes No No

*If the VM instance can run as a service account, grant the Service Account User role as well.

To see a list of API methods that a specific role grants permission to, review the Compute Engine IAM Roles documentation.

Primitive Cloud IAM roles

Primitive Cloud IAM roles map directly to the legacy project owner, editor, and viewer roles. Generally, you should use predefined roles whenever possible; however, in some cases, where Cloud IAM is not yet supported, you might need to use a primitive role to grant the correct permissions.

Role Title Permissions
Owner All viewer and editor privileges, plus the ability to change billing settings, manage access control, and delete a project.
Editor All viewer privileges, plus the ability to create, modify, and delete resources.
Viewer Read-only permissions to all resources; no permission to change resources.

To learn more about primitive roles, read documentation for Primitive Roles.

If predefined or primitive roles do not meet you needs, you can create custom roles.

Cloud IAM policies for Compute Engine resources

You can grant access to Compute Engine resources such as VM instances, images, and disks, by attaching Cloud IAM policies directly to those resources. A Cloud IAM policy lets you manage Cloud IAM roles on those resources instead of, or in addition to, managing roles at the project level. This gives you flexibility to apply the principle of least privilege: to grant access only to specific resources that collaborators need to do their work.

With Cloud IAM policies for Compute Engine resources, organizations can:

  • Grant users access to a specific subset of resources. Suppose Alice should manage a subset of instances in a project. With instance-level Cloud IAM policies, you grant her the compute.instanceAdmin.v1 role on only those instances. If you granted Alice the same role on the project, then she would have permission to modify all instances in the project.
  • Allow administrators of instances, disks, and images to grant other people access to those resources, without needing to be powerful project owners. Suppose Bob is a developer who has been granted the compute.storageAdmin role on a specific image. He can share that image with his teammates by granting them the compute.imageUser role on the image. Without Cloud IAM policies for Compute Engine resources, Bob would've needed to be a project owner in order to share the image because he'd need to modify the project's Cloud IAM policy.

Resources also inherit the policies of their parent resources. If you set a policy at the project level, it's inherited by all its child resources. The effective policy for a resource is the union of the policy set at that resource and the policy inherited from higher up in the hierarchy. For more information, read about the Cloud IAM policy hierarchy.

Organization policies

If you are a G Suite member, your project might be part of an Organization resource. An Organization resource is the supernode in the Google Cloud Platform resource hierarchy that is closely associated with a G Suite account. Once an Organization resource is created for a G Suite domain, all Cloud Platform Projects created by members of the domain will belong to the Organization resource.

An organization can implement Organization Policies which are policies that restrict allowed configurations across your entire Cloud Resource hierarchy. For Compute Engine, you can implement the following policies:

To set Organization Policies, you must have been granted the orgpolicy.policyAdmin role on the organization. You can also set project-specific overrides in case you have exceptions to the policy.

To learn more about Organizations, read the Organizations documentation.

To learn more about Organization Policies, read the Organization Policy documentation.

Granting users SSH access to VM instances

If you just want to give a user the ability to connect to a virtual machine instance using SSH, but don't want to grant them the ability to manage Compute Engine resources, add the user's public key to the project, or add a user's public key to a specific instance. Using this method, you can avoid adding a user as a project member, while still granting them access to specific instances.

To learn more about SSH and managing SSH keys, read the SSH keys Overview.

Note that if you grant the roles/compute.instanceAdmin.v1 role to a project member, they can automatically connect to instances using SSH, as long as the instance is not set up to run as a service account. If the instance is set up to run as a service account, you must also grant the roles/iam.serviceAccountUser role in order for the member to connect to the instance.

If you add a member as a project owner or editor, they also automatically have SSH access to virtual machine instances in the project.

Access control for applications running on VM instances

If you run application code on instances and the application needs to authenticate to other Google Cloud Platform APIs, you can create service accounts and give these service accounts specific Cloud IAM roles to authenticate to other Cloud Platform APIs on your behalf. A service account is a special account that has no user credentials and is ideal for server-to-server interactions.

To learn more about service accounts, read the Service Accounts documentation.

What's next?

Was this page helpful? Let us know how we did:

Send feedback about...

Compute Engine Documentation