Firebase AI Logic を使用するためのセキュリティ チェックリスト

モバイルアプリやウェブアプリから Gemini API を直接呼び出す場合は、バックエンド インフラストラクチャ、割り当て、独自のプロンプトを保護するために、多層防御アプローチが必要です。このチェックリストを確認して、Firebase AI Logic に推奨されるセキュリティのベスト プラクティスを実装します。

アプリ、デバイス、ユーザーの確認

受信リクエストが、正規のデバイスで実行されている正規の改ざんされていないアプリのインスタンスと、正規のユーザーから発信されたものであることを確認します。

適用 Firebase App Check

Firebase App Check を適用して、アプリから直接呼び出されたときに Gemini API が不正使用されないようにします。App Check が適用されると、受信したリクエストが正規のアプリまたは改ざんされていないデバイスから発信されたものであることが確認されます。

App Check は、Apple プラットフォーム(DeviceCheck、App Attest、reCAPTCHA Enterprise)、Android(Play Integrity、reCAPTCHA Enterprise)、ウェブ(reCAPTCHA Enterprise)の証明書プロバイダをサポートしています。また、Flutter アプリと Unity アプリのすべてのプロバイダもサポートしています。

2026 年 7 月上旬より、Firebase は Firebase コンソールのガイド付き設定で Firebase AI LogicApp Check を自動的に適用します。以前に Firebase AI Logic を設定した場合は、App Check を明示的に適用してください。ローカル開発では、App Check デバッグ プロバイダを設定し、エンドユーザーにリリースする前に、本番環境の証明書プロバイダにアプリを登録できます。

使用回数制限付きトークンでリプレイ保護を有効にする

App Check の設定の一環として、リプレイ保護 を適用してApp Check トークンを一度しか使用できないようにすることを検討してください。このオプションでは、ベースライン保護を超える保護が提供され、アプリとユースケースに適した保護レベルを設定できます。

Firebase API キーの制限を設定する

Firebase API キーは、リクエストを行うときに Firebase プロジェクトとアプリを識別します。API キーの不正使用を防ぐには:

  • Google Cloud コンソールで「アプリケーションの制限」を設定して、キーの使用をアプリの特定のバンドル ID(Apple)、パッケージ名と SHA-1 フィンガープリント(Android)、または HTTP リファラー(ウェブ)からのリクエストのみに制限します。

  • 各キーの「API の制限」の許可リストを確認します。

    • Firebase AI Logic API(firebasevertexai.googleapis.com)が許可リストに含まれていることを確認します。
    • 許可リストに登録されている他の API が、アプリに必要な特定の Firebase サービスのみであることを確認します。制限付き Firebase キーに必要な API のリストをご覧ください。

Firebase 関連の API は、Firebase プロジェクトまたはアプリの識別にのみ API キーを使用します。API の呼び出しの認証には使用しません。

リクエストを認証済みユーザーのみに制限する

Firebase AI Logic を介したすべてのリクエストに Firebase Authentication からの有効な認証情報を含めるように、認証済みユーザーモードの適用を検討してください。認証されていないエンドユーザーからのリクエストは、401: unauthenticated エラーで拒否されます。

プロンプトの保護とリクエストの強化

クライアントの逆コンパイルによってプロンプト設計が公開されるのを防ぎ、悪意のあるユーザーが任意のプロンプトを実行できないようにバックエンドをロックダウンします。

サーバー プロンプト テンプレートを使用する

サーバーのプロンプト テンプレートを使用して、プロンプト、システム指示、モデル構成をクラウドに安全に保存します。クライアント アプリのコードにハードコードすると、バイナリの逆コンパイルによって抽出される可能性があります。

アプリはテンプレート ID のみを参照し、動的入力変数を渡します。サーバー プロンプト テンプレートを使用すると、アプリの新しいバージョンをリリースしなくても、プロンプトを更新したり、モデルをオンデマンドで切り替えたりすることもできます。

クライアントから提供されたテンプレート変数を検証してサニタイズする

サーバー プロンプト テンプレートはプロンプト設計を保護しますが、動的変数を受け入れるテンプレートはプロンプト インジェクションの影響を受ける可能性があります。テンプレートはユーザー入力変数を最終的なプロンプトに連結するため、次のことを確認してください。

  • クライアントですべてのユーザー入力を検証してサニタイズしてから、テンプレートに変数(文字数制限や想定される形式など)を渡します。
  • ユーザー入力の処理方法のガードレールを定義する明確なシステム指示をテンプレートに含めます。

テンプレート専用モードの適用

アプリのすべての機能でサーバー プロンプト テンプレートを使用するようになったら、テンプレート専用モードを適用することを検討してください。適用されると、Firebase AI LogicGemini API403: unauthorized)へのすべての直接のテンプレートなしリクエストをブロックし、悪意のあるユーザーが任意のプロンプトを送信したり、割り当てを不正使用したりすることを防ぎます。

モニタリング、上限、課金

受信トラフィックとセキュリティの異常を可視化し、予期しない使用量の急増や費用の増大からプロジェクトを保護します。

Firebase コンソールで AI モニタリングを設定する

Firebase コンソールの AI モニタリングを設定して、リクエスト数、レイテンシ、トークン使用量、エラー率(401 認証の失敗や 403 テンプレートのみのブロックなど)などの主要な指標を可視化します。Google Cloud コンソールで個々のトレースを検査することもできます。

レート制限を設定して割り当てを管理する

予期しない使用量の急増やウォレット拒否攻撃からプロジェクトを保護する:

アラートと費用上限で想定外の請求を回避する

Firebase プロジェクトが従量課金制の Blaze のお支払いプランに登録されている場合:

次のステップ