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

Firebase Security Rules は、Cloud FirestoreRealtime DatabaseCloud Storage のデータに対して、堅牢で、完全にカスタマイズ可能な保護を提供します。このガイドの手順に従うことで、データのセキュリティを確保し悪意のあるユーザーからアプリを保護する Rules を簡単に導入できます。

Firebase Security Rules 言語について

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

まず、Firebase Security Rules 言語の基本構文を学習します。

Authenticationを設定

まだ行っていない場合は、Firebase Authentication をアプリに追加します。Firebase Authentication は多くの一般的な認証方式をサポートしており、Firebase Security Rules と統合することで包括的な検証機能を提供します。

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

Firebase Security RulesFirebase Authentication の詳細をご覧ください。

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

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

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

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

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

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

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

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

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

アプリを開発しながら Rules の理解を深める中で、Rules を実装して、次のようないくつかの基本的なユースケースに対処してみましょう。

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

ルールをテストする

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

ルールをデプロイする

Firebase コンソールまたは Firebase CLI を使用して、ルールを本番環境にデプロイします。Firebase Security Rules の管理とデプロイの手順に沿って操作します。