Firebase App Check で Gemini API の不正使用を防止する

モバイルアプリやウェブアプリから API を直接呼び出す場合(生成 AI モデルへのアクセスを許可する API など)、API は不正なクライアントによる不正使用に対して脆弱になります。これらの API を不正使用から保護するために、 Firebase App Check を使用して、受信するすべての API 呼び出し が実際のアプリと未改造のデバイスからのものであることを確認できます。

Firebase AI Logic は、 Firebase App Check と統合し、 モバイルアプリやウェブアプリから呼び出される生成 AI モデル API を保護できるプロキシ ゲートウェイを提供します。 Firebase AI Logic SDK で App Check を使用すると、次のすべての構成がサポートされます。

  • 「Gemini API」プロバイダの両方を保護します: Gemini Developer APIVertex AI Gemini API

  • Gemini モデルと Imagen モデルの両方の、サポートされているすべてのモデルを保護します。

App Checkリプレイ保護もサポートしています。つまり、 App Check トークンは 1 回しか使用できません。

App Check の仕組みの概要

App Check を使用すると、アプリを実行しているデバイスでアプリまたはデバイスの証明書プロバイダを使用して、次のいずれか、または両方であることを証明できます。

  • 正規のアプリから送信されたリクエストであること
  • 正規の未改造のデバイスから送信されたリクエストであること

この証明書は、 Firebase AI Logic SDK を使用してアプリが行うすべてのリクエストに添付されます。App Check の適用を有効にすると、承認していないアプリまたはプラットフォームからのリクエストと同様に、有効な証明書がないクライアントからのリクエストは拒否されます。

App Check を設定する際は、 リプレイ保護を追加することを検討してください。これにより、App Check トークンは 1 回のみ使用可能になります。このオプションを使用すると、ベースライン保護よりも保護が強化され、アプリとユースケースに適した保護レベルを設定できます。

の詳細については、App Check割り当てと上限など、 ドキュメントをご覧ください。

App Check を設定する

App Check のドキュメントには、証明書 プロバイダの詳細と、実装手順の詳細が記載されています。

  1. 証明書プロバイダを選択し、次のリンクの実装手順に沿って操作します。

    これらの証明書プロバイダでは要件を満たすことができない場合は、サードパーティの証明書プロバイダを使用できます。また、独自の証明手法を使用する独自のプロバイダを実装することもできます。

  2. (必須) 適用 アプリを一般公開されているソースコード管理 システムに commit する前、アプリを共有する前、アプリを一般公開する前に、を有効にします。App Check

  3. (推奨) リプレイ保護を追加して保護を強化します。 これにより、App Check トークンは 1 回しか使用できなくなります。

  4. App Check が適用されているローカル開発では、 App Check デバッグ プロバイダを構成して、証明書をバイパスしながら App Check の適用を維持します。ご使用のプラットフォームの設定手順をご覧ください: iOS+ | Android | ウェブ | Flutter | Unity.

リプレイ保護を追加して保護を強化する

最新バージョンの SDK を使用することをおすすめしますが、 リプレイ保護を使用するには、次のいずれかのバージョンを最低限使用する必要があります。
Apple プラットフォーム v12.2.0 以降 | Android BoM v34.14.0 以降(App Check v19.1.0 以降)| ウェブ v12.14.0 以降 | Flutter v4.15.0 以降(App Check v4.10.0 以降)| Unity v13.12.0 以降

デフォルトでは、App Checkセッション トークンを使用します。セッション トークンの 有効期間(TTL)は 30 分7 日の範囲で構成できます。 これらのセッション トークンは App Check SDK によってキャッシュされ、アプリからの リクエストとともに送信され、TTL が切れるまで再利用できます。セッション トークンを使用することは、ベースライン保護と見なされます。

ただし、 リプレイ保護を適用することで、このベースライン保護よりも保護を強化できます。リプレイ保護では、代わりに使用回数制限付きトークンを使用します。リプレイ保護が適用されている場合、次のようになります。

  • App Check は、Firebase AI Logic を使用する セッション トークンへのリクエストをブロックします。代わりに、App Check は、許可する場合にのみ、 Firebase AI Logic へのリクエストを新しく生成された使用回数制限付きトークンします。

  • 使用回数制限付きトークンが検証されると、トークンは使用済みにされ、1 回しか使用できなくなるため、リプレイ攻撃を防ぐことができます。

  • App Check SDK は、リクエストごとに新しい使用回数制限付きトークンを生成します。このプロセスでは、レイテンシが発生し、証明書プロバイダによっては費用が発生する可能性があるため、リクエストに影響する可能性があります。

リプレイ保護を設定して適用する

Gemini API プロバイダをクリックして、このページでプロバイダ固有のコンテンツとコードを表示します。

リプレイ保護を設定して適用する方法は次のとおりです。

  1. まだ を実装していない場合は、実装して、アプリの の適用を有効にしますApp CheckApp Check

  2. 使用回数制限付きトークンの使用を有効にします。

    インスタンス化時に、アプリで useLimitedUseAppCheckTokens パラメータを true に設定します。

    Swift

    
    // ...
    
    // During instantiation, enable usage of limited-use tokens
    let ai = FirebaseAI.firebaseAI(
      backend: .googleAI(),
      useLimitedUseAppCheckTokens: true
    )
    
    // ...
    
    

    Kotlin

    
    // ...
    
    // During instantiation, enable usage of limited-use tokens
    val ai = Firebase.ai(
      backend = GenerativeBackend.googleAI(),
      useLimitedUseAppCheckTokens = true
    )
    
    // ...
    
    

    Java

    
    // ...
    
    // During instantiation, enable usage of limited-use tokens
    FirebaseAI ai = FirebaseAI.getInstance(
      /* backend: */ GenerativeBackend.googleAI(),
      /* useLimitedUseAppCheckTokens: */ true
    );
    
    // ...
    
    

    Web

    
    // ...
    
    // During instantiation, enable usage of limited-use tokens
    const ai = getAI(firebaseApp, {
      backend: new GoogleAIBackend(),
      useLimitedUseAppCheckTokens: true
    });
    
    // ...
    
    

    Dart

    
    // ...
    
    // During instantiation, enable usage of limited-use tokens
    final ai = await FirebaseAI.googleAI(
      useLimitedUseAppCheckTokens: true,
    );
    
    // ...
    
    

    Unity

    // ...
    
    // During instantiation, enable usage of limited-use tokens
    var ai = FirebaseAI.GetInstance(
      useLimitedUseAppCheckTokens: true
    );
    
    // ...
    
  3. リプレイ保護を適用します。

    1. アプリのコードベースで、使用回数制限付きトークンの使用が有効になっていることを確認します(前の手順を参照)。

    2. Firebase[**セキュリティ**] > [**App Check**] コンソールで、に移動します。

    3. Firebase AI Logic の指標ビューを開きます。

    4. [ベースライン保護]が [適用]されていることを確認し、 [続行]をクリックします。

    5. リプレイ保護で、[適用しない(モニタリングのみ)] または [適用] を選択します。

      リプレイ保護を適用するタイミングを決定する際は、次の点を考慮してください。

      • 使用回数制限付きトークンの使用が有効になっていない古いバージョンのアプリを使用しているユーザーが多数いる場合は、リクエストをモニタリングすることをおすすめします。リプレイ保護をすぐに適用すると、それらのユーザーからのリクエストはブロックされます。

      • 未確認: トークンが再利用されました 指標をモニタリングできます。これは、以前のリクエストですでに使用されているトークンを含むリクエストの数です。この指標は、 Firebase コンソール([セキュリティ] > [App Check] > [API] タブ)でモニタリングできます。

        最近のリクエストの大部分がこのカテゴリに該当する場合は、ユーザーの混乱を避けるため、使用回数制限付きトークンを使用するバージョンのアプリに更新するユーザーが増えるまで、リプレイ保護の適用を待つことを検討してください。

Firebase AI LogicApp Check の統合方法について

Firebase AI Logic SDK を使用するには、Firebase プロジェクトで Firebase AI Logic API(firebasevertexai.googleapis.com を有効にする必要があります。これは、 Firebase AI Logic SDK によって行われたリクエストが、まず Firebase AI Logic サーバーに送信されるためです。このサーバーはプロキシ ゲートウェイとして機能し、リクエストが選択した "Gemini API" プロバイダのバックエンドと Gemini モデルと Imagen モデルにアクセスする API に進む前に、Firebase App Check 検証 が行われます。

(省略可) 本番環境の証明書プロバイダを使用せずに App Check を適用する(デバッグ プロバイダのみ)

本番環境の証明書プロバイダにアプリを登録しなくても、App CheckAI Logic を適用できます。この設定により、App Check デバッグ プロバイダを使用して、AI Logicを保護しながら を簡単に開始できます。Gemini API

  1. App CheckAI Logic にすでに適用されているかどうかを確認します。

    1. Firebase コンソールで、[セキュリティ] > [App Check] > [API] タブに移動します

    2. Firebase AI Logic の行を見つけます。[Unenforced] と表示されている場合は、この手順の残りの部分に進みます。

  2. Firebase AI Logic の行をクリックすると、指標グラフが表示されます。 グラフの下にある [設定] をクリックします。

  3. ダイアログの最初の画面([Baseline protection])で、 [Enforced] を選択し、[Continue] をクリックします。

  4. 次の画面([リプレイ保護])で、[無効] を選択します。この設定はいつでも後で設定して、この設定ワークフローに戻ることができます。[続行] をクリックします。

  5. 最後の画面で、App Check の適用に関する考慮事項を確認し、App Checkを適用する準備ができていることを確認します。準備ができたら、[続行] をクリックします。

    App Check を適用し、本番環境前のアプリで AI Logic とデバッグ プロバイダのみを使用する場合は、アプリを登録する必要はありません。ただし、アプリをエンドユーザーにリリースする準備ができたら、本番環境の証明書プロバイダ(App Attest、Play Integrity、reCAPTCHA Enterprise など)の設定の一環としてアプリを登録する必要があります。App CheckAI Logic

  6. App Check が適用されているローカル開発では、 証明書をバイパスするように App Check デバッグ プロバイダを構成する必要があります。 App Check の適用を維持しながら

    デバッグ プロバイダの構成の詳細については、ご使用のプラットフォームの手順をご覧ください: iOS+ | Android | ウェブ | Flutter | Unity