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

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

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

ルールの記述

すべての 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.uid != 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

次のステップ

フィードバックを送信...

ご不明な点がありましたら、Google のサポートページをご覧ください。