Identity and Access Management(IAM)を使用してリソースへのアクセスを管理します。 IAM を使用すると、特定の Google Cloud リソースに対するアクセス権を詳細に設定でき、他のリソースへの不要なアクセスを防止できます。このページでは、Cloud Firestore の IAM 権限とロールについて説明します。IAM の詳細については、IAM のドキュメントを参照してください。
IAM を使用すると、セキュリティに関する最小権限の原則を導入できるため、リソースに対する必要なアクセス権のみを付与できます。
IAM では、IAM ポリシーを設定することで、誰(どのユーザー)に、どのリソースに対するどのアクセス権(ロール)を付与するかを制御できます。IAM ポリシーは 1 つ以上のロールをユーザーに付与することで、そのユーザーに特定の権限を与えます。たとえば、datastore.indexAdmin のロールを付与されたユーザーは、インデックスの作成、変更、削除、一覧表示、表示を行うことができます。
権限とロール
このセクションでは、Cloud Firestore でサポートされている権限とロールの概要について説明します。
API メソッドに必要な権限
次の表に、各アクションを実行するために呼び出し元に必要な権限を示します。
| メソッド | 必要な権限 | |
|---|---|---|
| projects.databases.MongoDBCompatible | ||
| ListDatabases | datastore.databases.getMetadata | |
| ListIndexes | datastore.indexes.list | |
| Find | datastore.entities.getdatastore.entities.list | |
| Aggregate | datastore.entities.getdatastore.entities.list | |
| GetMore | カーソルを作成する呼び出しで必要とされた権限と同じ権限。 | |
| ListCollections | datastore.entities.list | |
| Count | datastore.entities.list | |
| Distinct | datastore.entities.getdatastore.entities.list | |
| CommitTransaction | datastore.databases.get | |
| AbortTransaction | datastore.databases.get | |
| EndSessions | datastore.databases.get | |
| KillCursors | datastore.databases.get | |
| Insert | datastore.entities.create | |
| Update | datastore.entities.getdatastore.entities.listdatastore.entities.updatedatastore.entities.create(upsert のみ) | |
| FindAndModify | datastore.entities.getdatastore.entities.listdatastore.entities.update(置換または更新のみ)datastore.entities.create(upsert のみ)datastore.entities.delete(削除のみ) | |
| CreateCollection | datastore.entities.create | |
| projects.databases.indexes | ||
| create | datastore.indexes.create | |
| delete | datastore.indexes.delete | |
| get | datastore.indexes.get | |
| list | datastore.indexes.list | |
| projects.databases | ||
| create | datastore.databases.create | |
| delete | datastore.databases.delete | |
| get | datastore.databases.getMetadata | |
| list | datastore.databases.list | |
| patch | datastore.databases.update | |
| restore | datastore.backups.restoreDatabase | |
| clone | datastore.databases.clone | データベースのクローンを作成します。 
 
 バインディングを一覧表示してタグ バインディングが正常に設定されているかどうかを確認する場合は、次の追加の権限が必要です。 
 | 
| projects.locations | ||
| get | datastore.locations.get | |
| list | datastore.locations.list | |
| projects.databases.backupschedules | ||
| get | datastore.backupSchedules.get | |
| list | datastore.backupSchedules.list | |
| create | datastore.backupSchedules.create | |
| update | datastore.backupSchedules.update | |
| delete | datastore.backupSchedules.delete | |
| projects.locations.backups | ||
| get | datastore.backups.get | |
| list | datastore.backups.list | |
| delete | datastore.backups.delete | |
| projects.databases.usercreds | ||
| get | datastore.userCreds.get | |
| list | datastore.userCreds.list | |
| create | datastore.userCreds.create | |
| enable | datastore.userCreds.update | |
| disable | datastore.userCreds.update | |
| resetPassword | datastore.userCreds.update | |
| delete | datastore.userCreds.delete | |
事前定義ロール
Cloud Firestore の API メソッドを使用して API リクエストを発行するアカウントには、リソースを使用するための適切な権限が IAM で付与されている必要があります。権限は、ユーザー、グループ、またはサービス アカウントにロールを付与するポリシーを設定することで付与されます。基本の役割であるオーナー、編集者、閲覧者に加えて、Cloud Firestore の役割をプロジェクトのユーザーに与えることができます。
次の表に、Cloud Firestore IAM ロールを示します。1 つのユーザー、グループ、またはサービス アカウントに複数のロールを付与できます。
| ロール | 権限 | 説明 | 
|---|---|---|
| roles/datastore.owner | appengine.applications.getdatastore.*resourcemanager.projects.getresourcemanager.projects.list | Cloud Firestoreに対するフルアクセス: | 
| 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 | Cloud Firestore データベース内のデータに対する読み取り / 書き込みアクセス権。アプリケーション デベロッパーとサービス アカウント向け。 | 
| 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.list | すべてのCloud Firestoreリソースに対する読み取りアクセス権。 | 
| roles/datastore.indexAdmin | appengine.applications.getdatastore.databases.getMetadatadatastore.indexes.*datastore.operations.listdatastore.operations.getresourcemanager.projects.getresourcemanager.projects.list | インデックスの定義を管理する完全アクセス権 | 
| roles/datastore.backupSchedulesViewer | datastore.backupSchedules.getdatastore.backupSchedules.list | Cloud Firestore データベースのバックアップ スケジュールに対する読み取りアクセス権。 | 
| roles/datastore.backupSchedulesAdmin | datastore.backupSchedules.getdatastore.backupSchedules.listdatastore.backupSchedules.createdatastore.backupSchedules.updatedatastore.backupSchedules.deletedatastore.databases.listdatastore.databases.getMetadata | Cloud Firestore データベースのバックアップ スケジュールに対する完全アクセス権。 | 
| roles/datastore.backupsViewer | datastore.backups.getdatastore.backups.list | Cloud Firestore のロケーション内のバックアップ情報への読み取りアクセス権。 | 
| roles/datastore.backupsAdmin | datastore.backups.getdatastore.backups.listdatastore.backups.delete | Cloud Firestore のロケーション内のバックアップに対する完全アクセス権。 | 
| roles/datastore.restoreAdmin | datastore.backups.getdatastore.backups.listdatastore.backups.restoreDatabasedatastore.databases.listdatastore.databases.createdatastore.databases.getMetadatadatastore.operations.listdatastore.operations.get | Cloud Firestore バックアップを新しいデータベースに復元する機能。また、このロールによって、新しいバックアップを作成できるようになります。バックアップから復元する必要はありません。 | 
| roles/datastore.cloneAdmin | datastore.databases.clonedatastore.databases.listdatastore.databases.createdatastore.databases.getMetadatadatastore.operations.listdatastore.operations.get | Cloud Firestore データベースを新しいデータベースにクローン作成する機能。また、このロールによって、新しいデータベースを作成できるようになります。クローンを作成する必要はありません。 | 
| roles/datastore.statisticsViewer | resourcemanager.projects.getresourcemanager.projects.listdatastore.databases.getMetadatadatastore.insights.getdatastore.keyVisualizerScans.getdatastore.keyVisualizerScans.listdatastore.statistics.listdatastore.statistics.get | 分析情報、統計、Key Visualizer スキャンに対する読み取りアクセス権。 | 
| roles/datastore.userCredsViewer | datastore.userCreds.getdatastore.userCreds.list | Cloud Firestore データベース内のユーザー認証情報に対する読み取りアクセス権。 | 
| roles/datastore.userCredsAdmin | datastore.userCreds.getdatastore.userCreds.listdatastore.userCreds.createdatastore.userCreds.updatedatastore.userCreds.deletedatastore.databases.listdatastore.databases.getMetadata | Cloud Firestore データベース内のユーザー認証情報に対する完全アクセス権。 | 
カスタムロール
事前定義された役割がお客様のビジネス要件に合っていない場合は、任意に指定した権限を含むカスタムの役割を独自に定義できます。
タグの作成と管理に必要なロール
作成アクションまたは復元アクションでタグが表される場合は、いくつかのロールが必要になります。データベース リソースに関連付ける前にタグの Key-Value ペアを作成する方法については、タグの作成と管理をご覧ください。
次に示す権限が必要です。
タグを表示
- datastore.databases.listTagBindings
- datastore.databases.listEffectiveTags
リソースのタグを管理する
タグ値を適用するデータベース リソースには、次の権限が必要です。
- datastore.databases.createTagBinding
権限
次の表に、Cloud Firestore がサポートする権限を示します。
| データベースの権限名 | 説明 | |
|---|---|---|
| datastore.databases.get | トランザクションを開始またはロールバックします。 | |
| 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.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.operations.cancel | 長時間実行オペレーションをキャンセルします。 | |
| datastore.operations.delete | 長時間実行オペレーションを削除します。 | |
| datastore.operations.get | 長時間実行オペレーションの最新の状態を取得します。 | |
| datastore.operations.list | 長時間実行オペレーションを一覧表示します。 | |
| プロジェクトの権限名 | 説明 | |
| resourcemanager.projects.get | プロジェクト内のリソースを参照します。 | |
| resourcemanager.projects.list | 所有するプロジェクトをリスト表示します。 | |
| ロケーションの権限名 | 説明 | |
| 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 | リソースの分析情報を取得します。 | |
| ユーザー認証情報の権限名 | 説明 | |
| datastore.userCreds.get | ユーザー認証情報の詳細を取得します。 | |
| datastore.userCreds.list | 利用可能なユーザー認証情報を一覧表示します。 | |
| datastore.userCreds.create | ユーザー認証情報を作成します。 | |
| datastore.userCreds.update | ユーザー認証情報を有効または無効にするか、ユーザー パスワードをリセットします。 | |
| datastore.userCreds.delete | ユーザー認証情報を削除します。 | 
役割変更の適用遅延
Cloud Firestore では IAM 権限が 5 分間キャッシュされるため、役割の変更が有効になるまでに最大 5 分かかります。
Cloud Firestore IAM の管理
IAM ポリシーの取得と設定には、Google Cloud コンソール、IAM API、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 ロールを付与する。
- 認証について学習する。