Firebase Summit のすべての発表内容に目を通し、Firebase を活用してアプリ開発を加速し、自信を持ってアプリを実行できる方法をご確認ください。 詳細

CloudFirestoreのセキュリティルールを始めましょう

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

Cloud Storage のセキュリティを強化する

アプリは、Cloud Firestore の堅牢なデータベース機能と、Cloud Storage のファイル ストレージおよび管理機能の恩恵を受けることができます。 Cloud Firestore は両方の製品の Firebase セキュリティ ルールで使用できる承認要件を取得できるため、これらの製品を一緒に使用すると、アプリのセキュリティが強化されます。詳細については、Cloud Storage のガイドを参照してください。

次のステップ