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.bulkDelete | 
データベースからエンティティを一括削除します。 | |
datastore.databases.get | 
トランザクションを開始またはロールバックします。 空のミューテーションで commit します。  | 
|
datastore.databases.import | 
データベースにエンティティをインポートします。 | |
datastore.databases.getMetadata | 
データベースからメタデータを読み取ります。 | |
datastore.databases.list | 
プロジェクト内のデータベースを一覧表示します。 | |
datastore.databases.create | 
データベースを作成します。 | |
datastore.databases.update | 
データベースを更新します。 | |
datastore.databases.delete | 
データベースを削除する。 | |
datastore.databases.clone | 
データベースのクローンを作成します。 
 
 バインディングを一覧表示してタグ バインディングが正常に設定されているかどうかを確認する場合は、次の追加の権限が必要です。 
  | 
|
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 | 
バックアップからデータベースを復元します。 | |
| 分析情報の権限名 | 説明 | |
datastore.insights.get | 
リソースの分析情報を取得する | 
事前定義ロール
IAM では、Datastore のすべての API メソッドで、API リクエストを行うアカウントがリソースの使用に必要な権限を保持していることが要求されます。権限を付与するには、ユーザー、グループ、またはサービス アカウントにロールを付与するポリシーを設定します。オーナー、編集者、閲覧者という基本ロール以外に、Datastore モードの Firestore のロールをプロジェクトのユーザーに付与できます。
次の表に、Datastore モードの Firestore の IAM ロールを示します。1 つのユーザー、グループ、またはサービス アカウントに複数のロールを付与できます。
| ロール | 権限 | 説明 | 
|---|---|---|
roles/datastore.owner | 
appengine.applications.getdatastore.*resourcemanager.projects.getresourcemanager.projects.list | 
データベース インスタンスへの完全アクセス権。 Datastore Adminのアクセス権については、 appengine.appAdmin ロールをプリンシパルに付与します。 | 
roles/datastore.user | 
appengine.applications.getdatastore.databases.getdatastore.databases.getMetadatadatastore.databases.listdatastore.entities.*datastore.indexes.listdatastore.namespaces.getdatastore.namespaces.listdatastore.statistics.getdatastore.statistics.listresourcemanager.projects.getresourcemanager.projects.list | 
Datastore モード データベース内のデータへの読み取り、書き込みアクセス権。アプリケーション デベロッパーとサービス アカウント向け。 | 
roles/datastore.viewer | 
appengine.applications.getdatastore.databases.getdatastore.databases.getMetadatadatastore.databases.listdatastore.entities.getdatastore.entities.listdatastore.indexes.getdatastore.indexes.listdatastore.namespaces.getdatastore.namespaces.listdatastore.statistics.getdatastore.statistics.listresourcemanager.projects.getresourcemanager.projects.listdatastore.insights.get | 
すべての Datastore モード データベース リソースへの読み取りアクセス権。 | 
roles/datastore.importExportAdmin | 
appengine.applications.getdatastore.databases.exportdatastore.databases.getMetadatadatastore.databases.importdatastore.operations.canceldatastore.operations.getdatastore.operations.listresourcemanager.projects.getresourcemanager.projects.list | 
インポートとエクスポートを管理するための完全アクセス権。 | 
roles/datastore.bulkAdmin | 
resourcemanager.projects.getresourcemanager.projects.listdatastore.databases.getMetadatadatastore.databases.bulkDeletedatastore.operations.canceldatastore.operations.getdatastore.operations.list | 
一括オペレーションの管理に必要な完全アクセス権。 | 
roles/datastore.indexAdmin | 
appengine.applications.getdatastore.databases.getMetadatadatastore.indexes.*datastore.operations.getdatastore.operations.listresourcemanager.projects.getresourcemanager.projects.list | 
インデックスの定義を管理する完全アクセス権 | 
roles/datastore.keyVisualizerViewer | 
datastore.databases.getMetadatadatastore.keyVisualizerScans.getdatastore.keyVisualizerScans.listresourcemanager.projects.getresourcemanager.projects.list | 
Key Visualizer スキャンに対する完全アクセス権。 | 
roles/datastore.backupSchedulesViewer | 
  datastore.backupSchedules.getdatastore.backupSchedules.list | 
Datastore モード データベースのバックアップ スケジュールに対する読み取りアクセス権。 | 
roles/datastore.backupSchedulesAdmin | 
  datastore.backupSchedules.getdatastore.backupSchedules.listdatastore.backupSchedules.createdatastore.backupSchedules.updatedatastore.backupSchedules.deletedatastore.databases.listdatastore.databases.getMetadata | 
Datastore モード データベースのバックアップ スケジュールに対する完全アクセス権。 | 
roles/datastore.backupsViewer | 
  datastore.backups.getdatastore.backups.list | 
Datastore モードのロケーション内のバックアップ情報への読み取りアクセス権。 | 
roles/datastore.backupsAdmin | 
  datastore.backups.getdatastore.backups.listdatastore.backups.delete | 
Datastore モードのロケーション内のバックアップに対する完全アクセス権。 | 
roles/datastore.restoreAdmin | 
  datastore.backups.getdatastore.backups.listdatastore.backups.restoreDatabasedatastore.databases.listdatastore.databases.createdatastore.databases.getMetadatadatastore.operations.listdatastore.operations.get | 
Datastore モードのバックアップを新しいデータベースに復元する機能。また、このロールによって、新しいバックアップを作成できるようになります。バックアップから復元する必要はありません。 | 
roles/datastore.cloneAdmin | 
  datastore.databases.clonedatastore.databases.listdatastore.databases.createdatastore.databases.getMetadatadatastore.operations.listdatastore.operations.get | 
Datastore モードのデータベースを新しいデータベースにクローン作成する機能。また、このロールによって、新しいバックアップを作成できるようになります。クローンを作成する必要はありません。 | 
roles/datastore.statisticsViewer | 
  resourcemanager.projects.getresourcemanager.projects.listdatastore.databases.getMetadatadatastore.insights.getdatastore.keyVisualizerScans.getdatastore.keyVisualizerScans.listdatastore.statistics.listdatastore.statistics.get | 
分析情報、統計、Key Visualizer スキャンに対する読み取りアクセス権。 | 
カスタムロール
事前定義されたロールがビジネス要件に合っていない場合は、指定した権限を含むカスタムロールを独自に定義できます。
タグの作成と管理に必要なロール
作成アクションまたは復元アクションでタグが表される場合は、一部のロールが必要です。データベース リソースに関連付ける前にタグの Key-Value ペアを作成する方法については、タグの作成と管理をご覧ください。
次の権限が必要です。
タグを表示
datastore.databases.listTagBindingsdatastore.databases.listEffectiveTags
リソースのタグを管理する
タグ値を適用するデータベース リソースには、次の権限が必要です。
datastore.databases.createTagBinding
API メソッドに必要な権限
発信者が各メソッドを呼び出す際に必要となる権限のリストを次の表に示します。
| メソッド | 必要な権限 | 
|---|---|
allocateIds | 
datastore.entities.allocateIds | 
beginTransaction | 
datastore.databases.get | 
commit: 空のミューテーション | 
datastore.databases.get | 
insert の commit | 
datastore.entities.create | 
upsert の commit | 
datastore.entities.createdatastore.entities.update | 
update の commit | 
datastore.entities.update | 
delete の commit | 
datastore.entities.delete | 
lookup の commit | 
datastore.entities.getメタデータまたは統計情報に関連する検索の場合には、メタデータと統計情報に必要な権限をご覧ください。  | 
query の commit | 
datastore.entities.listdatastore.entities.get(クエリがキーのみのクエリではない場合)メタデータまたは統計情報に関連するクエリの場合には、メタデータと統計情報に必要な権限をご覧ください。  | 
lookup | 
datastore.entities.getメタデータまたは統計情報に関連する検索の場合には、メタデータと統計情報に必要な権限をご覧ください。  | 
rollback | 
datastore.databases.get | 
runQuery | 
datastore.entities.listdatastore.entities.get(クエリがキーのみのクエリではない場合)メタデータまたは統計情報に関連するクエリの場合には、メタデータと統計情報に必要な権限をご覧ください。  | 
種類を指定しないクエリ の runQuery | 
datastore.entities.getdatastore.entities.listdatastore.statistics.getdatastore.statistics.list | 
メタデータと統計情報に必要な権限
次の表に、メタデータと統計情報に関するメソッドを呼び出す際に必要な権限を示します。
| メソッド | 必要な権限 | 
|---|---|
__Stat _*__ 一致する種類名を持つエンティティの lookup | 
datastore.statistics.get | 
__Stat_*__ と一致する名前の種類を使用する runQuery | 
datastore.statistics.getdatastore.statistics.list | 
種類 __namespace__ を使用する runQuery | 
datastore.namespaces.getdatastore.namespaces.list | 
Datastore モード データベース インスタンスを作成するために必要な役割
新しい Datastore モード データベース インスタンスを作成するには、オーナーのロールまたは Datastore オーナーのロールが必要です。
Datastore モード データベースではアクティブな App Engine アプリケーションが必要です。プロジェクトにアプリケーションがない場合は、Datastore モードの Firestore によりアプリケーションが作成されます。その場合、appengine.applications.create 権限(オーナーのロールまたは IAM カスタムロールに含まれている権限)が必要です。
ロール変更のレイテンシ
Datastore モードの Firestore は IAM 権限を 5 分間キャッシュに保存します。そのため、ロールの変更が反映されるまでに最大で 5 分かかります。
IAM の管理
IAM ポリシーは、 Google Cloud コンソール、IAM メソッド、Google Cloud CLI を使用して取得と設定ができます。
- Google Cloud コンソールについては、 Google Cloud コンソールによるアクセス制御をご覧ください。
 - 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 ロールを付与する。