IAM の概要

Identity and Access Management(IAM)を使用して、プロジェクト レベル、Spanner インスタンス レベル、Spanner データベース レベルで、Spanner リソースに対するユーザーとグループのアクセスを制御できます。たとえば、あるユーザーがプロジェクト内の特定のインスタンスのデータベースを管理できるものの、プロジェクト内でインスタンスの作成、変更、削除はできないように変更できます。IAM でアクセス制御を使用すると、Spanner のインスタンスやデータベースの権限を個別に変更することなく、ユーザーやグループに対する権限を付与できます。

このドキュメントでは、Spanner に関係する IAM の権限と、それらの権限を付与する IAM の役割について説明します。IAM とその機能の詳しい説明については、Identity and Access Management デベロッパー ガイドをご覧ください。特に、IAM ポリシーの管理に関するセクションをご覧ください。

権限

権限を使用することで、Spanner リソースに対して特定の操作を行えるようになります。たとえば、spanner.databases.read 権限を持つユーザーは、Spanner の読み取り API を使用してデータベースからデータを読み取ることが可能です。また、spanner.databases.select を持つユーザーは、データベースに対して SQL select ステートメントを実行できます。ユーザーには権限を直接付与するのではなく、事前定義された役割またはカスタムの役割を割り当てます。役割には、1 つ以上の権限が組み込まれています。

次の表は、Spanner に関係する IAM の権限の一覧を示します。

インスタンス構成

Spanner インスタンス構成に適用される権限は次のとおりです。詳細については、REST API と RPC API のインスタンス構成リファレンスをご覧ください。

インスタンス構成の権限名 説明
spanner.instanceConfigs.create カスタム インスタンス構成を作成する。
spanner.instanceConfigs.delete カスタム インスタンス構成を削除する。
spanner.instanceConfigs.get インスタンス構成を取得します。
spanner.instanceConfigs.list インスタンス構成の一覧を取得します。
spanner.instanceConfigs.update カスタム インスタンス構成を更新する。

インスタンス構成オペレーション

Spanner インスタンス構成オペレーションに適用される権限は次のとおりです。詳細については、REST API と RPC API のインスタンス リファレンスをご覧ください。

インスタンス構成オペレーションの権限名 説明
spanner.instanceConfigOperations.list インスタンス構成オペレーションの一覧を取得します。
spanner.instanceConfigOperations.get 特定のインスタンス構成オペレーションを取得します。
spanner.instanceConfigOperations.cancel インスタンス構成オペレーションをキャンセルします。
spanner.instanceConfigOperations.delete インスタンス構成オペレーションを削除します。

インスタンス

Spanner インスタンスには次の権限が適用されます。詳細については、REST API と RPC API のインスタンス リファレンスをご覧ください。

インスタンスの権限名 説明
spanner.instances.create インスタンスを作成します。
spanner.instances.list インスタンスの一覧を取得します。
spanner.instances.get 特定のインスタンスの構成を取得します。
spanner.instances.getIamPolicy インスタンスの IAM ポリシーを取得します。
spanner.instances.update インスタンスを更新します。
spanner.instances.setIamPolicy インスタンスの IAM ポリシーを設定します。
spanner.instances.delete インスタンスを削除します。

インスタンス オペレーション

Spanner インスタンスのオペレーションには、次の権限が適用されます。詳細については、REST API と RPC API のインスタンス リファレンスをご覧ください。

インスタンス オペレーションの権限名 説明
spanner.instanceOperations.list インスタンス オペレーションの一覧を取得します。
spanner.instanceOperations.get 特定のインスタンス オペレーションを取得します。
spanner.instanceOperations.cancel インスタンス オペレーションをキャンセルします。
spanner.instanceOperations.delete インスタンス オペレーションを削除します。

データベース

Spanner データベースに適用される権限は次のとおりです。詳細については、REST API と RPC API のデータベース リファレンスをご覧ください。

データベースの権限名 説明
spanner.databases.beginPartitionedDmlTransaction

パーティション化されたデータ操作言語(DML)ステートメントを実行します。

spanner.databases.create データベースを作成します。
spanner.databases.createBackup データベースからバックアップを作成します。また、バックアップ リソースを作成するには spanner.backups.create も必要です。
spanner.databases.list データベースの一覧を取得します。
spanner.databases.update

データベースのメタデータを更新します。

spanner.databases.updateDdl データベースのスキーマを更新します。
spanner.databases.get データベースのメタデータを取得します。
spanner.databases.getDdl データベースのスキーマを取得します。
spanner.databases.getIamPolicy データベースの IAM ポリシーを取得します。
spanner.databases.setIamPolicy データベースの IAM ポリシーを設定します。
spanner.databases.beginReadOnlyTransaction Spanner データベースで読み取り専用トランザクションを開始します。
spanner.databases.beginOrRollbackReadWriteTransaction Spanner データベースで読み取り専用トランザクションを開始またはロールバックします。
spanner.databases.read 読み取り API を使用してデータベースから読み取ります。
spanner.databases.select データベースに SQL select ステートメントを実行します。
spanner.databases.write データベースに書き込みます。
spanner.databases.drop データベースを削除します。
spanner.databases.useRoleBasedAccess きめ細かいアクセス制御を使用します。
spanner.databases.useDataBoost Spanner Data Boost のコンピューティング リソースを使用して、分割クエリを処理します。

データベース ロール

Spanner データベース ロールには次の権限が適用されます。詳細については、REST API と RPC API のデータベース リファレンスをご覧ください。

データベース ロールの権限名 説明
spanner.databaseRoles.list データベース ロールを一覧表示します。
spanner.databaseRoles.use 指定したデータベースのロールを使用します。

データベース オペレーション

Spanner データベースのオペレーションに適用される権限は次のとおりです。詳細については、REST API と RPC API のデータベース リファレンスをご覧ください。

データベース オペレーションの権限名 説明
spanner.databaseOperations.list データベースを一覧表示し、データベース オペレーションを復元します。
spanner.databaseOperations.get 特定のデータベース オペレーションを取得します。
spanner.databaseOperations.cancel データベース オペレーションをキャンセルします。

バックアップ

Spanner バックアップには、次の権限が適用されます。詳細については、REST API と RPC API のバックアップ リファレンスをご覧ください。

バックアップの権限名 説明
spanner.backups.create バックアップの作成。また、ソース データベースに spanner.databases.createBackup が必要です。
spanner.backups.get バックアップを取得します。
spanner.backups.update バックアップを更新します。
spanner.backups.delete バックアップを削除します。
spanner.backups.list バックアップを一覧表示します。
spanner.backups.restoreDatabase バックアップからデータベースを復元します。また、復元されたデータベースをターゲット インスタンスに作成するには spanner.databases.create も必要です。
spanner.backups.getIamPolicy バックアップの IAM ポリシーを取得します。
spanner.backups.setIamPolicy バックアップの IAM ポリシーを設定します。

バックアップ オペレーション

Spanner バックアップ オペレーションには、次の権限が適用されます。詳細については、REST API と RPC API のデータベース リファレンスをご覧ください。

バックアップ オペレーションの権限名 説明
spanner.backupOperations.list バックアップ オペレーションを一覧表示します。
spanner.backupOperations.get 特定のバックアップ オペレーションを取得します。
spanner.backupOperations.cancel バックアップ オペレーションをキャンセルします。

セッション

Spanner セッションには、次の権限が適用されます。詳細については、REST API と RPC API のデータベース リファレンスをご覧ください。

セッションの権限名 説明
spanner.sessions.create セッションを作成します。
spanner.sessions.get セッションを取得します。
spanner.sessions.delete セッションを削除します。
spanner.sessions.list セッションを一覧表示します。

事前定義された役割

事前定義された役割には、1 つ以上の権限が付与されます。たとえば、事前定義された役割 roles/spanner.databaseUser には、spanner.databases.readspanner.databases.write という権限が含まれています。Spanner の事前定義された役割は次の 2 つのタイプがあります。

  • ユーザーの役割: ユーザーまたはグループに付与されます。プロジェクト内のリソースに対するアクションが実行できるようになります。
  • マシンの役割: サービス アカウントに付与されます。サービス アカウントとして実行されているマシンで、プロジェクト内のリソースにアクションが実行できるようになります。

次の表に、IAM 事前定義ロールのアクセス制御と、各ロールに関連付けられている権限を示します。

Role Permissions

(roles/spanner.admin)

Has complete access to all Spanner resources in a Google Cloud project. A principal with this role can:

  • Grant and revoke permissions to other principals for all Spanner resources in the project.
  • Allocate and delete chargeable Spanner resources.
  • Issue get/list/modify operations on Cloud Spanner resources.
  • Read from and write to all Cloud Spanner databases in the project.
  • Fetch project metadata.

Lowest-level resources where you can grant this role:

  • Project

monitoring.timeSeries.list

resourcemanager.projects.get

resourcemanager.projects.list

spanner.*

  • spanner.backupOperations.cancel
  • spanner.backupOperations.get
  • spanner.backupOperations.list
  • spanner.backups.copy
  • spanner.backups.create
  • spanner.backups.delete
  • spanner.backups.get
  • spanner.backups.getIamPolicy
  • spanner.backups.list
  • spanner.backups.restoreDatabase
  • spanner.backups.setIamPolicy
  • spanner.backups.update
  • spanner.databaseOperations.cancel
  • spanner.databaseOperations.delete
  • spanner.databaseOperations.get
  • spanner.databaseOperations.list
  • spanner.databaseRoles.list
  • spanner.databaseRoles.use
  • spanner.databases.beginOrRollbackReadWriteTransaction
  • spanner.databases.beginPartitionedDmlTransaction
  • spanner.databases.beginReadOnlyTransaction
  • spanner.databases.create
  • spanner.databases.createBackup
  • spanner.databases.drop
  • spanner.databases.get
  • spanner.databases.getDdl
  • spanner.databases.getIamPolicy
  • spanner.databases.list
  • spanner.databases.partitionQuery
  • spanner.databases.partitionRead
  • spanner.databases.read
  • spanner.databases.select
  • spanner.databases.setIamPolicy
  • spanner.databases.update
  • spanner.databases.updateDdl
  • spanner.databases.updateTag
  • spanner.databases.useDataBoost
  • spanner.databases.useRoleBasedAccess
  • spanner.databases.write
  • spanner.instanceConfigOperations.cancel
  • spanner.instanceConfigOperations.delete
  • spanner.instanceConfigOperations.get
  • spanner.instanceConfigOperations.list
  • spanner.instanceConfigs.create
  • spanner.instanceConfigs.delete
  • spanner.instanceConfigs.get
  • spanner.instanceConfigs.list
  • spanner.instanceConfigs.update
  • spanner.instanceOperations.cancel
  • spanner.instanceOperations.delete
  • spanner.instanceOperations.get
  • spanner.instanceOperations.list
  • spanner.instances.create
  • spanner.instances.createTagBinding
  • spanner.instances.delete
  • spanner.instances.deleteTagBinding
  • spanner.instances.get
  • spanner.instances.getIamPolicy
  • spanner.instances.list
  • spanner.instances.listEffectiveTags
  • spanner.instances.listTagBindings
  • spanner.instances.setIamPolicy
  • spanner.instances.update
  • spanner.instances.updateTag
  • spanner.sessions.create
  • spanner.sessions.delete
  • spanner.sessions.get
  • spanner.sessions.list

(roles/spanner.backupAdmin)

A principal with this role can:

  • Create, view, update, and delete backups.
  • View and manage a backup's allow policy.

This role cannot restore a database from a backup.

Lowest-level resources where you can grant this role:

  • Instance

monitoring.timeSeries.list

resourcemanager.projects.get

resourcemanager.projects.list

spanner.backupOperations.*

  • spanner.backupOperations.cancel
  • spanner.backupOperations.get
  • spanner.backupOperations.list

spanner.backups.copy

spanner.backups.create

spanner.backups.delete

spanner.backups.get

spanner.backups.getIamPolicy

spanner.backups.list

spanner.backups.setIamPolicy

spanner.backups.update

spanner.databases.createBackup

spanner.databases.get

spanner.databases.list

spanner.instances.createTagBinding

spanner.instances.deleteTagBinding

spanner.instances.get

spanner.instances.list

spanner.instances.listEffectiveTags

spanner.instances.listTagBindings

(roles/spanner.backupWriter)

This role is intended to be used by scripts that automate backup creation. A principal with this role can create backups, but cannot update or delete them.

Lowest-level resources where you can grant this role:

  • Instance

spanner.backupOperations.get

spanner.backupOperations.list

spanner.backups.copy

spanner.backups.create

spanner.backups.get

spanner.backups.list

spanner.databases.createBackup

spanner.databases.get

spanner.databases.list

spanner.instances.get

(roles/spanner.databaseAdmin)

A principal with this role can:

  • Get/list all Spanner instances in the project.
  • Create/list/drop databases in an instance.
  • Grant/revoke access to databases in the project.
  • Read from and write to all Cloud Spanner databases in the project.

Lowest-level resources where you can grant this role:

  • Instance

monitoring.timeSeries.list

resourcemanager.projects.get

resourcemanager.projects.list

spanner.databaseOperations.*

  • spanner.databaseOperations.cancel
  • spanner.databaseOperations.delete
  • spanner.databaseOperations.get
  • spanner.databaseOperations.list

spanner.databaseRoles.*

  • spanner.databaseRoles.list
  • spanner.databaseRoles.use

spanner.databases.beginOrRollbackReadWriteTransaction

spanner.databases.beginPartitionedDmlTransaction

spanner.databases.beginReadOnlyTransaction

spanner.databases.create

spanner.databases.drop

spanner.databases.get

spanner.databases.getDdl

spanner.databases.getIamPolicy

spanner.databases.list

spanner.databases.partitionQuery

spanner.databases.partitionRead

spanner.databases.read

spanner.databases.select

spanner.databases.setIamPolicy

spanner.databases.update

spanner.databases.updateDdl

spanner.databases.updateTag

spanner.databases.useDataBoost

spanner.databases.useRoleBasedAccess

spanner.databases.write

spanner.instances.createTagBinding

spanner.instances.deleteTagBinding

spanner.instances.get

spanner.instances.getIamPolicy

spanner.instances.list

spanner.instances.listEffectiveTags

spanner.instances.listTagBindings

spanner.sessions.*

  • spanner.sessions.create
  • spanner.sessions.delete
  • spanner.sessions.get
  • spanner.sessions.list

(roles/spanner.databaseReader)

A principal with this role can:

  • Read from the Spanner database.
  • Execute SQL queries on the database.
  • View schema for the database.

Lowest-level resources where you can grant this role:

  • Database

spanner.databases.beginReadOnlyTransaction

spanner.databases.getDdl

spanner.databases.partitionQuery

spanner.databases.partitionRead

spanner.databases.read

spanner.databases.select

spanner.instances.get

spanner.sessions.*

  • spanner.sessions.create
  • spanner.sessions.delete
  • spanner.sessions.get
  • spanner.sessions.list

(roles/spanner.databaseRoleUser)

In conjunction with the IAM role Cloud Spanner Fine-grained Access User, grants permissions to individual Spanner database roles. Add a condition for each desired Spanner database role that includes the resource type of `spanner.googleapis.com/DatabaseRole` and the resource name ending with `/YOUR_SPANNER_DATABASE_ROLE`.

spanner.databaseRoles.use

(roles/spanner.databaseUser)

A principal with this role can:

  • Read from and write to the Spanner database.
  • Execute SQL queries on the database, including DML and Partitioned DML.
  • View and update schema for the database.

Lowest-level resources where you can grant this role:

  • Database

spanner.databaseOperations.*

  • spanner.databaseOperations.cancel
  • spanner.databaseOperations.delete
  • spanner.databaseOperations.get
  • spanner.databaseOperations.list

spanner.databases.beginOrRollbackReadWriteTransaction

spanner.databases.beginPartitionedDmlTransaction

spanner.databases.beginReadOnlyTransaction

spanner.databases.getDdl

spanner.databases.partitionQuery

spanner.databases.partitionRead

spanner.databases.read

spanner.databases.select

spanner.databases.updateDdl

spanner.databases.updateTag

spanner.databases.write

spanner.instances.get

spanner.sessions.*

  • spanner.sessions.create
  • spanner.sessions.delete
  • spanner.sessions.get
  • spanner.sessions.list

(roles/spanner.fineGrainedAccessUser)

Grants permissions to use Spanner's fine-grained access control framework. To grant access to specific database roles, also add the `roles/spanner.databaseRoleUser` IAM role and its necessary conditions.

spanner.databaseRoles.list

spanner.databases.useRoleBasedAccess

(roles/spanner.restoreAdmin)

A principal with this role can restore databases from backups.

If you need to restore a backup to a different instance, apply this role at the project level or to both instances. This role cannot create backups.

Lowest-level resources where you can grant this role:

  • Instance

monitoring.timeSeries.list

resourcemanager.projects.get

resourcemanager.projects.list

spanner.backups.get

spanner.backups.list

spanner.backups.restoreDatabase

spanner.databaseOperations.cancel

spanner.databaseOperations.get

spanner.databaseOperations.list

spanner.databases.create

spanner.databases.get

spanner.databases.list

spanner.instances.createTagBinding

spanner.instances.deleteTagBinding

spanner.instances.get

spanner.instances.list

spanner.instances.listEffectiveTags

spanner.instances.listTagBindings

(roles/spanner.viewer)

A principal with this role can:

  • View all Spanner instances (but cannot modify instances).
  • View all Spanner databases (but cannot modify or read from databases).

For example, you can combine this role with the roles/spanner.databaseUser role to grant a user with access to a specific database, but only view access to other instances and databases.

This role is recommended at the Google Cloud project level for users interacting with Cloud Spanner resources in the Google Cloud console.

Lowest-level resources where you can grant this role:

  • Project

monitoring.timeSeries.list

resourcemanager.projects.get

resourcemanager.projects.list

spanner.databases.list

spanner.instanceConfigs.get

spanner.instanceConfigs.list

spanner.instances.get

spanner.instances.list

spanner.instances.listEffectiveTags

spanner.instances.listTagBindings

基本ロール

基本ロールは、IAM より前から存在するプロジェクト レベルのロールです。詳細については、基本ロールをご覧ください。

Spanner では以下の基本ロールがサポートされていますが、可能な限り、上記の事前定義ロールのいずれかを使用してください。基本ロールには、すべての Google Cloud リソースに適用される包括的な権限が含まれています。これとは対照的に、Spanner の事前定義ロールには、Spanner のみに適用される細分化された権限が含まれています。

基本ロール 説明
roles/viewer スキーマとインスタンスのメタデータを一覧表示または取得できます。データベースに対して読み取りや SQL クエリも実行できます。
roles/editor roles/viewer で許可されるすべての操作を実行できます。インスタンスとデータベースを作成し、インスタンスやデータベースの作成、データベースへの書き込みもできます。
roles/owner roles/editor で許可されるすべての操作を実行できます。データベースやインスタンスに対するアクセス権を変更できます。

カスタムロール

Spanner の事前定義された役割がビジネス要件に合っていない場合は、指定した権限を含むカスタムの役割を独自に定義できます。

カスタムの役割を作成する前に、実行する必要のあるタスクを特定する必要があります。これで各タスクに必要な権限を特定し、これらの権限をカスタムの役割に追加できます。

サービス アカウント タスクのカスタムの役割

多くのタスクでは、カスタムの役割に追加する必要のある権限がはっきりしています。たとえば、サービス アカウントでデータベースを作成できるようにするには、spanner.databases.create という権限をカスタムの役割に追加します。

ただし、Spanner テーブルでデータを読み書きする場合は、カスタムの役割にさまざまな権限を追加する必要があります。次の表に、データの読み取りと書き込みに必要な権限を示します。

サービス アカウント タスク 必要な権限
データを読み取る spanner.databases.select
spanner.sessions.create
spanner.sessions.delete
データを挿入、更新、削除する spanner.databases.beginOrRollbackReadWriteTransaction
spanner.databases.write
spanner.sessions.create
spanner.sessions.delete
バックアップの作成 spanner.backups.create
spanner.databases.createBackup
データベースの復元 spanner.databases.create
spanner.backups.restoreDatabase

Google Cloud Console タスクに対するカスタムの役割

Google Cloud コンソールで特定のタスクに必要な権限のリストを特定するには、そのタスクのワークフローを決定し、そのワークフローの権限をコンパイルします。たとえば、テーブル内のデータを表示するには、Google Cloud コンソールで次の手順を行います。

ステップ 権限
1. プロジェクトにアクセスする resourcemanager.projects.get
2. インスタンスのリストを表示する spanner.instances.list
3. インスタンスを選択する spanner.instances.get
4. データベースのリストを表示する spanner.databases.list
5. データベースとテーブルを選択する spanner.databases.getDdl
6. テーブル内のデータを表示する spanner.databases.selectspanner.sessions.createspanner.sessions.delete

この例では、次の権限が必要です。

  • resourcemanager.projects.get
  • spanner.databases.getDdl
  • spanner.databases.list
  • spanner.databases.select
  • spanner.instances.get
  • spanner.instances.list
  • spanner.sessions.create
  • spanner.sessions.delete

次の表に、Google Cloud コンソールでのアクションに必要な権限を示します。

アクション 権限
[インスタンス] ページでインスタンスのリストを表示する

resourcemanager.projects.get
spanner.instances.list

[インスタンス] ページの [権限] タブでリストを表示する

spanner.instances.getIamPolicy

[インスタンス] ページの [権限] タブでプリンシパルを追加する

spanner.instances.setIamPolicy

インスタンス リストからインスタンスを選択して、[インスタンスの詳細] ページを表示する

spanner.instances.get

インスタンスを作成する

spanner.instanceConfigs.list
spanner.instanceOperations.get
spanner.instances.create

インスタンスを削除する

spanner.instances.delete

インスタンスを変更する

spanner.instanceOperations.get
spanner.instances.update

[インスタンスの詳細] ページまたは [データベースの詳細] ページの [モニタリング] タブでグラフを表示する

monitoring.metricDescriptors.get
monitoring.metricDescriptors.list
monitoring.timeSeries.list
spanner.instances.get

[インスタンスの詳細] ページでデータベースのリストを表示する

spanner.databases.list

[データベースの詳細] ページの [権限] タブでリストを表示する

spanner.databases.getIamPolicy

[データベースの詳細] ページの [権限] タブでプリンシパルを追加する

spanner.databases.setIamPolicy

データベース リストからデータベースを選択し、[データベースの詳細] ページでスキーマを表示する

spanner.databases.get
spanner.databases.getDdl

データベースを作成する

spanner.databases.create

データベースを削除する

spanner.databases.drop

テーブルを作成する

テーブル スキーマを更新する

spanner.databaseOperations.get
spanner.databaseOperations.list
spanner.databases.updateDdl

[データベースの詳細] ページの [データ] タブでデータを表示する

クエリを作成して実行する

spanner.databases.select
spanner.sessions.create
spanner.sessions.delete

テーブル内のデータを変更する

spanner.databases.beginOrRollbackReadWriteTransaction
spanner.databases.select
spanner.databases.write
spanner.sessions.create
spanner.sessions.delete

[バックアップ / 復元] ページを表示する

spanner.backups.list
spanner.backups.get

バックアップ オペレーションの一覧を表示する

spanner.backupOperations.list

復元オペレーションの一覧を表示する

spanner.databaseOperations.list

バックアップの作成

spanner.backups.create
spanner.databases.createBackup
spanner.databases.list1
spanner.backupOperations.list1

バックアップからのデータベースの復元

spanner.instanceConfigs.list
spanner.instances.get
spanner.backups.get
spanner.backups.restoreDatabase
spanner.instances.list
spanner.databases.create

バックアップを更新する

spanner.backups.update

バックアップを削除する

spanner.backups.delete

1 データベース レベルではなく、インスタンス レベルで [バックアップ / 復元] タブからバックアップを作成する場合は必須です。

Spanner IAM ポリシー管理

Spanner インスタンス、データベース、バックアップ リソースで REST または RPC API を使用して、IAM ポリシーを取得、設定、テストできます。

インスタンス

REST API RPC API
projects.instances.getIamPolicy GetIamPolicy
projects.instances.setIamPolicy SetIamPolicy
projects.instances.testIamPermissions TestIamPermissions

データベース

REST API RPC API
projects.instances.databases.getIamPolicy GetIamPolicy
projects.instances.databases.setIamPolicy SetIamPolicy
projects.instances.databases.testIamPermissions TestIamPermissions

バックアップ

REST API RPC API
projects.instances.backups.getIamPolicy GetIamPolicy
projects.instances.backups.setIamPolicy SetIamPolicy
projects.instances.backups.testIamPermissions TestIamPermissions

次のステップ