Firebase Security Rules

柔軟で拡張可能な Firebase セキュリティ ルールをすることにより、Cloud FirestoreFirebase Realtime DatabaseCloud Storage に保管されたデータのセキュリティを確保します。

Firebase Security Rules は、悪意のあるユーザーからデータを隔離します。単純なルールだけでなく、特定のアプリに必要な粒度に応じてアプリのデータを保護する複雑なルールも作成できます。

Firebase Security Rules では柔軟で拡張可能な構成言語を使用して、Realtime DatabaseCloud FirestoreCloud Storage に対してユーザーがアクセスできるデータを定義します。Firebase Realtime Database Security Rules ではルール定義に JSON を利用する一方、Cloud Firestore Security RulesCloud Storage 用の Firebase Security Rules では、複雑なルール固有の構造に対応できるよう作成された独自の言語を利用します。

アプリで使用する特定の Firebase プロダクトを対象とした Rules の設定方法と、Firebase プロダクト間での Rules の動作の違いの詳細について学びます。

始めましょう

主な機能

柔軟性 アプリの構造と動作に応じて適切なカスタムルールを作成できます。Rules で使用する言語では、独自のデータを利用してアクセスの承認ができます。
粒度 必要に応じて、ルールの範囲を調整できます。
独立したセキュリティ Rules はアプリ(Firebase コンソールか Firebase CLI)の外部で定義されるため、クライアントがセキュリティ実施の責任を担うことも、バグによりデータが危険にさらされることもなく、データは常に保護されます。

仕組み

Firebase Security Rules は、パターンをデータベースのパスと照合して、パターンと一致するパスにカスタム条件を適用し、そのパスのデータへのアクセスを許可します。Firebase プロダクト間に共通して、すべての Rules はパスマッチングの構成要素と読み取りや書き込みアクセスを許可する条件文で構成されます。ただし、アプリで使用するそれぞれの Firebase プロダクトを対象に Rules を定義する必要があります。

Cloud FirestoreCloud Storage の場合、Rules は次の構文を使用します。

service <<name>> {
  // Match the resource path.
  match <<path>> {
    // Allow the request if the following conditions are true.
    allow <<methods>> : if <<condition>>
  }
}

Realtime Database の場合、JSON ベースの Rules は次の構文を使用します。

{
  "rules": {
    "<<path>>": {
    // Allow the request if the condition for each method is true.
      ".read": <<condition>>,
      ".write": <<condition>>
    }
  }
}

RulesAND ステートメントとしてではなく、OR ステートメントとして適用されます。したがって、複数のルールが 1 つのパスに一致し、一致したいずれかの条件によってアクセス権が付与されると、Rules によって、そのパスのデータへのアクセス権が付与されます。このため、幅広く適用されるルールによってデータへのアクセス権が付与される場合、それより具体的なルールで制限することはできません。ただし、Rules が重複しすぎないようにすることで、この問題を回避できます。Firebase Security Rules では、一致したパスが重複していると、コンパイラ警告としてフラグが立てられます。

Firebase Security Rules では、Authentication を利用してユーザーごとの権限を付与することもできます。また、極めて基本的な条件でも非常に複雑な条件でも設定できます。Rules の作成を始める前に、Rules言語動作についての詳細を確認してください。

実装パス

プロダクトの SDK を統合する アプリに Cloud FirestoreCloud Storage、または Realtime Database を設定します。
Firebase Security Rules を作成する 詳しくは、Rules の仕組み基本的な Rules を設定するをご覧ください。
Firebase Security Rules をテストする Realtime Database エミュレータと Cloud Firestore エミュレータを使用してアプリの動作をテストし、ルールを検証してから本番環境にデプロイします。
Firebase Security Rulesのデプロイ Firebase コンソールまたは Firebase CLI を使用して、ルールを本番環境にデプロイします。

次のステップ