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

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

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

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

権限とロール

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

必要な権限

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

メソッド 必要な権限
projects.databases.documents
batchGet datastore.entities.get
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
patch datastore.entities.update
rollback datastore.databases.get
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

ロール

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.entities.*
datastore.indexes.list
datastore.namespaces.get
datastore.namespaces.list

resourcemanager.projects.get
resourcemanager.projects.list
Firestore データベース内のデータに対する読み取り / 書き込みアクセス権。アプリケーション デベロッパーとサービス アカウント向け。
roles/datastore.viewer appengine.applications.get

datastore.databases.get
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.indexAdmin appengine.applications.get

datastore.indexes.*

resourcemanager.projects.get
resourcemanager.projects.list
インデックスの定義を管理する完全アクセス権。

権限

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

データベースの権限名 説明
datastore.databases.get トランザクションを開始またはロールバックします。
データベースからメタデータを読み取ります。
エンティティの権限名 説明
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 インデックスを更新します。
プロジェクトの権限名 説明
resourcemanager.projects.get プロジェクト内のリソースを参照します。
resourcemanager.projects.list 所有するプロジェクトをリスト表示します。

ロール変更のレイテンシ

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

Firestore IAM の管理

IAM ポリシーの取得と設定には、Google Cloud Console、IAM API、gcloud コマンドライン ツールを使用できます。詳細については、プロジェクト メンバーに対するアクセス権の付与、変更、取り消しをご覧ください。

IAM へのセキュリティ ルールの依存関係

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

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

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

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 を確認するには、プロジェクトの識別をご覧ください。

Cloud Console ではなく gcloud コマンドライン ツールを使用してください。Console では、デフォルトで firebaserules.system ロールが非表示になるためです。

次のステップ