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.instancePartitions.create |
パーティションを作成します。 |
spanner.instancePartitions.get |
特定のパーティションの構成を取得します。 |
spanner.instancePartitions.list |
パーティションを一覧表示します。 |
spanner.instancePartitions.update |
パーティションを更新します。 |
spanner.instancePartitions.delete |
パーティションを削除します。 |
パーティション オペレーション
Spanner パーティション オペレーションには次の権限が適用されます。詳細については、REST API と RPC API のインスタンス パーティション リファレンスをご覧ください。
インスタンス パーティション オペレーションの権限名 | 説明 |
---|---|
spanner.instancePartitionOperations.list |
パーティション オペレーションを一覧表示します。 |
spanner.instancePartitionOperations.get |
特定のパーティション オペレーションを取得します。 |
spanner.instancePartitionOperations.cancel |
パーティション オペレーションをキャンセルします。 |
spanner.instancePartitionOperations.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.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 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`. |
|
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. |
|
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 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/viewer |
スキーマとインスタンスのメタデータを一覧表示または取得できます。データベースに対して読み取りや SQL クエリも実行できます。 |
roles/editor |
roles/viewer で許可されるすべての操作を実行できます。インスタンスとデータベースを作成し、インスタンスやデータベースの作成、データベースへの書き込みもできます。 |
roles/owner |
roles/editor で許可されるすべての操作を実行できます。データベースやインスタンスに対するアクセス権を変更できます。 |
カスタムロール
Spanner の事前定義ロールがビジネス要件に合っていない場合は、指定した権限を含むカスタムロールを独自に定義できます。
カスタムロールを作成する前に、実行する必要のあるタスクを特定する必要があります。これで各タスクに必要な権限を特定し、これらの権限をカスタムロールに追加できます。
サービス アカウント タスクのカスタムロール
多くのタスクでは、カスタムロールに追加する必要のある権限がはっきりしています。たとえば、サービス アカウントでデータベースを作成できるようにするには、spanner.databases.create
という権限をカスタムロールに追加します。
ただし、Spanner テーブルでデータを読み書きする場合は、カスタムロールにさまざまな権限を追加する必要があります。次の表に、データの読み取りと書き込みに必要な権限を示します。
サービス アカウント タスク | 必要な権限 |
---|---|
データを読み取る |
spanner.databases.select
|
データを挿入、更新、削除する |
spanner.databases.beginOrRollbackReadWriteTransaction
|
バックアップの作成 |
spanner.backups.create
|
データベースの復元 |
spanner.databases.create
|
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 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 データベース、インスタンス、Google Cloud プロジェクトの IAM ロールの適用方法について学習する。
- インターネットから Spanner などの Google Cloud リソースへのアクセスを制御する方法を学習する。