Identity and Access Management(IAM)を使用すると、プロジェクト レベル、Spanner インスタンス レベル、Spanner データベース レベルで、Cloud 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 |
Cloud 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 Cloud Spanner resources in a Google Cloud project. A principal with this role can:
Lowest-level resources where you can grant this role:
|
monitoring.timeSeries.list resourcemanager.projects.get resourcemanager.projects.list spanner.*
|
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:
|
monitoring.timeSeries.list resourcemanager.projects.get resourcemanager.projects.list spanner.backupOperations.*
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. spanner. spanner.instances.get spanner.instances.list spanner. spanner. |
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:
|
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 |
Cloud Spanner Database Admin( A principal with this role can:
Lowest-level resources where you can grant this role:
|
monitoring.timeSeries.list resourcemanager.projects.get resourcemanager.projects.list spanner.databaseOperations.*
spanner.databaseRoles.*
spanner. spanner. spanner. spanner.databases.create spanner.databases.drop spanner.databases.get spanner.databases.getDdl spanner.databases.getIamPolicy spanner.databases.list spanner. spanner. spanner.databases.read spanner.databases.select spanner.databases.setIamPolicy spanner.databases.update spanner.databases.updateDdl spanner.databases.updateTag spanner.databases.useDataBoost spanner. spanner.databases.write spanner. spanner. spanner.instances.get spanner.instances.getIamPolicy spanner.instances.list spanner. spanner. spanner.sessions.*
|
Cloud Spanner Database Reader( A principal with this role can:
Lowest-level resources where you can grant this role:
|
spanner. spanner.databases.getDdl spanner. spanner. spanner.databases.read spanner.databases.select spanner.instances.get spanner.sessions.*
|
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`. |
spanner.databaseRoles.use |
Cloud Spanner Database User( A principal with this role can:
Lowest-level resources where you can grant this role:
|
spanner.databaseOperations.*
spanner. spanner. spanner. spanner.databases.getDdl spanner. spanner. spanner.databases.read spanner.databases.select spanner.databases.updateDdl spanner.databases.updateTag spanner.databases.write spanner.instances.get spanner.sessions.*
|
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. |
spanner.databaseRoles.list spanner. |
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:
|
monitoring.timeSeries.list resourcemanager.projects.get resourcemanager.projects.list spanner.backups.get spanner.backups.list spanner. spanner. spanner.databaseOperations.get spanner. spanner.databases.create spanner.databases.get spanner.databases.list spanner. spanner. spanner.instances.get spanner.instances.list spanner. spanner. |
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:
|
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. spanner. |
基本ロール
基本ロールは、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 Console タスクに対するカスタムの役割
Google Cloud コンソールで特定のタスクに必要な権限のリストを特定するには、そのタスクのワークフローを決定し、そのワークフローの権限をコンパイルします。たとえば、テーブル内のデータを表示するには、Google Cloud コンソールで次の手順を行います。
ステップ | 権限 |
---|---|
1. プロジェクトにアクセスする | resourcemanager.projects.get |
2. インスタンスのリストを表示する | spanner.instances.list |
3. インスタンスを選択する | spanner.instances.get |
4. データベースのリストを表示する | spanner.databases.list |
5. データベースとテーブルを選択する | spanner.databases.get 、spanner.databases.getDdl |
6. テーブル内のデータを表示する | spanner.databases.select 、spanner.sessions.create 、spanner.sessions.delete |
この例では、次の権限が必要です。
resourcemanager.projects.get
spanner.databases.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 リソースへのアクセスを制御する方法を学習する。