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

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

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

最新バージョンの 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 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
    );
    
    // ...
    
    Firebase Remote ConfigRemote Config
  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" プロバイダのバックエンドと GeminiImagen モデルにアクセスする API に進む前に、Firebase App Check 検証 が 行われます