Firebase セキュリティ ルール

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

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

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

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

主な機能

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

仕組み

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

Cloud Firestore と Cloud Storage の場合、セキュリティ ルールでは次の構文を使用します。

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": {
    "<<path>>": {
    // Allow the request if the condition for each method is true.
      ".read": <<condition>>,
      ".write": <<condition>>
    }
  }
}

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

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

実装パス

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

次のステップ