📱

Flutter:Firebase Firestoreを始める(セキュリティルールの概要を知る)

2024/05/26に公開

「セキュリティルール,なんやそれ?わてははよ,とりあえず個人開発でアプリ作りだいんじゃ!」という人は,Flutterでのインストール以外飛ばしてください.その場合,セキュリティルールは,テストモードにしてください

Firestore設定に移る前に

Firebaseセキュリティルールについて

セキュリティルールの開始モード:Cloud Firestoreを例に

https://firebase.google.com/docs/firestore/quickstart?hl=ja

テストモード

  • モバイル・Webクライアントライブラリを使用する場合に適している.
  • 全てのユーザがデータを読み書きできる.
  • ウェブ、Apple プラットフォーム、Android SDKを使用する場合は、テストモードを選択する.

ロックモード

  • モバイルおよびウェブ クライアントからのすべての読み書きを拒否する.
  • 認証されたアプリケーション サーバー(C#、Go、Java、Node.js、PHP、Python、Ruby)を引き続きデータベースにアクセスできる.

Firestoreのアクセスは直接,もしくはバックエンド経由???どっちがいいの?

これに関しては,stackoverflowredditで同様の質問が多数ありました(みんな考えることは一緒笑....)

いろいろ調べてみましたが,こういうことが書いてありました(英語記事なので,自分で意訳した内容です).どの記事に関しても,セキュリティルールの設定を行うことについて言及されてました.

簡単なモバイル・webアプリの場合は,直接アクセスで良さそう.他の場合に関しては,ユースケースによるって感じですね.

https://stackoverflow.com/questions/56746926/is-it-safe-to-use-firestore-and-its-features-via-client-only

https://10xdev.codeparrot.ai/is-firebase-client-side-safe

https://www.reddit.com/r/Firebase/comments/rafmu6/connect_directly_to_firestore_or_via_backend/

Firestore設定

Firebase Consoleに移り,Firestore Databaseのページに移る.

  • Firestore Databaseを始める.

Flutterインストール

  • 前提:Firebaseの構成と初期化

Flutter アプリに Firebase を追加する

  • Flutterインストールを行う.
$ flutter pub add cloud_firestore

https://pub.dev/packages/cloud_firestore

セキュリティルールの設定

https://firebase.google.com/docs/firestore/security/get-started?hl=ja

  • はじめに

    • モバイルクライアントまたはwebクライアントから送られた全てのデータベースリクエストは,データの読み書き前に,セキュリティルールと照合して評価される.指定したドキュメントパスへのアクセスがルールによって拒否されると,リクエスト全体が失敗する.

    • サーバー側に関して:公式ドキュメント

要は,サーバ側には適用されないってことかな.

  • Cloud Firestoreのルール画面:

ルールの記述

  • matchステートメント:データベース内のドキュメントを識別
  • allow:ドキュメントへのアクセスを制御する
service cloud.firestore {
  match /databases/{database}/documents {
    match /<some_path>/ {
      allow read, write: if <some_condition>;
    }
  }
}

以下,基本的なルールセットの例(公式ドキュメントより)

- ルール自体は有効であるものの,本番環境アプリケーションでの使用は推奨されてない.

{document=**}パスは,データベース全体の任意のドキュメントに一致する.

  • 認証必須
// 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 != 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;
    }
  }
}

セキュリティルールに関して

  • 詳しい資料はこちらです.

Cloud Firestore でのデータの保護  |  Firebase

Discussion