2 つの Firebase セキュリティルール

記事
IT・テクノロジー

2 つの Firebase セキュリティルール

フロントエンドから Firebase のデータベースやストレージ機能を利用する場合、セキュリティルールの設定が必要になる場合が殆どです。セキュリティルールの設定は仕組みをよく理解していないと原因の特定に時間がかかる場合があります。


基本は Firebase コンソールで設定

Firebase のデータベースやストレージ機能を利用する場合、アクセスの権限はセキュリティルールを設定して管理します。Web 系のアプリの場合、Web ブラウザでフロントエンドのコードを実行するために、Javascript のソースコードを見ることができるため、プログラムのコードとは別にセキュリティ対策を行わないと問題になる場合が多いのが大きな理由です。

通常設定は、Firebase のコンソールで行います。データベースやストレージの機能を有効にする際に設定することが求められるようになっています。開発時に最初から完全なセキュリティルールを設定するのは難しい場合も多いので、開発用の設定も準備されています。開発用の設定の場合、約 1 ヶ月先の日付を指定して、その期日前ならば全ての読み書きのアクセスの権限を許可して、基本機能の実装に集中することが可能なようにする事ができます。ただし、この開発用の設定の場合は、全ての権限が全ての利用者に与えられることになるので、注意しないとアプリの情報を改変されたりする可能性があります。従って、このモードで利用する場合は、インターネットに公開しないで、開発用の PC 上でテストをして利用する場合などに限定して利用するのが普通です。

実際は、インターネットに公開する前に必要なルールを設定するようにする必要があります。

Firebase のセキュリティルールは簡単なスクリプトのような言語で記述する事が可能で、Firease コンソールのサイトで編集や簡単なテストができるようになっています。きちんと設定すれば、この設定は基本的に管理者(Firebase コンソールにアクセス権がある人)以外は変更できないので、Firebase のデータベースやストレージのアクセス権の管理を行う事ができます。

テスト機能もサポート

Firebase のセキュリティルールは Firebase コンソールからテストを行う事ができます。 テストは、Firebase のログイン情報、対象となる Firebase のデータベースのデータやストレージのデータを指定して、アクセスが許可されるかどうかをチェックする機能があります。この機能を使えば、必要な人に必要なアクセスの権限が設定されているかを確認する事ができます。

実際のプログラムを動かして検証するよりは、この Firebase コンソールのセキュリティルールのシミュレータを利用した方が確実にアクセスの権限を確認できます。ポイントとなるのは:

* 誰か?  Firebase のアカウントのユーザー情報で特定(uid や E-Mail アドレス)
* ログインしているかいないか
* Firebase のデータベースのデータを活用
* Firebase のデータベースに書き込むデータを活用
* Firebase のテータベースのデータやストレージのデータ毎に設定
などの組み合わせでルールを設定します。簡単な関数の定義もできるので、セキュリティルールは結構複雑になる場合も多くなるので、こうしたテスト機能は非常に便利です。上の要素を指定して、詳しいテストも簡単に実行できます。

Firebase でホスティングする場合の注意
通常は、Firebase コンソールからセキュリティルールの設定を行います。しかし、Firebase でホスティング機能も利用する場合には注意が必要です。

Firebase のホスティング機能を利用する場合は、開発用の PC にプロジェクトフォルダを作成して、Web サイトや Web アプリに必要な情報を保存して、その情報をインターネット上のサーバーにアップロードする仕組みになっています。これらの処理を行うため「firebase-tools」という SDK をインストールして必要な処理を行います。

プロジェクトフォルダを初期化するために、「firebase init」というコマンドを実行してフォルダを初期化して Firebase のホスティングに必要なファイルなどを準備します。注意するのはこの場合です。Firebase のデータベース機能やストレージ機能を初期化の際に指定した場合には、実はセキュリティルールのファイルを指定する場所があります。

このセキュリティルールのファイルを Firebase のホスティング情報をアップロードする際に、一緒にアップロードしてそのルールを適用する機能があります。この機能を使うと、Firebase コンソールでセキュリティルールを指定したつもりでも、このプロジェクトフォルダのセキュリティルールが上書きしてしまいます。きちんとこの仕組みを認識している場合には大きな問題ではないのですが、この仕組みを知らないと、気づかないうちに、Firebase コンソールで設定したルールが置き換えられているケースがあります。

Firebase のコンソールに行けば、現在設定されているルールを確認できます。しかし、セキュリティルールが上書きされたのに気づいていない場合、確認しないケースが多くなるので、開発用の PC では問題なく動作していたアプリがインターネットに公開すると突然動かなくなる場合があります。こうした場合は、まず現在の設定ルールを Firebase コンソールで確認する必要があります。

ルールの履歴も保存されています
Firebase のホスティングのプロジェクトフォルダのルールが、既存の Firebase コンソールで設定したルールを上書きしてしまった場合でも、復旧作業は簡単にできます。Firebase コンソールにはセキュリティルールの更新履歴が保存されています。この履歴を調べて、正しいセキュリティルールを見つけて再設定すれば、以前設定 s たセキュリティルールに戻すことが簡単にできます。

この時注意することは、必ず開発用の PC に保存されている Firebase のホスティングのプロジェクトフォルダのセキュリティルールを確認することです。Firebase コンソールで設定したセキュリティルールが上書きされたということは、このプロジェクトフォルダーのセキュリティルールは元々の Firebase コンソールのセキュリティルールとは違うということになります。

従ってこのプロジェクトフォルダのルールを更新して行わないと、Firebase のホスティングの情報を更新する度にセキュリティルールが書き換えられる事になります。これを防ぐためには、気づいた時点で Firebase ホスティングのプロジェクトフォルダのルールを Firebase コンソールのルールと同じにしておく必要があります。 ほとんどの場合、「firebase init」で作られるセキュリティルールはテンプレートのルールで基本的にルールが設定されていない状態という事になります。

Firebase のホスティング機能を利用する場合は、どんなセキュリティルールが適用されているか公開前に確認するとトラブルや問題を事前に見つける事ができます。

まとめ
Firebase のセキュリティルールを設定するのは、通常は Firebase コンソールで行います。しかし、Firebase のホスティング機能などを利用する場合は、Firebase ホスティングのプロジェクトフォルダに別のセキュリティルールのファイルが作られます。この場合は、2つの異なるセキュリティルールが存在する事になるので注意が必要です。

Firebase のホスティングの機能を利用する場合は、このことを頭の隅に置いておいて、どのようなセキュリティルールが Firebase のホスティングのプロジェクトフォルダにあるか確認することをお勧めします。こうする事で、予めこのセキュリティルールを Firebase コンソールと同じ物にしておくと問題になる前に対策が可能です。

気づかないとアプリが突然動かなくなったりして、原因を突き止めるのに時間がかかる場合もあるので、こうしたよくある失敗事例を認識して対策を行う事が重要になります。
サービス数40万件のスキルマーケット、あなたにぴったりのサービスを探す