本当に必要な回線速度が分からず、コミュファ光のプランを悩んでいたり、1G・5G・10Gのプランに加入していて料金を安く抑えたい方向けの記事です。 結論 一般的な家庭は300Mホームプランで充分です。 …
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から操作する場合、このルール設定に縛られることなく何でも出来ます。
管理者だから何でもできると誤操作で一発アウトなのでカスタムクレームを使って管理者でもルール範囲内で制限することも可能です。
管理者だから何でもできると誤操作で一発アウトなのでカスタムクレームを使って管理者でもルール範囲内で制限することも可能です。
認証済みユーザーのみ許可する
Authenticationを使用して認証しているユーザーのみ許可する場合は、 request.auth
で判定することが可能です。
rules_version = '2'; service cloud.firestore { match /databases/{database}/documents { match /items/{id} { allow write: if request.auth != null; } } }
コメントを書く