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 の統合を計画する際の考慮事項
統合を計画する際に考慮すべき事項をいくつかご紹介します。
- Google が推奨する証明書プロバイダの 1 つである reCAPTCHA Enterprise では、1 か月あたり 10,000 件を超える評価に対して料金が発生します。
Google が推奨するもう 1 つの証明書プロバイダである reCAPTCHA v3 には割り当てがあり、割り当てを超えるとトラフィックは評価されません。
カスタム証明書プロバイダを使用することもできますが、これは高度なユースケースです。詳細については、App Check のドキュメントをご覧ください。
-
アプリのユーザーは、起動時にレイテンシが発生します。ただし、その後は、定期的な再証明がバックグラウンドで行われるため、ユーザーにレイテンシが発生することはありません。起動時のレイテンシの正確な量は、選択した証明書プロバイダによって異なります。
App Check トークンが有効な時間(有効期間または TTL)によって、再証明の頻度が決まります。この期間は、Firebase コンソールで設定できます。再証明は、TTL の約半分が経過したときに発生します。詳細については、証明書プロバイダの Firebase ドキュメントをご覧ください。
アプリを App Check と統合する
前提条件と要件
- 最新の週次または四半期ごとのバージョンの Maps JS API と Core ライブラリが読み込まれたアプリ。
- Maps JS API が有効になっているクラウド プロジェクト。
- Cloud Console でアプリの所有者である必要があります。
- Cloud Console からアプリのプロジェクト ID を取得する必要があります。
ステップ 1: Firebase をアプリに追加する
Firebase デベロッパー ドキュメントの手順に沿って、アプリに Firebase を追加します。
ステップ 2: App Check ライブラリを追加して App Check を初期化する
Firebase には、デフォルトの証明書プロバイダごとに手順が用意されています。これらの手順では、Firebase プロジェクトを設定して、App Check ライブラリをアプリに追加する方法について説明します。提供されているコードサンプルに沿って App Check を初期化します。
ステップ 3: Maps JS API ライブラリを読み込む
次のスニペットに示すように、Core ライブラリと 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 のドキュメントをご覧ください。