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 Developer APIVertex AI Gemini API の両方の「Gemini API」プロバイダを保護します。

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

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

App Check の仕組みの概要

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

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

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

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

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

App Checkを設定

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

  1. デフォルトの構成証明プロバイダを選択し、次のリンクにある実装手順に沿って操作します。

    デフォルトの証明書プロバイダでは要件を満たすことができない場合は、サードパーティの証明書プロバイダまたは独自の証明手法を使用するカスタム プロバイダを実装できます。

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

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

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

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

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

ただし、リプレイ保護を適用することで、このベースライン保護を超えて保護を強化できます。リプレイ保護では、代わりに限定使用トークンが使用されます。リプレイ保護が適用されている場合、次の処理が行われます。

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

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

  • App Check SDK は、リクエストに対して新しい限定使用トークンを生成します。このプロセスでは、レイテンシが追加され、場合によっては費用が発生する可能性があるため、リクエストに影響する可能性があります(証明書プロバイダによって異なります)。

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

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

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

  1. まだ実装していない場合は、アプリに App Check を実装し、App 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 検証が行われるプロキシ ゲートウェイとして機能します。