Firebase セキュリティ ルールは、Cloud Firestore、Realtime Database、Cloud Storage に保管されたデータのための、堅牢で、かつ完全にカスタマイズ可能な保護機能です。このガイドの手順に従うことで、データのセキュリティを確保し悪意のあるユーザーからアプリを保護するセキュリティ ルールを簡単に導入できます。
Firebase セキュリティ ルール言語を理解する
ルールの作成を始める前に、お使いの Firebase プロダクトに固有の Firebase セキュリティ ルール言語の確認に時間をかけることは価値があります。Realtime Database では、JavaScript のような構文と JSON 構造をセキュリティ ルールに利用します。一方、Cloud Firestore と Cloud Storage では Common Expression Language(CEL)のスーパーセットを利用し、match
ステートメントと allow
ステートメントに依存して、定義したパスのアクセスへの条件を設定します。
Firebase セキュリティ ルール言語の詳細については、こちらをご覧ください。
Authentication を設定する
まだ Authentication を設定していない場合は、Firebase Authentication でユーザーを識別します。多くの一般的な認証方式をサポートしている Firebase Authentication と Firebase セキュリティ ルールを統合することで、包括的な検証機能を提供します。
アプリに応じたカスタム認証情報を追加で設定できます。
Firebase セキュリティ ルールと Firebase Authentication の詳細については、こちらをご覧ください。
データ構造とルール構造を定義する
データをどう構造化するかによって、ルールを構造化、実装する方法が左右されることがあります。データ構造を定義する際は、セキュリティ ルールの構造に与える可能性がある影響を考慮します。
たとえば、Cloud Firestore では、各ユーザーの特定の役割を示すフィールドを含めることをおすすめします。これにより、ルールでそのフィールドを読み取り、その値に基づき役割ベースのアクセス権を付与できます。
データとルールのアーキテクチャを定義する際は、データセットに対するアクセス権を付与するルールが 1 つでもあれば、Firebase セキュリティ ルールもそのデータセットに対するアクセス権を付与することを念頭に置いてください。つまり、データ階層の上位レベルでアクセス権を付与した場合、サブパスのアクセスを絞り込めません。
既存のルールにアクセスする
既存のセキュリティ ルールを表示するには、Firebase CLI か Firebase コンソールのいずれかを使用します。更新したルールを誤って上書きしないよう、常に同じ手段を使用してルールを編集します。ローカルに定義されたルールが最新の更新を反映しているかどうかわからなくても、Firebase コンソールには常に Firebase セキュリティ ルールの最新のデプロイ済みバージョンが表示されます。
Firebase コンソールからルールにアクセスするには、プロジェクトを選択し、[Realtime Database]、[Cloud Firestore]、または [Storage] のいずれかに移動します。対象のデータベースやストレージ バケットに移動したら、[ルール] をクリックします。
Firebase CLI からルールにアクセスする場合は、firebase.json ファイルに指定されているルールファイルに移動します。
基本的なルールを作成する
アプリを開発しながらセキュリティ ルールの理解を深める中で、いくつかの基本的なセキュリティ ルールを実装してみましょう。基本的なルールには次のユースケースが含まれます。
- コンテンツ所有者のみ: ユーザーごとにコンテンツへのアクセスを制限する。
- 混合アクセス: ユーザーごとに書き込みアクセスを制限する一方、すべてのユーザーに読み取りアクセスを許可する。
- 属性ベースのアクセス: ユーザーのグループまたはタイプにアクセスを制限する。
ルールをテストする
アプリの動作を完全に検証し、Firebase セキュリティ ルールの構成を確認するには、Firebase エミュレータを使用して、ローカル環境で単体テストの実行と自動化を行います。
Firebase コンソールで Firebase セキュリティ ルールを設定する場合は、Firebase セキュリティ ルール シミュレータを使用して、その動作をすばやく検証できます。ただし、Firebase エミュレータでさらに綿密にテストしてから、その変更内容を本番環境にデプロイすることをおすすめします。
ルールをデプロイする
ルールを本番環境にデプロイするには、Firebase コンソールか Firebase CLI のいずれかを使用します。Firebase セキュリティ ルールの管理とデプロイで説明されている手順に従ってください。