できること
Firebase Hostingが標準で提供しているセキュリティ機能として、HTTPSの自動適用とカスタムドメインのSSL証明書管理があります。通信経路の暗号化は担保されているため、「URLを知っている人なら誰でもHTTPSで安全に閲覧できる」状態は作れます。ただしこれは「誰でも見られる」ことを意味しており、アクセス制御とは別の話です。
Firebase Authentication(メール認証・Googleアカウント認証)をアプリに組み込めば、ログインした特定ユーザーだけが閲覧できるページを作ることは可能です。ただしこれはアプリ内の認証であり、Hostingレイヤーのアクセス制御ではないため、認証をバイパスした直接URLアクセスを防ぐには追加のCloud Functions実装が必要です。
- 相手がログインなしで開ける状態か確認する
- PCとスマホで最低1回ずつ表示を確認する
- 内部情報・個人情報・不要な外部送信が残っていないか見る
- レビュー期限と修正時の差し替え方を決めておく
できないこと
Firebase Hostingは「このURLは3日後に消す」という期限を自動的に管理できません。Preview Channelの--expiresオプションは最大30日ですが、liveチャンネルには適用外で、設定し忘れたチャンネルは手動削除するまで永続します。レビュー用に発行したURLが承認後も6ヶ月以上アクセス可能なまま残るという事例は珍しくありません。
アクセスログの取得もFirebase Hosting単体ではできません。「誰が何時にURLを開いたか」を記録するにはCloud Loggingと連携した追加設定が必要で、ログを確認するためのGCPコンソールの操作も求められます。承認フローの記録としてアクセスログが必要な業務では、この欠落がコンプライアンス上の問題になる場合があります。
認証と期限の違い
認証の欠落を補う最小工数の方法として、HTMLにJavaScriptでパスワードチェックを実装する方法があります。しかしこれはソースコードを見ればパスワードを確認できるため、実質的なセキュリティ効果はなく、「閲覧制限している」という形式だけを作ることになります。真の認証が必要な場合は、サーバー側での検証が不可欠です。
期限管理の欠落を補う現実的な方法は、Cloud Schedulerを使ったチャンネル自動削除スクリプトを組み込むか、Googleカレンダーにリマインダーを設定して手動削除する運用のいずれかです。前者は構築工数が発生し、後者は人的ミスのリスクが残ります。認証付き共有サービスはこれらを組み込み済みのため、追加開発ゼロで期限管理が実現します。
- 誰でも見てよい: URL共有のみでもよいが、検索除外は確認する
- 特定の相手だけ: パスワードまたはメール認証を使う
- 会社内だけ: 会社ドメイン認証を検討する
- 短期レビュー: 期限を設定して古いURLを残さない
差し替え・レビュー運用
認証・期限の欠落を「Firebase Hosting + 追加実装」で補う場合、Cloud Functions・Firebase Authentication・Cloud Loggingの3サービスを連携させる必要があります。月あたりの追加コストは小規模なら数百円程度ですが、設計・実装・テストに数日の工数が発生するため、レビュー案件が月に数件しかない場合はコストに見合わない可能性があります。
一方、認証付き共有サービスを「レビュー特化の補完ツール」として並行導入する場合、Firebase Hostingはそのまま本番デプロイに使い続け、ビルド成果物だけを共有サービスにアップロードします。この役割分担により、Firebase側のアーキテクチャを変更せずに認証・期限・アクセスログの欠落をすべて解消できます。
- 確認してほしい観点を3つ以内に絞る
- 期限と返信先を明記する
- 修正後も同じURLで見られるか伝える
- 最終版と途中版が混ざらないようタイトルを付ける
向いているケース早見表
Firebase側で認証・期限を追加実装するのが向いているのは、すでにFirebase AuthenticationをアプリのログインシステムとしてH使っていて、同じユーザー基盤でレビュー閲覧権限を管理したいケースです。既存の認証インフラを拡張するだけで対応でき、追加サービス契約が不要になります。
認証付き共有サービスで補うのが向いているのは、レビュワーがFirebaseのユーザー管理外にいる外部関係者(取引先・発注者・審査担当者)で、都度Firebaseのユーザー登録を作成する運用が現実的でないケースです。共有サービスはURL一つとパスワードだけで外部ユーザーに閲覧権限を与えられ、期限後は自動失効するため管理コストが最小化されます。
よくある質問
Firebase HostingのPreview Channelで--expiresを指定したのに期限前にURLが消えることがありますが、原因は何ですか?
プロジェクトのPreview Channel上限数(デフォルト50)に達した場合、古いチャンネルが自動削除されることがあります。また`firebase hosting:channel:delete`を別の作業で誤って実行した可能性も確認してください。
Cloud Functionsで認証レイヤーを追加する場合、コールドスタートによる遅延がレビュワーの体験に影響しますか?
コールドスタートは初回アクセスで1〜3秒の遅延を引き起こすことがあります。最小インスタンス数を1以上に設定すると常時ウォーム状態になりますが、その分課金が発生します。レビュー用途では月に数回の起動なので無視できる場合がほとんどです。
Firebase Hostingに認証を追加せず、URLを知らせる範囲だけでアクセス制限する方法は実用的ですか?
ランダムな文字列を含むURLによるセキュリティ(Obscurity by URL)は、URLが転送・スクリーンショット・ログ経由で漏洩するリスクがあり、実用的なアクセス制限とは言えません。機密性のある内容は必ず認証を組み合わせてください。