Google Cloud には Identity and Access Management(IAM)機能があり、特定の Google Cloud リソースに対するアクセス権を詳細に設定できるため、他のリソースへの不要なアクセスを防ぐことができます。このページでは、Datastore モードの Firestore の IAM ロールについて説明します。IAM の詳細については、IAM のドキュメントを参照してください。
IAM を使用すると、最小限の権限のセキュリティ原則を導入できるため、リソースに対する必要なアクセス権のみ付与できます。
IAM では、IAM ポリシーを設定して、誰(どのユーザー)に、どのリソースに対するどのアクセス権(役割)を付与するかを制御することができます。IAM ポリシーは、特定のロールをユーザーに付与することで、そのユーザーに特定の権限を付与します。たとえば、ユーザーに datastore.indexAdmin
のロールを付与されたユーザーは、インデックスの作成、変更、削除、一覧表示、表示を行うことができます。
権限とロール
ここでは、Datastore モードの Firestore でサポートされる権限とロールを簡単に説明します。
権限
次の表に、Datastore モードの Firestore でサポートされる権限を示します。
データベースの権限名 | 説明 | |
---|---|---|
datastore.databases.export |
データベースからエンティティをエクスポートします。 | |
datastore.databases.get |
トランザクションを開始またはロールバックします。 空のミューテーションを使用して commit します。 |
|
datastore.databases.import |
データベースにエンティティをインポートします。 | |
datastore.databases.getMetadata |
データベースからメタデータを読み取ります。 | |
datastore.databases.list |
プロジェクト内のデータベースを一覧表示します。 | |
datastore.databases.create |
データベースを作成します。 | |
datastore.databases.update |
データベースを更新します。 | |
datastore.databases.delete |
データベースを削除します。 | |
datastore.databases.createTagBinding |
データベースのタグ バインディングを作成します。 | |
datastore.databases.deleteTagBinding |
データベースのタグ バインディングを削除します。 | |
datastore.databases.listTagBindings |
データベースのすべてのタグ バインディングを一覧表示します。 | |
datastore.databases.listEffectiveTagBindings |
データベースの有効なタグ バインディングを一覧表示します。 | |
エンティティの権限名 | 説明 | |
datastore.entities.allocateIds |
不完全なキーパスを使用して、キーの ID を割り当てます。 | |
datastore.entities.create |
エンティティを作成します。 | |
datastore.entities.delete |
エンティティを削除します。 | |
datastore.entities.get |
エンティティを読み取ります。 | |
datastore.entities.list |
プロジェクト内のエンティティのキーを一覧表示します。 (エンティティ データへのアクセスには datastore.entities.get が必要です。) |
|
datastore.entities.update |
エンティティを更新します。 | |
インデックスの権限名 | 説明 | |
datastore.indexes.create |
インデックスを作成します。 | |
datastore.indexes.delete |
インデックスを削除します。 | |
datastore.indexes.get |
インデックスからメタデータを読み取ります。 | |
datastore.indexes.list |
プロジェクト内のインデックスを一覧表示します。 | |
datastore.indexes.update |
インデックスを更新します。 | |
名前空間の権限名 | 説明 | |
datastore.namespaces.get |
名前空間からメタデータを取得します。 | |
datastore.namespaces.list |
プロジェクト内の名前空間を一覧表示します。 | |
オペレーションの権限名 | 説明 | |
datastore.operations.cancel |
長時間実行オペレーションをキャンセルします。 | |
datastore.operations.delete |
長時間実行オペレーションを削除します。 | |
datastore.operations.get |
長時間実行オペレーションの最新の状態を取得します。 | |
datastore.operations.list |
長時間実行オペレーションを一覧表示します。 | |
プロジェクトの権限名 | 説明 | |
resourcemanager.projects.get |
プロジェクト内のリソースを参照します。 | |
resourcemanager.projects.list |
所有するプロジェクトをリスト表示します。 | |
統計情報の権限名 | 説明 | |
datastore.statistics.get |
統計情報のエンティティを取得します。 | |
datastore.statistics.list |
統計情報のエンティティのキーを一覧表示します。 (統計情報のエンティティ データへのアクセスには datastore.statistics.get が必要です。) |
|
App Engine の権限名 | 説明 | |
appengine.applications.get |
すべての App Engine アプリケーション構成に読み取り専用でアクセスします。 | |
ロケーションの権限名 | 説明 | |
datastore.locations.get |
データベースの場所の詳細を取得します。新しいデータベースの作成に必要です。 | |
datastore.locations.list |
使用可能なデータベースの場所を一覧表示します。新しいデータベースの作成に必要です。 | |
Key Visualizer の権限名 | 説明 | |
datastore.keyVisualizerScans.get |
Key Visualizer スキャンの詳細を取得します。 | |
datastore.keyVisualizerScans.list |
使用可能な Key Visualizer スキャンを一覧表示します。 | |
バックアップ スケジュールの権限名 | 説明 | |
datastore.backupSchedules.get |
バックアップ スケジュールの詳細情報を取得します。 | |
datastore.backupSchedules.list |
利用可能なバックアップ スケジュールを一覧表示します。 | |
datastore.backupSchedules.create |
バックアップ スケジュールを作成する | |
datastore.backupSchedules.update |
バックアップ スケジュールを更新する | |
datastore.backupSchedules.delete |
バックアップ スケジュールを削除する | |
バックアップの権限名 | 説明 | |
datastore.backups.get |
バックアップの詳細情報を取得します。 | |
datastore.backups.list |
利用可能なバックアップを一覧表示します。 | |
datastore.backups.delete |
バックアップを削除します。 | |
datastore.backups.restoreDatabase |
バックアップからデータベースを復元します。 |
事前定義ロール
IAM では、Datastore のすべての API メソッドで、API リクエストを行うアカウントがリソースの使用に必要な権限を保持していることが要求されます。権限を付与するには、ユーザー、グループ、またはサービス アカウントにロールを付与するポリシーを設定します。オーナー、編集者、閲覧者という基本ロール以外に、Datastore モードの Firestore のロールをプロジェクトのユーザーに付与できます。
次の表に、Datastore モードの Firestore の IAM ロールを示します。1 つのユーザー、グループ、またはサービス アカウントに複数のロールを付与できます。
ロール | 権限 | 説明 |
---|---|---|
roles/datastore.owner |
appengine.applications.get datastore.* resourcemanager.projects.get resourcemanager.projects.list |
データベース インスタンスへの完全アクセス権。 Datastore Adminのアクセス権については、 appengine.appAdmin ロールをプリンシパルに付与します。 |
roles/datastore.user |
appengine.applications.get datastore.databases.get datastore.databases.getMetadata datastore.databases.list datastore.entities.* datastore.indexes.list datastore.namespaces.get datastore.namespaces.list datastore.statistics.get datastore.statistics.list resourcemanager.projects.get resourcemanager.projects.list |
Datastore モード データベース内のデータへの読み取り、書き込みアクセス権。アプリケーション デベロッパーとサービス アカウント向け。 |
roles/datastore.viewer |
appengine.applications.get datastore.databases.get datastore.databases.getMetadata datastore.databases.list datastore.entities.get datastore.entities.list datastore.indexes.get datastore.indexes.list datastore.namespaces.get datastore.namespaces.list datastore.statistics.get datastore.statistics.list resourcemanager.projects.get resourcemanager.projects.list |
すべての Datastore モード データベース リソースへの読み取りアクセス権。 |
roles/datastore.importExportAdmin |
appengine.applications.get datastore.databases.export datastore.databases.getMetadata datastore.databases.import datastore.operations.cancel datastore.operations.get datastore.operations.list resourcemanager.projects.get resourcemanager.projects.list |
インポートとエクスポートを管理するための完全アクセス権。 |
roles/datastore.indexAdmin |
appengine.applications.get datastore.databases.getMetadata datastore.indexes.* resourcemanager.projects.get resourcemanager.projects.list |
インデックスの定義を管理する完全アクセス権 |
roles/datastore.keyVisualizerViewer |
datastore.databases.getMetadata datastore.keyVisualizerScans.get datastore.keyVisualizerScans.list resourcemanager.projects.get resourcemanager.projects.list |
Key Visualizer スキャンに対する完全アクセス権。 |
roles/datastore.backupSchedulesViewer |
datastore.backupSchedules.get datastore.backupSchedules.list |
Datastore モード データベースのバックアップ スケジュールに対する読み取りアクセス権。 |
roles/datastore.backupSchedulesAdmin |
datastore.backupSchedules.get datastore.backupSchedules.list datastore.backupSchedules.create datastore.backupSchedules.update datastore.backupSchedules.delete datastore.databases.list datastore.databases.getMetadata |
Datastore モード データベースのバックアップ スケジュールに対する完全アクセス権。 |
roles/datastore.backupsViewer |
datastore.backups.get datastore.backups.list |
Datastore モードのロケーション内のバックアップ情報への読み取りアクセス権。 |
roles/datastore.backupsAdmin |
datastore.backups.get datastore.backups.list datastore.backups.delete |
Datastore モードのロケーション内のバックアップへの完全アクセス権。 |
roles/datastore.restoreAdmin |
datastore.backups.get datastore.backups.list datastore.backups.restoreDatabase datastore.databases.list datastore.databases.create datastore.databases.getMetadata datastore.operations.list datastore.operations.get |
Datastore モードのバックアップを新しいデータベースに復元する機能。また、このロールによって、新しいバックアップを作成できるようになります。バックアップから復元する必要はありません。 |
カスタムの役割
事前定義された役割がお客様のビジネス要件に合っていない場合は、任意に指定した権限を含むカスタムの役割を独自に定義できます。
API メソッドに必要な権限
発信者が各メソッドを呼び出す際に必要となる権限のリストを次の表に示します。
メソッド | 必要な権限 |
---|---|
allocateIds |
datastore.entities.allocateIds |
beginTransaction |
datastore.databases.get |
空のミューテーションを含む commit |
datastore.databases.get |
insert の commit |
datastore.entities.create |
upsert の commit |
datastore.entities.create datastore.entities.update |
update の commit |
datastore.entities.update |
delete の commit |
datastore.entities.delete |
lookup の commit |
datastore.entities.get メタデータまたは統計情報に関連する検索の場合には、メタデータと統計情報に必要な権限をご覧ください。 |
query の commit |
datastore.entities.list datastore.entities.get (クエリがキーのみのクエリではない場合)メタデータまたは統計情報に関連するクエリの場合には、メタデータと統計情報に必要な権限をご覧ください。 |
lookup |
datastore.entities.get メタデータまたは統計情報に関連する検索の場合には、メタデータと統計情報に必要な権限をご覧ください。 |
rollback |
datastore.databases.get |
runQuery |
datastore.entities.list datastore.entities.get (クエリがキーのみのクエリではない場合)メタデータまたは統計情報に関連するクエリの場合には、メタデータと統計情報に必要な権限をご覧ください。 |
種類を指定しないクエリ の runQuery |
datastore.entities.get datastore.entities.list datastore.statistics.get datastore.statistics.list |
メタデータと統計情報に必要な権限
次の表に、メタデータと統計情報に関するメソッドを呼び出す際に必要な権限を示します。
メソッド | 必要な権限 |
---|---|
__Stat_*__ 一致する種類名を持つエンティティの lookup |
datastore.statistics.get |
__Stat_*__ と一致する名前の種類を使用する runQuery |
datastore.statistics.get datastore.statistics.list |
種類 __namespace__ を使用する runQuery |
datastore.namespaces.get datastore.namespaces.list |
Datastore モード データベース インスタンスを作成するために必要な役割
新しい Datastore モード データベース インスタンスを作成するには、オーナーのロールまたは Datastore オーナーのロールが必要です。
Datastore モード データベースではアクティブな App Engine アプリケーションが必要です。プロジェクトにアプリケーションがない場合は、Datastore モードの Firestore によりアプリケーションが作成されます。その場合、appengine.applications.create
権限(オーナーのロールまたは IAM カスタムロールに含まれている権限)が必要です。
ロール変更のレイテンシ
Datastore モードの Firestore は IAM 権限を 5 分間キャッシュに保存します。そのため、ロールの変更が反映されるまでに最大で 5 分かかります。
IAM の管理
IAM ポリシーは、Google Cloud Console、IAM メソッド、Google Cloud CLI を使用して取得と設定ができます。
- Google Cloud Console については、Google Cloud Console によるアクセス制御をご覧ください。
- IAM メソッドについては、API によるアクセス制御をご覧ください。
- gcloud CLI については、gcloud ツールによるアクセス制御をご覧ください。
条件付きアクセス権限を構成する
IAM Conditions を使用して、条件付きアクセス制御を定義して適用できます。
たとえば、次の条件では、指定した日付までプリンシパルに datastore.user
ロールが割り当てられます。
{
"role": "roles/datastore.user",
"members": [
"user:travis@example.com"
],
"condition": {
"title": "Expires_December_1_2023",
"description": "Expires on December 1, 2023",
"expression":
"request.time < timestamp('2023-12-01T00:00:00.000Z')"
}
}
一時的なアクセス権の IAM Conditions を定義する方法については、一時的なアクセス権を構成するをご覧ください。
1 つ以上のデータベースにアクセスするための IAM Conditions を構成する方法については、データベース アクセス条件を構成するをご覧ください。
次のステップ
- IAM の詳細について学習する。
- IAM ロールを付与する。