Cloud Spanner のアクセス制御

概要

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

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

権限

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

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

インスタンス構成

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

インスタンス構成の権限名 説明
spanner.instanceConfigs.list インスタンス構成の一覧を取得します。
spanner.instanceConfigs.get インスタンス構成を取得します。

インスタンス

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

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

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

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

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

データベース

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

データベースの権限名 説明
spanner.databases.beginPartitionedDmlTransaction パーティション化されたデータ操作言語(DML)ステートメントを実行します。
spanner.databases.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 Cloud Spanner データベースで読み取り専用トランザクションを開始します。
spanner.databases.beginOrRollbackReadWriteTransaction Cloud Spanner データベースで読み取り専用トランザクションを開始またはロールバックします。
spanner.databases.read 読み取り API を使用してデータベースから読み取ります。
spanner.databases.select データベースに SQL select ステートメントを実行します。
spanner.databases.write データベースに書き込みます。
spanner.databases.drop データベースを削除します。

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

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

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

セッション

Cloud Spanner セッションに適用される権限は次のとおりです。詳細については、データベース リファレンス(RESTRPC)をご覧ください。

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

事前定義された役割

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

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

次の表に、Cloud Spanner IAM の事前定義された役割と、各役割に関連付けられている権限を示します。

役割 権限 説明
roles/spanner.admin

ユーザーの役割)
resourcemanager.projects.get
spanner.databases.*
spanner.databaseOperations.*
spanner.instances.*
spanner.instanceConfigs.*
spanner.instanceOperations.*
spanner.sessions.*
Google Cloud プロジェクト レベルで付与することをおすすめします。Google Cloud プロジェクト内のすべての Cloud Spanner リソースを管理できます。この役割を持つプリンシパルは次のことができます。
  • 他のプリンシパルにプロジェクト内のすべての Cloud Spanner リソースに対する権限を付与または取り消す。
  • 請求対象の Cloud Spanner リソースの割り振りと削除を行う。
  • Cloud Spanner リソースに取得 / 一覧取得 / 変更オペレーションを実行する。
  • プロジェクト内の Cloud Spanner データベースに対して読み取り / 書き込みを行う。
  • プロジェクトのメタデータを取得する。
roles/spanner.databaseAdmin

ユーザーの役割)
resourcemanager.projects.get
spanner.databases.*
spanner.databaseOperations.*
spanner.instances.list
spanner.instances.get
spanner.instances.getIamPolicy
spanner.sessions.*
Google Cloud プロジェクト レベルで付与することをおすすめします。この役割を持つプリンシパルは次のことができます。
  • プロジェクト内の Cloud Spanner インスタンスを取得 / 一覧取得する。
  • 許可されたインスタンス内でデータベースを作成 / 一覧作成 / 削除する。
  • プロジェクト内のデータベースに対する権限を付与 / 取り消す。
  • プロジェクト内の Cloud Spanner データベースに対して読み取り / 書き込みを行う。
roles/spanner.databaseReader

マシンの役割)
spanner.databases.beginReadOnlyTransaction
spanner.databases.getDdl
spanner.databases.read
spanner.databases.select
spanner.sessions.create
spanner.sessions.delete
spanner.sessions.get
データベース レベルで付与することをおすすめします。この役割を持つプリンシパルは次のことができます。
  • Cloud Spanner データベースから読み取る。
  • データベースに SQL クエリを実行する。
  • データベースのスキーマを表示する。
roles/spanner.databaseUser

マシンの役割)
spanner.databases.beginOrRollbackReadWriteTransaction
spanner.databases.beginPartitionedDmlTransaction
spanner.databases.beginReadOnlyTransaction
spanner.databases.getDdl
spanner.databases.read
spanner.databases.select
spanner.databases.updateDdl
spanner.databases.write
spanner.sessions.create
spanner.sessions.delete
spanner.sessions.get
データベース レベルで付与することをおすすめします。この役割を持つプリンシパルは次のことができます。
  • Cloud Spanner データベースに読み取り / 書き込みを行う。
  • データベースに SQL クエリを実行する(DML、パーティション化された DML を含む)。
  • データベースのスキーマを表示 / 更新する。
roles/spanner.viewer

ユーザーの役割)
resourcemanager.projects.get
spanner.databases.list
spanner.instances.get
spanner.instances.list
Google Cloud プロジェクト レベルで付与することをおすすめします。この役割を持つプリンシパルは次のことができます。
  • すべての Cloud Spanner インスタンスを表示する(ただし、インスタンスの変更はできません)。
  • すべての Cloud Spanner データベースを表示する(ただし、データベースの変更やデータベースからの読み取りはできません)。
たとえば、この役割と roles/spanner.databaseUser 役割を組み合わせると、特定のデータベースに対するアクセスがユーザーに許可されますが、他のインスタンスとデータベースに対しては表示のみが許可されます。
ユーザーが Google Cloud Platform Console で Cloud Spanner リソースを操作するには、Google Cloud プロジェクト レベルでこの役割が必要になります。

基本の役割

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

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

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

カスタムの役割

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

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

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

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

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

サービス アカウント タスク 必要な権限
データを読み取る
  • spanner.databases.select
  • spanner.sessions.create
  • spanner.sessions.delete
データを挿入、更新、削除する
  • spanner.databases.beginOrRollbackReadWriteTransaction
  • spanner.databases.write
  • spanner.sessions.create
  • spanner.sessions.delete

GCP Console タスクのカスタムの役割

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

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

次の表に、GCP Console でのアクションに必要な権限を示します。

アクション 権限
[インスタンス] ページでインスタンスのリストを表示する
  • 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

Cloud Spanner IAM ポリシーの管理

Cloud 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

次のステップ

このページは役立ちましたか?評価をお願いいたします。

フィードバックを送信...

Cloud Spanner のドキュメント