Firebase セキュリティ ルール スタートガイド

Firebase セキュリティ ルールは、Cloud Firestore、Realtime Database、Cloud Storage に保管されたデータのための、堅牢で、かつ完全にカスタマイズ可能な保護機能です。このガイドの手順に従うことで、データのセキュリティを確保し悪意のあるユーザーからアプリを保護するセキュリティ ルールを簡単に導入できます。

Firebase セキュリティ ルール言語を理解する

ルールの作成を始める前に、お使いの Firebase プロダクトに固有の Firebase セキュリティ ルール言語の確認に時間をかけることには価値があります。Cloud Storage では、Common Expression Language(CEL)のスーパーセットを利用し、match ステートメントと allow ステートメントに依存して、定義したパスのアクセスへの条件を設定します。

まず、Firebase セキュリティ ルール言語の基本構文を学習します。

Authentication を設定する

まだアプリに Firebase Authentication を追加していない場合は、追加します。多くの一般的な認証方式をサポートしている Firebase Authentication と Firebase セキュリティ ルールを統合することで、包括的な検証機能を提供します。

アプリに応じたカスタム認証情報を追加で設定できます。

Firebase セキュリティ ルールと Firebase Authentication の詳細については、こちらをご覧ください。

データ構造とルール構造を定義する

データをどう構造化するかによって、ルールを構造化、実装する方法が左右されることがあります。データ構造を定義する際は、セキュリティ ルールの構造に与える可能性がある影響を考慮します。

たとえば、Cloud Storage では、各ユーザーの特定のロールを示すフィールドを含めることをおすすめします。これにより、ルールでそのフィールドを読み取り、その値に基づきロールベースのアクセス権を付与できます。また、Cloud Firestore データベースを作成し、アクセス条件を Cloud Firestore ドキュメントに格納して、Cloud Storage セキュリティ ルールからこれらのドキュメントにアクセスすることもできます。

データとルールのアーキテクチャを定義する際は、プロダクトに応じて、ルールがどのようにカスケードされる(またはカスケードされない)かに注意してください。Realtime Database では、ルールはトップダウンで機能するため、浅いパスのルールが深いパスのルールよりも優先されます。ルールは、特定のパスで読み取り権限や書き込み権限を付与した場合、その下位にあるすべての子ノードへのアクセス権も付与します。一方、Cloud Firestore と Cloud Storage では、ルールはデータ階層の指定のレベルにのみ適用されます。ユーザーは、異なるレベルへのアクセスを制御する明示的なルールを記述します。

既存のルールにアクセスする

既存のセキュリティ ルールを表示するには、Firebase CLI か Firebase コンソールのいずれかを使用します。更新したルールを誤って上書きしないよう、常に同じ手段を使用してルールを編集します。ローカルに定義されたルールが最新の更新を反映しているかどうかわからなくても、Firebase コンソールには常に Firebase セキュリティ ルールの最新のデプロイ済みバージョンが表示されます。

Firebase コンソールからルールにアクセスするには、プロジェクトを選択し、左側のナビゲーション パネルで [Storage] をクリックします。対象のデータベースやストレージ バケットに移動したら、[ルール] をクリックします。

Firebase CLI からルールにアクセスする場合は、firebase.json ファイルに指定されているルールファイルに移動します。

基本的なルールを作成する

アプリを開発しながらセキュリティ ルールの理解を深める中で、いくつかの基本的なユースケースに対処してみましょう。次のような基本的なユースケースがあります。

  • コンテンツ所有者のみ: ユーザーごとにコンテンツへのアクセスを制限する。
  • 混合アクセス: ユーザーごとに書き込みアクセスを制限する一方、すべてのユーザーに読み取りアクセスを許可する。
  • 属性ベースのアクセス: ユーザーのグループまたはタイプにアクセスを制限する。

ルールをテストする

Firebase コンソールで Firebase セキュリティ ルールを設定する場合は、Firebase ルール プレイグラウンドを使用して、その動作をすばやく検証できます。ただし、変更内容を本番環境にデプロイする前に Local Emulator Suite でさらに綿密なテストを実施することをおすすめします。

ルールをデプロイする

ルールを本番環境にデプロイするには、Firebase コンソールか Firebase CLI のいずれかを使用します。Firebase セキュリティ ルールの管理とデプロイで説明されている手順に従ってください。