Firebase
スマホアプリやWebシステムなどで mBaaS として Firebase を利用している方は多いと思います。特に Firestore Database, Realtime Database, Storage などは非常に便利であるため、これらを目的に好んで Firebase を利用したりもするでしょう。
これらを利用するとき、開発のためにテストモードで開始する方が多いです。しかしテストモードはセキュリティが低く、場合によっては誰でも操作できてしまいます。開発中であったとしても Firebase Auth と連携し、最低限のセキュリティは保っておいた方がいいでしょう。
今回は、Firebase Auth の UID を利用した最低限のルールを紹介します。
Firestore Database
Firestore の場合、本番環境モードで開始すると、全ての階層において誰も読み書きできないルールになっています。本番環境モードで開始する
rules_version = '2';
service cloud.firestore {
match /databases/{database}/documents {
match /{document=**} {
allow read, write: if false;
}
}
}
テストモードで開始する
一方テストモードで開始すると、データベースを作ってから1ヶ月間は、全ての階層において誰でも読み書きできるルールになっています。この状態での利用は好ましくないですね。開発がズルズルと伸びると、この期間も同じくズルズルと伸ばしてしまいがちです。直ぐにでもルールを見直しましょう。rules_version = '2';
service cloud.firestore {
match /databases/{database}/documents {
match /{document=**} {
allow read, write: if
request.time < timestamp.date(2021, 11, 25);
}
}
}
Firebase Auth と連携
アクセスするユーザの Firebase Auth の UID は、 request.auth.uid で取得できます。以下の例では、 /users の配下に自身の UID の階層を持ち、そこにアクセスするときは読み書き可能なルールになっています。自分自身しか読み書きできないので、大きな問題になることはないでしょう。
rules_version = '2';
service cloud.firestore {
match /databases/{database}/documents {
match /users/{userId} {
allow read, write: if request.auth != null && userId == request.auth.uid;
}
}
}
この例では、 read と write に対してルールを設定していますが、厳密には
- read … get, list
- write … create, update, delete
-
と細かく設定することができ、詳細については割愛しますが write にはそれぞれ個別にルールを割り振った方がいいでしょう。
Realtime Database
Realtime Database は、Firestore と設定が異なります。ロックモードで開始
Firestore でいうところの本番環境モードになります。 read, write 共に false としているので、誰も読み書きすることができません。{
"rules": {
".read": false,
".write": false
}
}
テストモードで開始する
一方テストモードでは、データベース作成から1ヶ月間は誰でも読み書きできるルールです。{
"rules": {
".read": "now < 1636124400000", // 2021-11-25
".write": "now < 1636124400000", // 2021-11-25
}
}
Firebase Auth と連携
アクセスするユーザの Firebase Auth の UID は、 auth.uid で取得できます。こちらも Firestore と同じように /users の配下に自身の UID の階層を持ち、そこにアクセスするときは読み書き可能なルールとして設定してみました。{
"rules": {
"users": {
"$uid": {
".read": "$uid === auth.uid",
".write": "$uid === auth.uid",
}
}
}
}
Storage
Storage にもルールが存在します。設定方法は、 Firestore と同じです。ただし、本番環境モードやテストモードなどは用意されておらず最初のルールが決まっています。その内容は Firebase Auth を利用していれば誰でも読み書きできるものですが、他のユーザのコンテンツを除き見れるのは気持ち悪いです。明確なルールを用意した方がいいでしょう。
最初(テストモードなし)
rules_version = '2';
service firebase.storage {
match /b/{bucket}/o {
match /{allPaths=**} {
allow read, write: if request.auth != null;
}
}
}
Firebase Auth と連携
Firestore と同様にアクセスするユーザの Firebase Auth の UID は、 request.auth.uid で取得できます。 /users の配下に自身の UID の階層を持ち、その配下のファイルにアクセスするときは読み書き可能なルールになっています。rules_version = '2';
service firebase.storage {
match /b/{bucket}/o {
match /users/{uid}/{file_name} {
allow read, write: if request.auth.uid == uid;
}
}
}






