App Check を使用して API キーを保護する
Firebase App Check は、正規のアプリ以外のソースから発信されたトラフィックをブロックすることで、アプリから Google Maps Platform への呼び出しを保護します。これは、reCAPTCHA Enterprise などの証明書プロバイダからのトークンを確認することで行われます。アプリを App Check と統合すると、悪意のあるリクエストから保護され、不正な API 呼び出しに対して課金されなくなります。
App Check は私に適していますか?
ほとんどの場合、App Check を使用することをおすすめしますが、次のような場合は App Check が不要であるか、サポートされていません。
- 非公開アプリまたは試験運用版アプリ。アプリが一般公開されていない場合、App Check は必要ありません。
- アプリがサーバー間でのみ使用される場合、App Check は必要ありません。ただし、GMP と通信するサーバーがパブリック クライアント(モバイルアプリなど)で使用されている場合は、GMP ではなく App Check を使用してそのサーバーを保護することを検討してください。
実装手順の概要
大まかに言うと、アプリを App Check と統合する手順は次のとおりです。
- Firebase をアプリに追加します。
- App Check ライブラリを追加して初期化します。
- トークン プロバイダをアプリに追加します。
- Maps JS API と App Check API を初期化します。
- デバッグを有効にします。
- アプリのリクエストをモニタリングし、適用を決定します。
App Check と統合すると、Firebase コンソールでバックエンド トラフィックの指標を確認できるようになります。これらの指標では、有効な App Check トークンが添付されているかどうかに基づいてリクエストの内訳を確認できます。詳細については、Firebase App Check のドキュメントをご覧ください。
ほとんどのリクエストが正当なソースからのものであり、ユーザーが App Check の実装を含むアプリの最新バージョンに更新していることを確認できたら、適用を有効にできます。適用が有効になると、App Check は有効な App Check トークンがないすべてのトラフィックを拒否します。
App Check の統合を計画する際の考慮事項
統合を計画する際は、次の点を考慮してください。
- おすすめの証明書プロバイダの 1 つである reCAPTCHA Enterprise では、1 か月あたり 10,000 件を超える評価に対して料金が発生します。
おすすめするもう 1 つの証明書プロバイダである reCAPTCHA v3 には割り当てがあり、割り当てを超えるとトラフィックは評価されません。
カスタムの構成証明プロバイダを使用することもできますが、これは高度なユースケースです。詳細については、App Check のドキュメントをご覧ください。
-
アプリのユーザーは、起動時に多少のレイテンシを経験することになります。ただし、その後は定期的な再証明がバックグラウンドで行われるため、ユーザーが遅延を感じることはなくなります。起動時の正確なレイテンシは、選択した証明書プロバイダによって異なります。
App Check トークンが有効である期間(有効期間、TTL)によって、再認証の頻度が決まります。この期間は Firebase コンソールで構成できます。再証明は、TTL の約半分が経過したときに行われます。詳細については、証明書プロバイダの Firebase ドキュメントをご覧ください。
アプリを App Check と統合する
前提条件と要件
- Maps JS API の最新の週次または四半期ごとのバージョンと Core ライブラリが読み込まれたアプリ。
- Maps JS API が有効になっているクラウド プロジェクト。
- Cloud コンソールでアプリのオーナーである必要があります。
- Cloud コンソールからアプリのプロジェクト ID を取得する必要があります。
ステップ 1: Firebase をアプリに追加する
Firebase デベロッパー ドキュメントの手順に沿って、アプリに Firebase を追加します。
ステップ 2: App Check ライブラリを追加して App Check を初期化する
Firebase には、デフォルトの証明書プロバイダごとに手順が用意されています。この手順では、Firebase プロジェクトを設定し、App Check ライブラリをアプリに追加する方法について説明します。提供されているコードサンプルに沿って、App Check を初期化してください。
ステップ 3: Maps JS API ライブラリを読み込む
次のスニペットに示すように、コア ライブラリと Maps ライブラリを読み込みます。詳細と手順については、Maps JavaScript API のドキュメントをご覧ください。
async function init() { const {Settings} = await google.maps.importLibrary('core'); const {Map} = await google.maps.importLibrary('maps'); }
ステップ 4: Maps API と App Check API を初期化する
- Firebase コンソールから提供された構成を使用して App Check を初期化します。
- Maps JS API へのリクエストに App Check トークンが伴っていることを確認します。
import {initializeApp} from 'firebase/app'; import { getToken, initializeAppCheck, ReCaptchaEnterpriseProvider, } from 'firebase/app-check'; async function init() { const {Settings} = await google.maps.importLibrary('core'); const {Map} = await google.maps.importLibrary('maps'); const app = initializeApp({ // Your firebase configuration object }); // Pass your reCAPTCHA Enterprise site key to initializeAppCheck(). const appCheck = initializeAppCheck(app, { provider: new ReCaptchaEnterpriseProvider( 'abcdefghijklmnopqrstuvwxy-1234567890abcd', ), // Optional argument. If true, the SDK automatically refreshes App Check // tokens as needed. isTokenAutoRefreshEnabled: true, }); Settings.getInstance().fetchAppCheckToken = () => getToken(appCheck, /* forceRefresh = */ false); // Load a map map = new Map(document.getElementById("map"), { center: { lat: 37.4161493, lng: -122.0812166 }, zoom: 8, }); }
ステップ 5: デバッグを有効にする(省略可)
アプリをローカルで開発およびテストする場合や、継続的インテグレーション(CI)環境で実行する場合は、デバッグ シークレットを使用して有効な App Check トークンを取得するアプリのデバッグビルドを作成できます。これにより、デバッグビルドで実際の構成証明プロバイダを使用することを回避できます。
アプリをローカルでテストするには:
- 開発目的でデバッグ プロバイダを有効にします。
- SDK のデバッグログから、自動的に生成されたランダムな UUID4(App Check のドキュメントではデバッグトークンと呼ばれます)が返されます。このトークンを Firebase コンソールに追加します。
- 詳細と手順については、App Check のドキュメントをご覧ください。
CI 環境でアプリを実行するには:
- Firebase コンソールからランダムな UUID4 を生成します。
- UUID4 をデバッグトークンとして追加し、CI テストがテスト実行ごとにアクセスするシークレット ストアにコピーします。
- 詳細と手順については、App Check のドキュメントをご覧ください。
ステップ 6: アプリのリクエストをモニタリングし、対応を決定する
適用を開始する前に、アプリの正規ユーザーを中断しないように対策を行う必要があります。これを行うには、App Check の指標画面にアクセスして、アプリのトラフィックのうち、検証済み、期限切れ、不正なトラフィックの割合を確認します。トラフィックの大部分が検証済みであることが確認できたら、適用を有効にできます。
詳細と手順については、Firebase App Check のドキュメントをご覧ください。