App Check を使用して API キーを保護する

Firebase App Check は、正規のアプリ以外のソースからのトラフィックをブロックすることで、アプリから Google Maps Platform への呼び出しを保護します。これは、reCAPTCHA Enterpriseなどの証明書プロバイダからのトークンを確認することで行われます。アプリを 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 と統合する手順の概要は次のとおりです。

  1. Firebase をアプリに追加します。
  2. App Check ライブラリを追加して初期化します。
  3. トークン プロバイダをアプリに追加します。
  4. Places API と App Check API を初期化します。
  5. デバッグを有効にします。
  6. アプリのリクエストをモニタリングし、適用を決定します。

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、Places ライブラリが読み込まれたアプリ。
  • Maps JS API と Places API(新しい)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 ライブラリを読み込む

  1. 次のスニペットに示すように、Core、Maps、Places ライブラリを読み込みます。詳細と手順については、Maps JavaScript API Place クラスのドキュメントをご覧ください。

    async function init() {
      const {Settings} = await google.maps.importLibrary('core');
      const {Map} = await google.maps.importLibrary('maps');
      const {Place} = await google.maps.importLibrary('places');
    }  

ステップ 4: Places API と App Check API を初期化する

  1. Firebase コンソールで提供される構成を使用して App Check を初期化します。
  2. Maps JS API へのリクエストに App Check トークンが含まれていることを確認します。
      async function init() {
        const {Settings} = await google.maps.importLibrary('core');
        const {Map} = await google.maps.importLibrary('maps');
        const {Place} = await google.maps.importLibrary('places');
      
        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);
      
        // Make a Places JS request
        const place = new Place({id: 'ChIJN5Nz71W3j4ARhx5bwpTQEGg'});
        await place.fetchFields({fields: ['*']});
      
        // 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 のドキュメントをご覧ください。