[firebase] Cloud Firestore Databaseの安全でないルールがありますメールを黙らせる方法

[firebase] Cloud Firestore Databaseの安全でないルールがありますメールを黙らせる方法

firebaseのCloud Firestoreでは、ルールが緩いとfirebaseから鬼のように毎日メールで警告が送られてきます。
危険だから教えてくれる訳で有難いことなんですが、対処方法がどうもはっきり書いていないので最小限でまとめておきたいと思います。

デフォルトルール

デフォルトのルールは開発・テスト用に一定期日の間は無条件で読み書きできるルールが設定されます。
以下のように、「読み込みも書き込みも2021年10月24日(仮)までは全て誰でも許可するよ!」というルールになります。

rules_version = '2';
service cloud.firestore {
  match /databases/{database}/documents {
    match /{document=**} {
      allow read, write: if
          request.time < timestamp.date(2021, 10, 24);
    }
  }
}

読み取りに制限を課す

セキュリティ ルールに関する次の問題が検出されました:
・すべてのユーザーがデータベース全体を読み取ることができます

全てのデータベースに対してユーザーが読み取りができる設定は無条件でアウトです。
具体的にはmatch /{document=**}で、全ドキュメントに対して読み取り許可を与えることになっています。

itemsコレクションのみにルールを設定するには、matchの対象をdocument全てからitemsへ変更します。
データベース全体を誰でも読み取れるようになっていなければOKです。

match /databases/{database}/documents {
  match /items/{id} {
    allow read: if true;
  }
}

書き込みに制限を課す

書き込みはルールが緩いと誰でも勝手にデータを改変できるため要チェックです。

アプリケーションが読み取りしかしないランディングページであれば、 write: false; で書き込み自体を止めてしまいましょう。

サービスアカウントのJSON認証情報を使って管理者としてSDKから操作する場合、このルール設定に縛られることなく何でも出来ます。
管理者だから何でもできると誤操作で一発アウトなのでカスタムクレームを使って管理者でもルール範囲内で制限することも可能です。

カスタム クレームとセキュリティ ルールによるアクセスの制御
https://firebase.google.com/docs/auth/admin/custom-claims?hl=ja&authuser=0

認証済みユーザーのみ許可する

Authenticationを使用して認証しているユーザーのみ許可する場合は、 request.auth で判定することが可能です。

rules_version = '2';
service cloud.firestore {
  match /databases/{database}/documents {
    match /items/{id} {
      allow write: if request.auth != null;
    }
  }
}

プログラミングカテゴリの最新記事