サーバー クライアント ライブラリのセキュリティ

Firestore 用のサーバー クライアント ライブラリを使用する場合は、Identity and Access Management(IAM)によってリソースへのアクセスを管理できます。 IAM を使用すると、特定の Google Cloud Platform リソースに対するアクセス権を詳細に設定し、他のリソースへの不要なアクセスを防止できます。このページでは、Firestore の IAM 権限とロールについて説明します。IAM の詳細については、IAM のドキュメントをご覧ください。

IAM を使用すると、セキュリティに関する最小権限の原則を導入できるため、リソースに対する必要なアクセス権のみを付与できます。

IAM では、IAM ポリシーを設定することで、誰(どのユーザー)に、どのリソースに対するどのアクセス権(ロール)を付与するかを制御できます。IAM ポリシーは 1 つ以上のロールをユーザーに付与することで、そのユーザーに特定の権限を与えます。たとえば、datastore.indexAdmin のロールを付与されたユーザーは、インデックスの作成、変更、削除、一覧表示、表示を行うことができます。

権限とロール

このセクションでは、Firestore でサポートされている権限とロールの概要について説明します。

API メソッドに必要な権限

次の表に、各アクションを実行するために呼び出し元に必要な権限を示します。

メソッド 必要な権限
projects.databases.documents
batchGet datastore.entities.get
batchWriteexists 前提条件false に設定した更新または変換) datastore.entities.create
batchWriteexists 前提条件true に設定した更新または変換) datastore.entities.create
batchWrite前提条件なしの更新または変換)datastore.entities.create
datastore.entities.update
beginTransaction datastore.databases.get
commitexists 前提条件false に設定した更新または変換) datastore.entities.create
commitexists 前提条件true に設定した更新または変換)datastore.entities.update
commit前提条件なしの更新または変換)datastore.entities.create
datastore.entities.update
commit(削除) datastore.entities.delete
createDocument datastore.entities.create
delete datastore.entities.delete
get datastore.entities.get
list datastore.entities.get
datastore.entities.list
listCollectionIds datastore.entities.list
partitionQuery datastore.entities.get
datastore.entities.list
patch datastore.entities.update
rollback datastore.databases.get
runAggregationQuery datastore.entities.get
datastore.entities.list
runQuery datastore.entities.get
datastore.entities.list
write (RPC)exists 前提条件false に設定した更新または変換) datastore.entities.create
write (RPC)exists 前提条件true に設定した更新または変換) datastore.entities.update
write (RPC)前提条件なしの更新または変換) datastore.entities.create
datastore.entities.update
write (RPC)(削除)datastore.entities.delete
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
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

事前定義ロール

Firestore の API メソッドを使用して API リクエストを発行するアカウントには、リソースを使用するための適切な権限が IAM で付与されている必要があります。権限は、ユーザー、グループ、またはサービス アカウントにロールを付与するポリシーを設定することで付与されます。基本ロールであるオーナー、編集者、閲覧者に加えて、Firestore のロールをプロジェクトのユーザーに与えることができます。

次の表に、Firestore の IAM ロールを示します。1 つのユーザー、グループ、またはサービス アカウントに複数のロールを付与できます。

ロール 権限 説明
roles/datastore.owner appengine.applications.get

datastore.*

resourcemanager.projects.get
resourcemanager.projects.list
Firestore に対する完全アクセス権。
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
Firestore データベース内のデータに対する読み取り / 書き込みアクセス権。アプリケーション デベロッパーとサービス アカウント向け。
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
すべての Firestore リソースに対する読み取りアクセス権。
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
Firestore データベースのバックアップ スケジュールに対する読み取りアクセス権。
roles/datastore.backupSchedulesAdmin datastore.backupSchedules.get
datastore.backupSchedules.list
datastore.backupSchedules.create
datastore.backupSchedules.update
datastore.backupSchedules.delete
datastore.databases.list
datastore.databases.getMetadata
Firestore データベースのバックアップ スケジュールに対する完全アクセス権。
roles/datastore.backupsViewer datastore.backups.get
datastore.backups.list
Firestore のロケーション内のバックアップ情報への読み取りアクセス権。
roles/datastore.backupsAdmin datastore.backups.get
datastore.backups.list
datastore.backups.delete
Firestore のロケーション内のバックアップに対する完全アクセス権。
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
Firestore バックアップを新しいデータベースに復元する機能。また、このロールによって、新しいバックアップを作成できるようになります。バックアップから復元する必要はありません。

カスタムロール

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

権限

次の表に、Firestore でサポートされる権限を示します。

データベースの権限名 説明
datastore.databases.get トランザクションを開始またはロールバックします。
datastore.databases.import データベースにエンティティをインポートします。
datastore.databases.export データベースからエンティティをエクスポートします。
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.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 バックアップからデータベースを復元します。

役割変更の適用遅延

Firestore では IAM 権限が 5 分間キャッシュされるため、ロールの変更が有効になるまでに最大 5 分かかります。

Firestore IAM の管理

IAM ポリシーの取得と設定には、Google Cloud Console、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 へのセキュリティ ルールの依存関係

モバイル クライアントまたはウェブ クライアントの Firestore セキュリティ ルールは、次のサービス アカウントと IAM バインディングに依存します。

サービス アカウント IAM ロール
service-project_number@firebase-rules.iam.gserviceaccount.com roles/firebaserules.system

このサービス アカウントは Firebase によって自動的に設定されます。このサービス アカウントから firebaserules.system ロールを削除すると、セキュリティ ルールによってすべてのリクエストが拒否されます。この IAM バインディングを復元するには、次の gcloud CLI コマンドを使用します。

gcloud projects add-iam-policy-binding project_id \
--member=serviceAccount:service-project_number@firebase-rules.iam.gserviceaccount.com \
--role=roles/firebaserules.system

project_idproject_number を確認するには、プロジェクトの識別をご覧ください。

Console では、デフォルトで firebaserules.system ロールが非表示になることから、Google Cloud Console ではなく Google Cloud CLI を使用してください。

次のステップ