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 プロダクトを対象とした Security Rules の設定方法と、Firebase プロダクト間での Security Rules の動作の違いの詳細についてご確認ください。

始めましょう

主な機能

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

仕組み

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

Cloud FirestoreCloud Storage の場合、Security 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 ベースの Security Rules では次の構文を使用します。

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

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

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

実装パス

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

次のステップ