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.cancel |
インスタンス構成オペレーションをキャンセルする。 |
spanner.instanceConfigOperations.delete |
インスタンス構成オペレーションを削除する。 |
spanner.instanceConfigOperations.get |
インスタンス構成オペレーションを取得する。 |
spanner.instanceConfigOperations.list |
インスタンス構成オペレーションの一覧を取得する。 |
インスタンス
Spanner のインスタンスには次の権限が適用されます。詳細については、REST API と RPC API のインスタンスの参照をご覧ください。
インスタンスの権限名 | 説明 |
---|---|
spanner.instances.create |
インスタンスを作成する。 |
spanner.instances.delete |
インスタンスを削除する。 |
spanner.instances.get |
特定のインスタンスの構成を取得する。 |
spanner.instances.getIamPolicy |
インスタンスの IAM ポリシーを取得する。 |
spanner.instances.list |
インスタンスの一覧を取得する。 |
spanner.instances.setIamPolicy |
インスタンスの IAM ポリシーを設定する。 |
spanner.instances.update |
インスタンスを更新する。 |
インスタンス オペレーション
Spanner のインスタンス オペレーションには、次の権限が適用されます。詳細については、REST API と RPC API のインスタンスの参照をご覧ください。
インスタンス オペレーションの権限名 | 説明 |
---|---|
spanner.instanceOperations.cancel |
インスタンス オペレーションをキャンセルする。 |
spanner.instanceOperations.delete |
インスタンス オペレーションを削除する。 |
spanner.instanceOperations.get |
特定のインスタンス オペレーションをする。 |
spanner.instanceOperations.list |
インスタンス オペレーションの一覧を取得する。 |
インスタンス パーティション
Spanner のインスタンス パーティションには、次の権限が適用されます。詳細については、REST API と RPC API のインスタンスパティション リファレンスをご覧ください。
インスタンスの権限名 | 説明 |
---|---|
spanner.instancePartitions.create |
インスタンス パーティションを作成する。 |
spanner.instancePartitions.delete |
インスタンス パーティションを削除する。 |
spanner.instancePartitions.get |
特定のインスタンス パーティションの構成を取得する。 |
spanner.instancePartitions.list |
インスタンス パーティションの一覧を取得する。 |
spanner.instancePartitions.update |
インスタンス パーティションを更新する。 |
インスタンス パーティション オペレーション
Spanner のインスタンス パーティション オペレーションには、次の権限が適用されます。詳細については、REST API と RPC API のインスタンスパティション リファレンスをご覧ください。
インスタンス パーティション オペレーションの権限名 | 説明 |
---|---|
spanner.instancePartitionOperations.cancel |
インスタンス パーティション オペレーションをキャンセルする。 |
spanner.instancePartitionOperations.delete |
インスタンス パーティション オペレーションを削除する。 |
spanner.instancePartitionOperations.get |
特定のインスタンス パーティション オペレーションを取得する。 |
spanner.instancePartitionOperations.list |
インスタンス パーティション オペレーションの一覧を取得する。 |
データベース
Spanner のデータベースには次の権限が適用されます。詳細については、REST API と RPC API のデータベース リファレンスをご覧ください。
データベースの権限名 | 説明 |
---|---|
spanner.databases.adapt |
Spanner Adapter API が Spanner と直接やり取りできるようにする。 |
spanner.databases.beginOrRollbackReadWriteTransaction |
Spanner データベースで読み取り専用トランザクションを開始またはロールバックします。 |
spanner.databases.beginPartitionedDmlTransaction |
インスタンス分割されたデータ操作言語(DML)ステートメントを実行する。インスタンス分割されたクエリの詳細については、データを同時に読み込むをご覧ください。 |
spanner.databases.beginReadOnlyTransaction |
Spanner データベースで読み取り専用トランザクションを開始する。 |
spanner.databases.create |
データベースを作成します。 |
spanner.databases.createBackup |
データベースからバックアップを作成する。また、バックアップ リソースを作成するには spanner.backups.create も必要です。 |
spanner.databases.drop |
データベースを削除する。 |
spanner.databases.get |
データベースのメタデータを取得する。 |
spanner.databases.getDdl |
データベースのスキーマを取得する。 |
spanner.databases.getIamPolicy |
データベースの IAM ポリシーを取得する。 |
spanner.databases.list |
データベースの一覧を取得する。 |
spanner.databases.read |
読み取り API を使用してデータベースから読み取る。 |
spanner.databases.select |
データベースに SQL SELECT ステートメントを実行する。 |
spanner.databases.setIamPolicy |
データベースの IAM ポリシーを設定する。 |
spanner.databases.update |
データベースのメタデータを更新する。 |
spanner.databases.updateDdl |
データベースのスキーマを更新する。 |
spanner.databases.useDataBoost |
Spanner Data Boost のコンピューティング リソースを使用して、分割クエリを処理します。 |
spanner.databases.useRoleBasedAccess |
きめ細かいアクセス制御を使用する。 |
spanner.databases.write |
データベースに書き込む。 |
データベース ロール
Spanner のデータベース ロールには次の権限が適用されます。詳細については、REST API と RPC API のデータベース リファレンスをご覧ください。
データベース ロールの権限名 | 説明 |
---|---|
spanner.databaseRoles.list |
データベース ロールの一覧を取得する。 |
spanner.databaseRoles.use |
指定されたデータベース ロールを使用する。 |
データベース オペレーション
Spanner のデータベース オペレーションには次の権限が適用されます。詳細については、REST API と RPC API のデータベース リファレンスをご覧ください。
データベース オペレーションの権限名 | 説明 |
---|---|
spanner.databaseOperations.cancel |
データベース オペレーションをキャンセルする。 |
spanner.databaseOperations.get |
特定のデータベース オペレーションを取得する。 |
spanner.databaseOperations.list |
データベースの一覧を取得し、データベース オペレーションを復元する。 |
バックアップ
Spanner のバックアップには次の権限が適用されます。詳細については、REST API と RPC API のバックアップ リファレンスをご覧ください。
バックアップの権限名 | 説明 |
---|---|
spanner.backups.create |
バックアップを作成する。ソース データベースに spanner.databases.createBackup も必要です。 |
spanner.backups.delete |
バックアップを削除する。 |
spanner.backups.get |
バックアップを取得する。 |
spanner.backups.getIamPolicy |
バックアップの IAM ポリシーを取得する。 |
spanner.backups.list |
バックアップの一覧を取得する。 |
spanner.backups.restoreDatabase |
バックアップからデータベースを復元する。復元されたデータベースをターゲット インスタンスに作成するには spanner.databases.create も必要です。 |
spanner.backups.setIamPolicy |
バックアップの IAM ポリシーを設定する。 |
spanner.backups.update |
バックアップを更新する。 |
バックアップ オペレーション
Spanner のバックアップ オペレーションには次の権限が適用されます。詳細については、REST API と RPC API のデータベース リファレンスをご覧ください。
バックアップ オペレーションの権限名 | 説明 |
---|---|
spanner.backupOperations.cancel |
バックアップ オペレーションをキャンセルする。 |
spanner.backupOperations.get |
特定のバックアップ オペレーションを取得する。 |
spanner.backupOperations.list |
バックアップ オペレーションの一覧を取得する。 |
バックアップ スケジュール
Spanner のバックアップ スケジュールには次の権限が適用されます。詳細については、REST API と RPC API のデータベース リファレンスをご覧ください。
バックアップ スケジュールの権限名 | 説明 |
---|---|
spanner.backupSchedules.create |
バックアップ スケジュールを作成する。ソース データベースに spanner.databases.createBackup も必要です。 |
spanner.backupSchedules.delete |
バックアップ スケジュールを削除する。 |
spanner.backupSchedules.get |
バックアップ スケジュールを取得する。 |
spanner.backupSchedules.list |
バックアップ スケジュールの一覧を取得する。 |
spanner.backupSchedules.update |
バックアップ スケジュールを更新する。 |
セッション
Spanner のセッションには次の権限が適用されます。詳細については、REST API と RPC API のデータベース リファレンスをご覧ください。
セッションの権限名 | 説明 |
---|---|
spanner.sessions.create |
セッションを作成する。 |
spanner.sessions.delete |
セッションを削除する。 |
spanner.sessions.get |
セッションを取得する。 |
spanner.sessions.list |
セッションの一覧を取得する。 |
事前定義された役割
事前定義されたロールには、1 つ以上の権限が付与されます。たとえば、事前定義されたロール roles/spanner.databaseUser
には、spanner.databases.read
と spanner.databases.write
という権限が含まれています。Spanner の事前定義ロールには次の 2 つのタイプがあります。
- ユーザーのロール: ユーザーまたはグループに付与されます。プロジェクト内のリソースに対するアクションが実行できるようになります。
- マシンのロール: サービス アカウントに付与されます。サービス アカウントとして実行されているマシンで、プロジェクト内のリソースにアクションが実行できるようになります。
次の表に示すのは、IAM の事前定義ロールによるアクセス制御と、各ロールに関連付けられている権限です。
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 Backup Admin( A principal with this role can:
This role cannot restore a database from a backup. Lowest-level resources where you can grant this role:
|
|
Cloud Spanner Backup Writer( 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:
|
|
Cloud Spanner Database Admin( A principal with this role can:
Lowest-level resources where you can grant this role:
|
|
Cloud Spanner Database Reader( A principal with this role can:
Lowest-level resources where you can grant this role:
|
|
Cloud Spanner Database Reader with DataBoost( Includes all permissions in the spanner.databaseReader role enabling access to read and/or query a Cloud Spanner database using instance resources, as well as the permission to access the database with Data Boost, a fully managed serverless service that provides independent compute resources. Lowest-level resources where you can grant this role:
|
|
Cloud Spanner Database Role User( 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`. Lowest-level resources where you can grant this role:
|
|
Cloud Spanner Database User( A principal with this role can:
Lowest-level resources where you can grant this role:
|
|
Cloud Spanner Fine-grained Access User( 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. Lowest-level resources where you can grant this role:
|
|
Cloud Spanner Restore Admin( 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:
|
|
Cloud Spanner API Service Agent( Cloud Spanner API Service Agent |
|
Cloud Spanner Viewer( A principal with this role can:
For example, you can combine this role with the 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:
|
|
基本ロール
基本ロールは、IAM より前から存在するプロジェクト レベルのロールです。詳細については、基本ロールをご覧ください。
Spanner では以下の基本ロールがサポートされていますが、可能な限り、前述の事前定義ロールのいずれかを使用してください。基本ロールには、すべての Google Cloud リソースに適用される包括的な権限が含まれています。これとは対照的に、Spanner の事前定義ロールには Spanner のみに適用される細分化された権限が含まれています。
基本ロール | 説明 |
---|---|
roles/editor |
roles/viewer で許可されるすべての操作を実行できます。インスタンスとデータベースを作成し、インスタンスやデータベースの作成、データベースへの書き込みもできます。 |
roles/owner |
roles/editor で許可されるすべての操作を実行できます。データベースやインスタンスに対するアクセス権を変更できます。 |
roles/viewer |
スキーマとインスタンスのメタデータを一覧表示または取得できます。データベースに対して読み取りや SQL クエリも実行できます。 |
カスタムロール
Spanner の事前定義ロールがビジネス要件に合っていない場合は、指定した権限を含むカスタムロールを独自に定義できます。
カスタムロールを作成する前に、実行する必要のあるタスクを特定する必要があります。これで各タスクに必要な権限を特定し、これらの権限をカスタムロールに追加できます。
サービス アカウント タスクのカスタムロール
多くのタスクでは、カスタムの役割に追加する必要のある権限がはっきりしています。たとえば、サービス アカウントでデータベースを作成できるようにするには、spanner.databases.create
という権限をカスタムロールに追加します。
ただし、Spanner テーブルでデータを読み書きする場合は、カスタムロールにさまざまな権限を追加する必要があります。次の表に示すのは、データの読み取りと書き込みに必要な権限です。
サービス アカウント タスク | 必要な権限 |
---|---|
バックアップを作成する | spanner.backups.create spanner.databases.createBackup |
データを読み取る | spanner.databases.select spanner.sessions.create spanner.sessions.delete |
データベースを復元する | spanner.backups.restoreDatabase spanner.databases.create |
データを挿入、更新、削除する | spanner.databases.beginOrRollbackReadWriteTransaction spanner.sessions.create spanner.sessions.delete spanner.databases.write |
Google Cloud コンソール タスクのカスタムロール
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.select 、spanner.sessions.create 、spanner.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 コンソールでの操作に必要な権限です。
権限 | 操作 |
---|---|
spanner.databases.setIamPolicy |
[データベースの詳細] ページの [権限] タブでメンバーを追加する |
spanner.instances.setIamPolicy |
[インスタンス] ページの [権限] タブでメンバーを追加する |
spanner.backups.create spanner.databases.createBackup spanner.databases.list 1spanner.backupOperations.list 1 |
バックアップを作成する |
spanner.backupSchedules.create spanner.databases.createBackup |
バックアップ スケジュールを作成する |
spanner.databases.create |
データベースを作成する |
spanner.instancePartitions.list spanner.instancePartitionOperations.get spanner.instancePartitions.create |
インスタンス パーティションを作成する |
spanner.databaseOperations.get spanner.databaseOperations.list spanner.databases.updateDdl |
テーブルを作成する テーブル スキーマを更新する |
spanner.instanceConfigs.list spanner.instanceOperations.get spanner.instances.create |
インスタンスを作成する |
spanner.backups.delete |
バックアップを削除する |
spanner.backupSchedules.delete |
バックアップ スケジュールを削除する |
spanner.databases.drop |
データベースを削除する |
spanner.instancePartitions.delete |
インスタンス パーティションを削除する |
spanner.instances.delete |
インスタンスを削除する |
spanner.instancePartitionOperations.get spanner.instancePartitions.update |
インスタンス パーティションを変更する |
spanner.instanceOperations.get spanner.instances.update |
インスタンスを変更する |
spanner.databases.beginOrRollbackReadWriteTransaction spanner.databases.select spanner.databases.write spanner.sessions.create spanner.sessions.delete |
テーブル内のデータを変更する |
spanner.instanceConfigs.list spanner.instances.get spanner.backups.get spanner.backups.restoreDatabase spanner.instances.list spanner.databases.create |
バックアップからデータベースを復元する |
spanner.databases.get spanner.databases.getDdl |
データベースの一覧からデータベースを選択し、[データベースの詳細] ページでスキーマを確認する |
spanner.instances.get |
インスタンスの一覧からインスタンスを選択し、[インスタンスの詳細] ページを確認する |
spanner.backups.update |
バックアップを更新する |
spanner.backupSchedules.update |
バックアップ スケジュールを更新する |
spanner.databases.select spanner.sessions.create spanner.sessions.delete |
[データベースの詳細] ページの [データ] タブでデータを確認する クエリを作成して実行する |
spanner.backups.list spanner.backups.get |
[バックアップ / 復元] ページを確認する |
monitoring.metricDescriptors.get monitoring.metricDescriptors.list monitoring.timeSeries.list spanner.instances.get |
[インスタンスの詳細] ページまたは [データベースの詳細] ページの [モニタリング] タブでグラフを確認する |
spanner.backupOperations.list |
バックアップ オペレーションの一覧を取得する |
spanner.databases.list |
[インスタンスの詳細] ページでデータベースの一覧を確認する |
resourcemanager.projects.get spanner.instances.list |
[インスタンス] ページでインスタンスの一覧を確認する |
spanner.databaseOperations.list |
復元オペレーションの一覧を確認する |
spanner.databases.getIamPolicy |
[データベースの詳細] ページの [権限] タブで一覧を確認する |
spanner.instances.getIamPolicy |
[インスタンス] ページの [権限] タブで一覧を確認する |
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 |
次のステップ
- Identity and Access Management の詳細を確認する。
- Spanner データベース、インスタンス、プロジェクトの IAM ロールを適用する Google Cloud 方法について確認する。
- Spanner などの Google Cloud リソースへのインターネットからのアクセスを制御する方法を確認する。