Identity and Access Management (IAM) lets you control user and group access to Spanner resources at the project, Spanner instance, and Spanner database levels. For example, you can specify that a user has full control of a specific database in a specific instance in your project, but cannot create, modify, or delete any instances in your project. Using access control with IAM lets you grant a permission to a user or group without having to modify each Spanner instance or database permission individually.
This document focuses on the IAM permissions relevant to Spanner and the IAM roles that grant those permissions. For a detailed description of IAM and its features, see the Identity and Access Management developer's guide. In particular, see the Managing IAM policies section.
Permissions
Permissions allow users to perform specific actions on Spanner
resources. For example, the spanner.databases.read permission allows a user to
read from a database using Spanner's read API, while
spanner.databases.select allows a user to execute a SQL select statement on a
database. You don't directly give users permissions; instead, you grant them
predefined roles or custom roles, which have one or
more permissions bundled within them.
The following tables list the IAM permissions that are associated with Spanner.
Instance configurations
The following permissions apply to Spanner instance configurations. For more information, see the instance configuration references for REST and RPC APIs.
| Instance configuration permission name | Description |
|---|---|
spanner.instanceConfigs.create |
Create a custom instance configuration. |
spanner.instanceConfigs.delete |
Delete a custom instance configuration. |
spanner.instanceConfigs.get |
Get an instance configuration. |
spanner.instanceConfigs.list |
List the set of instance configurations. |
spanner.instanceConfigs.update |
Update a custom instance configuration. |
Instance configuration operations
The following permissions apply to Spanner instance configuration operations. For more information, see the instance references for REST and RPC APIs.
| Instance configuration operation permission name | Description |
|---|---|
spanner.instanceConfigOperations.cancel |
Cancel an instance configuration operation. |
spanner.instanceConfigOperations.delete |
Delete an instance configuration operation. |
spanner.instanceConfigOperations.get |
Get an instance configuration operation. |
spanner.instanceConfigOperations.list |
List instance configuration operations. |
Instances
The following permissions apply to Spanner instances. For more information, see the instance references for REST and RPC APIs.
| Instance permission name | Description |
|---|---|
spanner.instances.create |
Create an instance. |
spanner.instances.delete |
Delete an instance. |
spanner.instances.get |
Get the configuration of a specific instance. |
spanner.instances.getIamPolicy |
Get an instance's IAM Policy. |
spanner.instances.list |
List instances. |
spanner.instances.setIamPolicy |
Set an instance's IAM Policy. |
spanner.instances.update |
Update an instance. |
Instance operations
The following permissions apply to Spanner instance operations. For more information, see the instance references for REST and RPC APIs.
| Instance operation permission name | Description |
|---|---|
spanner.instanceOperations.cancel |
Cancel an instance operation. |
spanner.instanceOperations.delete |
Delete an instance operation. |
spanner.instanceOperations.get |
Get a specific instance operation. |
spanner.instanceOperations.list |
List instance operations. |
Instance partitions
The following permissions apply to Spanner instance partitions. For more information, see the instance partition references for REST and RPC APIs.
| Instance permission name | Description |
|---|---|
spanner.instancePartitions.create |
Create an instance partition. |
spanner.instancePartitions.delete |
Delete an instance partition. |
spanner.instancePartitions.get |
Get the configuration of a specific instance partition. |
spanner.instancePartitions.list |
List instance partitions. |
spanner.instancePartitions.update |
Update an instance partition. |
Instance partition operations
The following permissions apply to Spanner instance partition operations. For more information, see the instance partition references for REST and RPC APIs.
| Instance partition operation permission name | Description |
|---|---|
spanner.instancePartitionOperations.cancel |
Cancel an instance partition operation. |
spanner.instancePartitionOperations.delete |
Delete an instance partition operation. |
spanner.instancePartitionOperations.get |
Get a specific instance partition operation. |
spanner.instancePartitionOperations.list |
List instance partition operations. |
Databases
The following permissions apply to Spanner databases. For more information, see the database references for REST and RPC APIs.
| Database permission name | Description |
|---|---|
spanner.databases.adapt |
Lets the Spanner Adapter API interact directly with Spanner. |
spanner.databases.beginOrRollbackReadWriteTransaction |
Begin or roll back a read-write transaction on a Spanner database. |
spanner.databases.beginPartitionedDmlTransaction |
Execute an instance partitioned data manipulation language (DML) statement. For more information about instance partitioned queries, see Read data in parallel. |
spanner.databases.beginReadOnlyTransaction |
Begin a read-only transaction on a Spanner database. |
spanner.databases.create |
Create a database. |
spanner.databases.createBackup |
Create a backup from the database. Also requires spanner.backups.create to create the backup resource. |
spanner.databases.drop |
Drop a database. |
spanner.databases.get |
Get a database's metadata. |
spanner.databases.getDdl |
Get a database's schema. |
spanner.databases.getIamPolicy |
Get a database's IAM policy. |
spanner.databases.list |
List databases. |
spanner.databases.read |
Read from a database using the read API. |
spanner.databases.select |
Execute a SQL select statement on a database. |
spanner.databases.setIamPolicy |
Set a database's IAM policy. |
spanner.databases.update |
Update a database's metadata. |
spanner.databases.updateDdl |
Update a database's schema. |
spanner.databases.useDataBoost |
Use the compute resources of Spanner Data Boost to process instance partitioned queries. |
spanner.databases.useRoleBasedAccess |
Use fine-grained access control. |
spanner.databases.write |
Write into a database. |
Database roles
The following permissions apply to Spanner database roles. For more information, see the database references for REST and RPC APIs.
| Database role permission name | Description |
|---|---|
spanner.databaseRoles.list |
List database roles. |
spanner.databaseRoles.use |
Use a specified database role. |
Database operations
The following permissions apply to Spanner database operations. For more information, see the database references for REST and RPC APIs.
| Database operation permission name | Description |
|---|---|
spanner.databaseOperations.cancel |
Cancel a database operation. |
spanner.databaseOperations.get |
Get a specific database operation. |
spanner.databaseOperations.list |
List database and restore database operations. |
Backups
The following permissions apply to Spanner backups. For more information, see the backups references for REST and RPC APIs.
| Backup permission name | Description |
|---|---|
spanner.backups.create |
Create a backup. Also requires spanner.databases.createBackup on the source database. |
spanner.backups.delete |
Delete a backup. |
spanner.backups.get |
Get a backup. |
spanner.backups.getIamPolicy |
Get a backup's IAM policy. |
spanner.backups.list |
List backups. |
spanner.backups.restoreDatabase |
Restore database from a backup. Also requires spanner.databases.create to create the restored database on the target instance. |
spanner.backups.setIamPolicy |
Set a backup's IAM policy. |
spanner.backups.update |
Update a backup. |
Backup operations
The following permissions apply to Spanner backup operations. For more information, see the database references for REST and RPC APIs.
| Backup operation permission name | Description |
|---|---|
spanner.backupOperations.cancel |
Cancel a backup operation. |
spanner.backupOperations.get |
Get a specific backup operation. |
spanner.backupOperations.list |
List backup operations. |
Backup schedules
The following permissions apply to Spanner backup schedules. For more information, see the database references for the REST and RPC APIs.
| Backup schedule permission name | Description |
|---|---|
spanner.backupSchedules.create |
Create a backup schedule. Also requires spanner.databases.createBackup on the source database. |
spanner.backupSchedules.delete |
Delete a backup schedule. |
spanner.backupSchedules.get |
Get a backup schedule. |
spanner.backupSchedules.list |
List backup schedules. |
spanner.backupSchedules.update |
Update a backup schedule. |
Sessions
The following permissions apply to Spanner sessions. For more information, see the database references for REST and RPC APIs.
| Session permission name | Description |
|---|---|
spanner.sessions.create |
Create a session. |
spanner.sessions.delete |
Delete a session. |
spanner.sessions.get |
Get a session. |
spanner.sessions.list |
List sessions. |
Predefined roles
A predefined role is a bundle of one or more permissions. For
example, the predefined role roles/spanner.databaseUser contains the
permissions spanner.databases.read and spanner.databases.write. There are
two types of predefined roles for Spanner:
- Person roles: Granted to users or groups, which allows them to perform actions on the resources in your project.
- Machine roles: Granted to service accounts, which allows machines running as those service accounts to perform actions on the resources in your project.
The following table lists the access control with IAM predefined roles, including a list of the permissions associated with each role:
| Role | Permissions |
|---|---|
Cloud Spanner Admin( Has complete access to all Spanner resources in a Google Cloud project. A principal with this role can:
Lowest-level resources where you can grant this role:
|
|
Cloud Spanner Editor( Editor role for Cloud Spanner |
|