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 データベースのオペレーションに適用される権限は次のとおりです。詳細については、REST API と RPC API のデータベース リファレンスをご覧ください。
データベース オペレーションの権限名 | 説明 |
---|---|
spanner.databaseOperations.list |
データベースを一覧表示し、データベース オペレーションを復元します。 |
spanner.databaseOperations.get |
特定のデータベース オペレーションを取得します。 |
spanner.databaseOperations.cancel |
データベース オペレーションをキャンセルします。 |
spanner.databaseOperations.delete |
データベース オペレーションを削除します。 |
バックアップ
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 事前定義ロールを含むアクセス制御と、各ロールに関連付けられている権限を示します。
ロール | 権限 |
---|---|
Cloud Spanner 管理者( Google Cloud プロジェクト内のすべての Cloud Spanner リソースへのすべてのアクセス権があります。このロールを持つプリンシパルは次のことができます。
このロールを付与できる最下位レベルのリソース:
5 つのオーナー権限が含まれる |
monitoring.timeSeries.list resourcemanager.projects.get resourcemanager.projects.list spanner.*
|
Cloud Spanner バックアップ管理者( このロールを持つプリンシパルは次のことができます。
このロールはバックアップからデータベースを復元できません。 このロールを付与できる最下位レベルのリソース:
3 つのオーナー権限が含まれる |
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 manage_accounts spanner.backups.setIamPolicy spanner.backups.update spanner.databases.createBackup spanner.databases.get spanner.databases.list
manage_accounts
spanner.
manage_accounts
spanner. spanner.instances.get spanner.instances.list spanner. spanner. |
Cloud Spanner バックアップ書き込み( このロールは、バックアップの作成を自動化するスクリプトで使用されます。このロールを持つプリンシパルはバックアップを作成できますが、バックアップの更新や削除はできません。 このロールを付与できる最下位レベルのリソース:
|
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 データベース管理者( このロールを持つプリンシパルは次のことができます。
このロールを付与できる最下位レベルのリソース:
3 つのオーナー権限が含まれる |
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 manage_accounts spanner.databases.setIamPolicy spanner.databases.update spanner.databases.updateDdl spanner. spanner.databases.write
manage_accounts
spanner.
manage_accounts
spanner. spanner.instances.get spanner.instances.getIamPolicy spanner.instances.list spanner. spanner. spanner.sessions.*
|
Cloud Spanner データベース読み取り( このロールを持つプリンシパルは次のことができます。
このロールを付与できる最下位レベルのリソース:
|
spanner. spanner.databases.getDdl spanner. spanner. spanner.databases.read spanner.databases.select spanner.instances.get spanner.sessions.*
|
Cloud Spanner データベース ロールのユーザー( Cloud Spanner のきめ細かいアクセス制御ユーザーの IAM ロールと組み合わせて、個々の Spanner データベース ロールに権限を付与します。必要な Spanner データベース ロールごとに条件(リソースタイプ「spanner.googleapis.com/DatabaseRole」、「/YOUR_SPANNER_DATABASE_ROLE」で終わるリソース名など)を追加します。 |
spanner.databaseRoles.use |
Cloud Spanner データベース ユーザー( このロールを持つプリンシパルは次のことができます。
このロールを付与できる最下位レベルのリソース:
|
spanner.databaseOperations.*
spanner. spanner. spanner. spanner.databases.getDdl spanner. spanner. spanner.databases.read spanner.databases.select spanner.databases.updateDdl spanner.databases.write spanner.instances.get spanner.sessions.*
|
Cloud Spanner のきめ細かいアクセス制御ユーザー( Spanner のきめ細かいアクセス制御フレームワークを使用する権限を付与します。特定のデータベース ロールへのアクセス権を付与するには、「roles/spanner.databaseRoleUser」IAM ロールと必要な条件も追加します。 |
spanner.databaseRoles.list spanner. |
Cloud Spanner 復元管理者( このロールを持つプリンシパルは、バックアップからデータベースを復元できます。 バックアップを別のインスタンスに復元する必要がある場合は、このロールをプロジェクト レベルまたは両方のインスタンスに適用します。このロールはバックアップを作成できません。 このロールを付与できる最下位レベルのリソース:
2 つのオーナー権限が含まれる |
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
manage_accounts
spanner.
manage_accounts
spanner. spanner.instances.get spanner.instances.list spanner. spanner. |
Cloud Spanner 閲覧者( このロールを持つプリンシパルは次のことができます。
たとえば、このロールと このロールは、Google Cloud プロジェクト レベルで Google Cloud Console の Cloud Spanner リソースを操作するユーザーに対して推奨されます。 このロールを付与できる最下位レベルのリソース:
|
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 ロールの適用方法について学習する。