App Check を使用して API キーを保護する
Firebase App Check は、正規のアプリ以外のソースから発信されたトラフィックをブロックすることで、アプリから Google Maps Platform への呼び出しを保護します。これは、Play Integrity などの証明書プロバイダからのトークンをチェックすることで行われます。アプリを App Check と統合すると、悪意のあるリクエストから保護され、不正な API 呼び出しに対して課金されることはありません。
App Check は自分に適していますか?
ほとんどの場合、App Check の使用が推奨されますが、次の場合は App Check が不要であるか、サポートされていません。
- 元の Places SDK を使用している。App Check は Places SDK(新版)でのみサポートされています。
- 限定公開アプリまたは試験運用版アプリ。アプリが一般公開されていない場合は、App Check は必要ありません。
- アプリがサーバー間でのみ使用される場合は、App Check は必要ありません。ただし、GMP と通信するサーバーがパブリック クライアント(モバイルアプリなど)で使用されている場合は、GMP ではなく App Check を使用してそのサーバーを保護することを検討してください。
- App Check の推奨証明書プロバイダは、証明書プロバイダによって危険にさらされている、または信頼できないと判断されたデバイスでは機能しません。このようなデバイスをサポートする必要がある場合は、カスタム構成証明サービスをデプロイできます。詳しくは、手順をご覧ください。
実装手順の概要
大まかに言うと、アプリを App Check と統合する手順は次のとおりです。
- Firebase をアプリに追加します。
- App Check ライブラリを追加して初期化します。
- トークン プロバイダを追加します。
- デバッグを有効にします。
- アプリのリクエストをモニタリングし、適用を決定します。
App Check と統合すると、Firebase コンソールでバックエンド トラフィック指標を確認できるようになります。これらの指標では、有効な App Check トークンを含むリクエストと含まないリクエストの内訳を確認できます。詳細については、Firebase App Check のドキュメントをご覧ください。
ほとんどのリクエストが正当なソースからのものであり、ユーザーが App Check の実装を含むアプリの最新バージョンに更新していることを確認できたら、適用を有効にできます。適用が有効になると、App Check は有効な App Check トークンのないすべてのトラフィックを拒否します。
App Check の統合を計画する際の考慮事項
統合を計画する際に考慮すべき事項は次のとおりです。
おすすめの証明書プロバイダである Play Integrity には、Standard API の使用量ティアに対して 1 日あたりの呼び出し上限があります。呼び出し上限の詳細については、Google Play Integrity デベロッパー ドキュメントの設定ページをご覧ください。
カスタムの証明書プロバイダを使用することもできますが、これは高度なユースケースです。詳細については、App Check カスタム プロバイダを実装するをご覧ください。
-
アプリのユーザーは、起動時にレイテンシが発生します。ただし、その後は定期的な再証明がバックグラウンドで行われるため、ユーザーはレイテンシを感じることはなくなります。起動時のレイテンシの正確な量は、選択した構成証明プロバイダによって異なります。
App Check トークンが有効である期間(有効期間、または TTL)によって、再認証の頻度が決まります。この期間は Firebase コンソールで設定できます。再証明は、TTL の約半分が経過したときに発生します。詳細については、構成証明プロバイダの Firebase ドキュメントをご覧ください。
アプリを App Check と統合する
前提条件と要件
- バージョン 4.1 以降の Places SDK が統合されているアプリ。
- アプリの SHA-256 フィンガープリント。
- アプリのパッケージ名。
- Cloud Console でアプリのオーナーである必要があります。
- Cloud Console からアプリのプロジェクト ID を取得する必要があります。
ステップ 1: Firebase をアプリに追加する
Firebase デベロッパー ドキュメントの手順に沿って、アプリに Firebase を追加します。
ステップ 2: App Check ライブラリを追加して App Check を初期化する
デフォルトの証明書プロバイダである Play Integrity の使用については、Android で Play Integrity を使用して App Check を使ってみるをご覧ください。
- まだ Places SDK をアプリに統合していない場合は、統合します。
次に、App Check と Places クライアントを初期化します。
// Initialize App Check FirebaseApp.initializeApp(/* context= */ this); FirebaseAppCheck firebaseAppCheck = FirebaseAppCheck.getInstance(); firebaseAppCheck.installAppCheckProviderFactory( PlayIntegrityAppCheckProviderFactory.getInstance()); // Initialize Places SDK Places.initializeWithNewPlacesApiEnabled(context, API_KEY); PlacesClient client = Places.createClient(context);.
ステップ 3: トークン プロバイダを追加する
Places API を初期化したら、setPlacesAppCheckTokenProvider()
を呼び出して PlacesAppCheckTokenProvider
を設定します。
Places.initializeWithNewPlacesApiEnabled(context, API_KEY); Places.setPlacesAppCheckTokenProvider(new TokenProvider()); PlacesClient client = Places.createClient(context);.
トークン フェッチャー インターフェースの実装例を次に示します。
/** Sample client implementation of App Check token fetcher interface. */ static class TokenProvider implements PlacesAppCheckTokenProvider { @Override public ListenableFuture<String> fetchAppCheckToken() { SettableFuture<String> future = SettableFuture.create(); FirebaseAppCheck.getInstance() .getAppCheckToken(false) .addOnSuccessListener( appCheckToken -> { future.set(appCheckToken.getToken()); }) .addOnFailureListener( ex -> { future.setException(ex); }); return future; } }
ステップ 4: デバッグを有効にする(省略可)
アプリをローカルで開発してテストする場合や、継続的インテグレーション(CI)環境で実行する場合は、デバッグ シークレットを使用して有効な App Check トークンを取得するアプリのデバッグビルドを作成できます。これにより、デバッグビルドで実際のアテステーション プロバイダを使用することを回避できます。
エミュレータまたはテストデバイスでアプリを実行するには:
build.gradle
ファイルに App Check ライブラリを追加します。- デバッグビルドで、デバッグ プロバイダ ファクトリを使用するように App Check を構成します。
- アプリを起動します。ローカル デバッグ トークンが作成されます。このトークンを Firebase コンソールに追加します。
- 詳細と手順については、App Check のドキュメントをご覧ください。
CI 環境でアプリを実行するには:
- Firebase コンソールでデバッグトークンを作成し、CI システムの安全なキー ストレージに追加します。
build.gradle
ファイルに App Check ライブラリを追加します。- デバッグ トークンを使用するように CI ビルド バリアントを構成します。
- App Check トークンを必要とするテストクラスのコードを
DebugAppCheckTestHelper
でラップします。 - 詳細と手順については、App Check のドキュメントをご覧ください。
ステップ 5: アプリのリクエストをモニタリングし、強制措置を決定する
適用を開始する前に、アプリの正規ユーザーを中断しないように対策を行う必要があります。そのためには、App Check の指標画面で、アプリのトラフィックのうち、確認済み、古い、不正なトラフィックの割合を確認します。トラフィックの大部分が確認されたら、適用を有効にできます。
詳細と手順については、Firebase App Check のドキュメントをご覧ください。