Join us in person and online for Firebase Summit on October 18, 2022. Learn how Firebase can help you accelerate app development, release your app with confidence, and scale with ease. Register now

Cloud Firestore セキュリティ ルールを使ってみる

コレクションでコンテンツを整理 必要に応じて、コンテンツの保存と分類を行います。

Cloud Firestore セキュリティ ルールを使用すると、インフラストラクチャを管理したり、サーバー側の認証コードや認可コードを作成したりする必要がなくなるため、デベロッパーは優れたユーザー エクスペリエンスを構築することだけに集中できます。

セキュリティ ルールは、シンプルでありながら高度な処理にも対応できる形式で、アクセス制御とデータ検証を提供します。ユーザーデータの安全性を維持するユーザーベースおよびロールベースのアクセス システムを構築するには、Cloud Firestore セキュリティ ルールを適用した Firebase Authentication を使用してください。

セキュリティ ルール バージョン 2

2019 年 5 月以降、Cloud Firestore セキュリティ ルールのバージョン 2 が使用可能になりました。バージョン 2 のルールは、再帰的なワイルドカード {name=**} の動作を変更します。コレクション グループ クエリを使用する場合は、バージョン 2 を使用する必要があります。セキュリティ ルールで rules_version = '2'; を最初の行にして、バージョン 2 にオプトインする必要があります。

rules_version = '2';
service cloud.firestore {
  match /databases/{database}/documents {

ルールの記述

すべての Cloud Firestore セキュリティ ルールは、データベース内のドキュメントを識別する match ステートメントと、それらのドキュメントへのアクセスを制御する allow 式で構成されています。

service cloud.firestore {
  match /databases/{database}/documents {
    match /<some_path>/ {
      allow read, write: if <some_condition>;
    }
  }
}

Cloud Firestore のモバイル クライアント ライブラリまたはウェブ クライアント ライブラリから送られたすべてのデータベース リクエストは、データの読み取りまたは書き込みの前に、セキュリティ ルールと照合して評価されます。指定されたいずれかのドキュメント パスへのアクセスがルールによって拒否されると、リクエスト全体が失敗します。

基本的なルールセットの例を以下に示します。これらのルール自体は有効ですが、本番環境アプリケーションでの使用は推奨されません。

認証必須

// Allow read/write access on all documents to any user signed in to the application
service cloud.firestore {
  match /databases/{database}/documents {
    match /{document=**} {
      allow read, write: if request.auth != null;
    }
  }
}

すべて拒否

// Deny read/write access to all users under any conditions
service cloud.firestore {
  match /databases/{database}/documents {
    match /{document=**} {
      allow read, write: if false;
    }
  }
}

すべて許可

// Allow read/write access to all users under any conditions
// Warning: **NEVER** use this rule set in production; it allows
// anyone to overwrite your entire database.
service cloud.firestore {
  match /databases/{database}/documents {
    match /{document=**} {
      allow read, write: if true;
    }
  }
}

上記の例で使用されている {document=**} パスは、データベース全体の任意のドキュメントに一致します。特定のデータパスを照合し、階層データに対応する方法については、セキュリティ ルールの構造化に関するガイドをご覧ください。

ルールのテスト

Cloud Firestore には、ルールセットのテストに使用できるルール シミュレータが用意されています。このシミュレータには、Firebase コンソールの Cloud Firestore セクションにある [ルール] タブからアクセスできます。

ルール シミュレータを使用すると、読み取り、書き込み、削除についてそれぞれ認証済みと未認証の動作をシミュレートできます。認証済みリクエストをシミュレートする場合は、さまざまなプロバイダから認証トークンを作成してプレビューすることができます。シミュレートされるリクエストは、現在デプロイされているルールセットではなく、エディタ内のルールセットと照らし合わせて実行されます。

ルールのデプロイ

モバイルアプリから Cloud Firestore を使用するには、セキュリティ ルールをデプロイしておく必要があります。ルールをデプロイするには、Firebase コンソールまたは Firebase CLI を使用できます。

Cloud Firestore セキュリティ ルールの更新では、新しいクエリやリスナーに影響が及ぶまでに最大 1 分かかることがあります。ただし、変更内容が完全に伝播され、アクティブなすべてのリスナーに影響が及ぶまでに最大 10 分かかります。

Firebase コンソールを使用する

最初のルールセットを設定してデプロイするには、Firebase コンソールの [Cloud Firestore] セクションにある [ルール] タブを開きます。

オンライン エディタでルールを作成したら、[公開] をクリックします。

Firebase CLI を使用する

ルールは、Firebase CLI を使用してデプロイすることもできます。CLI を使用すると、アプリケーション コードを使用して各ルールのバージョンを管理し、既存のデプロイ プロセスの一部としてルールをデプロイすることができます。

// Set up Firestore in your project directory, creates a .rules file
firebase init firestore

// Edit the generated .rules file to your desired security rules
// ...

// Deploy your .rules file
firebase deploy --only firestore:rules

次のステップ