Cloud Firestore Security Rules を使用すると、インフラストラクチャを管理する、またはサーバー側の認証コードや認可コードを作成する必要がなくなるため、デベロッパーは優れたユーザー エクスペリエンスを構築することに注力できます。
セキュリティ ルールは、シンプルでありながら高度な処理にも対応できる形式で、アクセス制御とデータ検証を提供します。ユーザーデータの安全性を維持するユーザーベースおよびロールベースのアクセス システムを構築するには、Cloud Firestore Security Rules を適用した Firebase Authentication を使用する必要があります。
セキュリティ ルール バージョン 2
2019 年 5 月以降、Cloud Firestore セキュリティ ルールのバージョン 2 が使用可能になりました。バージョン 2 のルールは、再帰的なワイルドカード {name=**}
の動作を変更します。コレクション グループ クエリを使用する場合は、バージョン 2 を使用する必要があります。セキュリティ ルールで rules_version = '2';
を最初の行にして、バージョン 2 にオプトインする必要があります。
rules_version = '2';
service cloud.firestore {
match /databases/{database}/documents {
ルールの記述
デフォルトのデータベースとプロジェクト内の追加の各データベース用に作成するデータモデルに合わせて Cloud Firestore Security Rules を作成し、管理します。
すべての Cloud Firestore Security Rules は、データベース内のドキュメントを識別する match
ステートメントと、それらのドキュメントへのアクセスを制御する allow
式で構成されています。
service cloud.firestore {
match /databases/{database}/documents {
match /<some_path>/ {
allow read, write: if <some_condition>;
}
}
}
Cloud Firestore のモバイル クライアント ライブラリまたはウェブ クライアント ライブラリから送られたすべてのデータベース リクエストは、データの読み取りまたは書き込みの前に、セキュリティ ルールと照合して評価されます。指定されたいずれかのドキュメント パスへのアクセスがルールによって拒否されると、リクエスト全体が失敗します。
基本的なルールセットの例を以下に示します。これらのルール自体は有効ですが、本番環境アプリケーションでの使用は推奨されません。
認証必須
// Allow read/write access on all documents to any user signed in to the application
service cloud.firestore {
match /databases/{database}/documents {
match /{document=**} {
allow read, write: if request.auth != null;
}
}
}
すべて拒否
// Deny read/write access to all users under any conditions
service cloud.firestore {
match /databases/{database}/documents {
match /{document=**} {
allow read, write: if false;
}
}
}
すべて許可
// Allow read/write access to all users under any conditions
// Warning: **NEVER** use this rule set in production; it allows
// anyone to overwrite your entire database.
service cloud.firestore {
match /databases/{database}/documents {
match /{document=**} {
allow read, write: if true;
}
}
}
上記の例で使用されている {document=**}
パスは、データベース全体の任意のドキュメントに一致します。特定のデータパスを照合し、階層データに対応する方法については、セキュリティ ルールの構造化に関するガイドをご覧ください。
ルールのテスト
Cloud Firestore には、ルールセットのテストに使用できるルール シミュレータが用意されています。このシミュレータには、Firebase コンソールの Cloud Firestore セクションにある [ルール] タブからアクセスできます。
ルール シミュレータを使用すると、読み取り、書き込み、削除についてそれぞれ認証済みと未認証の動作をシミュレートできます。認証済みリクエストをシミュレートする場合は、さまざまなプロバイダから認証トークンを作成してプレビューすることができます。シミュレートされるリクエストは、現在デプロイされているルールセットではなく、エディタ内のルールセットと照らし合わせて実行されます。
ルールのデプロイ
モバイルアプリから Cloud Firestore を使用するには、セキュリティ ルールをデプロイしておく必要があります。ルールは、Firebase コンソールで、Firebase CLI、または Cloud Firestore 管理 REST API を使用してデプロイできます。
Cloud Firestore Security Rules の更新が新しいクエリやリスナーに適用されるまでに、最大 1 分かかることがあります。ただし、変更内容が完全に伝播され、アクティブなすべてのリスナーに影響が及ぶまでに最大 10 分かかります。
Firebase コンソールを使用する
最初のルールセットを設定してデプロイするには、プロジェクト内のデフォルト データベースに対して、Firebase コンソールの Cloud Firestore セクションにある [ルール] タブを開きます。
オンライン エディタでルールを作成したら、[公開] をクリックします。
Firebase CLI を使用する
ルールは、Firebase CLI を使用してデプロイすることもできます。CLI を使用すると、アプリケーション コードを使用して各ルールのバージョンを管理し、既存のデプロイ プロセスの一部としてルールをデプロイすることができます。
// Set up Firestore in your project directory, creates a .rules file
firebase init firestore
// Edit the generated .rules file to your desired security rules
// ...
// Deploy rules for all configured databases
firebase deploy --only firestore
Cloud Storage のセキュリティを強化する
アプリでは、Cloud Firestore の堅牢なデータベース機能ならびに、Cloud Storage のファイル ストレージおよび管理機能を利用できます。これらのプロダクトを併用することで、アプリ セキュリティが強化されます。Cloud Firestore は、両方のプロダクトの Firebase セキュリティ ルールで使用できる認可要件を取得できます。詳しくは、Cloud Storage のガイドをご覧ください。
次のステップ
- セキュリティ ルールを構造化する方法を学習する。
- カスタム セキュリティ ルールの条件を記述する。
- セキュリティ ルールのリファレンスを参照する。