Firebase Realtime Database には柔軟な式ベースのルール言語と JavaScript ライクの構文が用意されているため、データの構造化方法、インデックスの作成方法、データの書き込みと読み取りのタイミングを簡単に定義できます。Firebase の認証サービスと組み合わせることにより、誰がどのデータへのアクセス権を持つかを定義して、ユーザーの個人情報を不正なアクセスから保護できます。
ルールを設定する
Firebase コンソールでデータベースのルールを検索して変更できます。プロジェクトを選択してから、左側の [データベース] セクション、次に [ルール] タブを選択します。本番環境に移行する前にセキュリティ ルールをテストする場合は、ルールエディタの右上にある [シミュレーション] ボタンを使用して、コンソールで操作をシミュレーションできます。
コマンドライン インターフェースを使用してルールを更新すると、自動デプロイ システムを使用するなど、ルールをプログラムで更新できます。CLI では、デプロイ ターゲットを使用して、デフォルト以外の複数のデータベースにルールをデプロイすることもできます。
サンプルルール
データベースには、デフォルトで Firebase Authentication が必要で、完全な読み取りと書き込み許可は、認証済みユーザーにのみ付与されます。このデフォルト ルールによって、自分でアクセスルールを設定するまで、データベースは誰からもアクセスできないように保護されます。自分で設定した後は、必要に応じて自由にルールをカスタマイズできます。いくつかの一般的なルールの例を以下に示します。
デフォルト
デフォルトのルールでは、非認証ユーザーによるデータベースへの読み取り、書き込みアクセスができなくなります。こうしたルールでは、Firebase コンソールによるアクセスのみが可能になります。
// These rules don't allow anyone read or write access to your database
{
"rules": {
".read": false,
".write": false
}
}
公開
開発期間は、デフォルトの代わりに公開ルールを使用して、ファイルを公開して読み取りと書き込みができるように設定することができます。Authentication を設定しなくても使い始めることができるので、プロトタイプの場合は非常に便利です。このアクセスレベルでは、誰でもデータベースに対して読み取り、書き込みができます。アプリの運用開始前には、より安全なルールの設定が必要です。
// These rules give anyone, even people who are not users of your app,
// read and write access to your database
{
"rules": {
".read": true,
".write": true
}
}
ユーザー
次に示すルールの例では、認証された各ユーザーに /users/$user_id にある個人用ノードを与えます。$user_id は Authentication により取得されたユーザーの ID です。これは、ユーザーの個人データを含むアプリに共通のシナリオです。
// These rules grant access to a node matching the authenticated
// user's ID from the Firebase auth token
{
"rules": {
"users": {
"$uid": {
".read": "$uid === auth.uid",
".write": "$uid === auth.uid"
}
}
}
}
アプリのリリース前にこれらのルールを正しく構成し、想定されたデータにのみユーザーが確実にアクセスできるようにすることが不可欠です。
次のステップ
- セキュリティ ルールを使用したデータのセキュリティ保護について詳しく学ぶ。
- ルールを使用したインデックスの指定について詳しく学ぶ。

