Firebase の API キーの使用と管理について学ぶ

API キーは、Firebase や Google サービスとやり取りするときに、目的の Firebase プロジェクトにリクエストをルーティングするために使用する一意の文字列です。このページでは、API キーの基本的な情報と、Firebase アプリでの API キーの使用と管理に関するベスト プラクティスについて説明します。

API キーと Firebase に関する一般的な情報

Firebase の API キーは、通常の API キーとは異なる

API キーの一般的な使用方法とは異なり、Firebase サービスの API キーは、バックエンド リソースへのアクセス制御には使用されませんバックエンド リソースへのアクセス制御は、Firebase Security Rules(リソースにアクセスできるエンドユーザーを制御)と Firebase App Check(リソースにアクセスできるアプリを制御)のみによって行います。

通常、API キーは細心の注意を払って保護する必要があります(たとえば Vault サービスを使用したり、キーを環境変数として設定したりするなど)。しかし、Firebase サービスの API キーは、コードまたはチェックインされた構成ファイルに含めても問題ありません。

Firebase サービスの API キーをコードに含めることは安全ですが、適切な制限と上限を確認して適用する必要があります。

API キーの作成

1 つの Firebase プロジェクトには多くの API キーを設定できますが、各 API キーに関連付けられる Firebase プロジェクトは 1 つだけです。

Firebase アプリ用に Firebase によって自動的に作成される API キー

次のいずれかの操作を行うと、Firebase はプロジェクト用の API キーを自動的に作成します。

  • Firebase プロジェクトを作成 > Browser key が自動作成される
  • Firebase Apple アプリを作成 > iOS key が自動作成される
  • Firebase Android アプリを作成 > Android key が自動作成される

Google Cloud コンソールで、開発やデバッグなどで使用する独自の API キーを作成することもできます。この方法が推奨される事例については、このページの後半で説明します。

API キーを見つける

プロジェクトのすべての API キーは、Google Cloudコンソールの [API とサービス] > [認証情報] パネルで表示、管理できます。

以下の場所で、Firebase アプリに自動的にマッチングされる API キーも確認できます。デフォルトでは、プロジェクト内の同じプラットフォーム(Apple、Android、ウェブ)向けのすべての Firebase アプリは同じ API キーを使用します。

  • Firebase Apple アプリ - Firebase 構成ファイル(GoogleService-Info.plist)の API_KEY フィールドに、自動的にマッチングされた API キーがあります。

  • Firebase Android アプリ - Firebase 構成ファイル(google-services.json)の current_key フィールドに、自動的にマッチングされた API キーがあります。

  • Firebase ウェブアプリ - Firebase 構成オブジェクトの apiKey フィールドに、自動的にマッチングされた API キーがあります。

API キーの使用

API キーは、Firebase や Google サービスとやり取りするときに、Firebase プロジェクトを識別するために使用されます。具体的には、割り当てと課金のために API リクエストをプロジェクトに関連付けるために使用されます。一般公開データへのアクセスにも使用できます。

たとえば、API キーをクエリ パラメータとして REST API 呼び出しに渡すことによって、明示的に API キーを使用できます。次の例は、Dynamic Links link shortener API に対してリクエストを行う方法を示しています。

POST https://firebasedynamiclinks.googleapis.com/v1/shortLinks?key=API_KEY

アプリが、モバイルウェブ クライアントから提供される API キーを必要とする Firebase API を呼び出すと、アプリは Firebase 構成ファイル / オブジェクト内でプロジェクトの API キーを自動的に検索します。ただし、環境変数などの別のメカニズムを使用してアプリの API キーを指定することもできます。

API キーを確認して適切な制限を適用する(推奨)

Firebase サービスの API キーをシークレットとして扱う必要はありませんが、このセクションで説明するように、制限と上限を確認して適用する必要があります。

Firebase API キーの許可リストに自動的に追加される API を確認する

Firebase がプロジェクトに API キーを作成すると、そのキーに「API の制限」が自動的に追加されます。この許可リストに追加される API は、クライアントが呼び出しとともに API キーを提供することが必要な Firebase 関連の API です。Firebase サービスの使用に必要な API のほとんどは、実際には API キーの許可リストに登録する必要はありません。

Firebase は、すべての Firebase のサービスに必要な API を追加するため、API キーの許可リストに、使用していないプロダクトの API が含まれている場合があります。 許可リストから API を削除できますが、Firebase と使用している Firebase サービスに必要な API を削除しないように注意してください(各サービス / プロダクトの許可リストに登録する必要がある Firebase 関連 API のリストをご覧ください)。そうしないと、Firebase サービスへの呼び出し時にエラーが発生します。

パスワード ベースの Authentication を使用する場合の割り当て量の確保

パスワード ベースの Firebase Authentication を使用していて、データが Firebase Security Rules によって保護されている場合、あるユーザーが API キーを保持していたとしても、そのユーザーが Firebase プロジェクトのデータベースまたは Cloud Storage のデータにアクセスできるようにはなりません。ただし、API キーを使用して Firebase の認証エンドポイントにアクセスし、プロジェクトに対する認証リクエストを行うことは可能です。

API キーを不正使用したブルート フォース アタックの可能性を回避するには、アプリの通常のトラフィック量を反映するように identitytoolkit.googleapis.com エンドポイントのデフォルトの割り当てを抑制してください。ただし、割り当てを抑制した状態でアプリのユーザーが突然増えると、割り当てを増やすまでログインエラーが発生する場合があることに注意してください。プロジェクトの API 割り当ては Google Cloud Console で変更できます。

Firebase 以外のサービスには、制限された個別の API キーを使用する

Firebase サービスで使用する API キーは、一般的にはシークレットとして扱う必要はありませんが、他の Google Cloud API で使用する API キーは慎重に扱う必要があります。

Firebase のサービス / プロダクト用以外の Google Cloud API を(いずれかのプラットフォームで)使用している場合は、これらの API で使用するために、制限付きの API キーを個別に作成することを強くおすすめします。これは、API が課金対象の Google Cloud サービス用である場合は特に重要です。

たとえば、iOS で Firebase ML と Cloud Vision API を使用する場合は、Cloud Vision API へのアクセスにのみ使用する API キーを個別に作成する必要があります。

Firebase 以外の API 用に制限された個別の API キーを使用し、必要に応じてキーをローテーションするか、または置き換えることによって、Firebase サービスを中断することなく、API キーに制限を追加できます。

以下の手順では、Super Service API という疑似の API 向けに個別の制限付き API キーを作成する方法を説明します。

ステップ 1: 既存の API キーを構成して、Super Service API へのアクセスを許可しないようにする

  1. Google Cloud コンソールの [認証情報] ページを開きます。画面の指示に沿って、プロジェクトを選択します。

  2. リスト内にある既存の API キーごとに、編集ビューを開きます。

  3. [API の制限] セクションで [キーを制限] を選択し、API キーによるアクセスを許可するすべての API をリストに追加します。その場合は、個別の API キー(この場合は Super Service API)を作成する API を含めないでください。

    API キーの API の制限を構成することで、キーがアクセス権を持つ API を明示的に宣言します。デフォルトでは、[API の制限] セクションで [キーを制限しない] が選択されている場合、API キーを使用してプロジェクトで有効になっているすべての API にアクセスできます。

これで、既存の API キーは Super Service API へのアクセスを許可しなくなりますが、各キーは、API の制限リストに追加したすべての API で引き続き機能します。

ステップ 2: Super Service API にアクセスするための新しい API キーを作成して使用する

  1. [認証情報] ページに戻ります。Firebase プロジェクトが選択されていることを確認してください。

  2. [認証情報を作成] > [API キー] の順にクリックします。新しい API キーをメモし、[キーを制限] をクリックします。

  3. [API の制限] セクションで [キーを制限] を選択し、Super Service API のみをリストに追加します。

    この新しい API キーは、Super Service API へのアクセスのみを許可します。

  4. 新しい API キーを使用するようにアプリとサービスを構成します。

環境固有の API キーを使用する(推奨)

ステージング環境用と本番環境用など、環境ごとに異なる Firebase プロジェクトを設定する場合は、各アプリ インスタンスと、それに対応する Firebase プロジェクトがやり取りすることが重要です。たとえば、ステージング環境のアプリ インスタンスは本番環境の Firebase プロジェクトと通信しないようにします。したがって、ステージング環境のアプリはステージング環境用の Firebase プロジェクトに関連付けられている API キーを使用する必要があります。

コードの変更を開発環境からステージング環境、本番環境へと適用していく際に生じる問題を軽減するには、コード自体に API キーを含めるのではなく、API キーを環境変数として設定するか、構成ファイルに追加します。

開発において Firebase ML とともに Firebase Local Emulator Suite を使用する場合は、デバッグ専用の API キーを作成して使用する必要があります。そのようなキーの作成手順については、Firebase ML のドキュメントをご覧ください。

よくある質問とトラブルシューティング

よくある質問

はい。デフォルトでは、Firebase 関連の API で使用するために Firebase によって自動的にプロビジョニングされるすべての API キーに、「API の制限」が自動的に適用されます。この許可リストに登録されている Firebase 関連 API のリストをご覧ください。

この許可リストに追加される API は、Firebase サービスがクライアント コードから呼び出す API で、Firebase プロジェクトまたはアプリの識別に API キーを必要とする API です。Firebase サービスの使用に必要な API のほとんどは、実際には API キーの許可リストに登録する必要はありません。

Firebase は、すべての Firebase のサービスに必要な API を追加するため、API キーの許可リストに、使用していないプロダクトの API が含まれている場合があります。許可リストから API を削除できますが、Firebase と使用している Firebase サービスに必要な API を削除しないように注意してください(各サービス / プロダクトの許可リストに登録する必要がある Firebase 関連 API のリストをご覧ください)。そうしないと、Firebase サービスへの呼び出し時にエラーが発生します。

すべての API キーとその「API の制限」は、Google Cloud コンソールの [API とサービス] > [認証情報] パネルで確認できます。

Firebase がこれらの「API の制限」を適用する方法について、次の点に注意してください。

  • 2024 年 5 月より、Firebase によって自動プロビジョニングされるすべての新しい API キーは、Firebase 関連 API のリストに自動的に制限されます。

  • 2024 年 5 月、Firebase が以前に自動プロビジョニングした既存および制限なしの API キーはすべて、Firebase 関連 API のリストおよび、プロジェクトで現在有効になっている API に制限されます。

  • Firebase が以前に自動プロビジョニングした既存の API キーで、すでに制限されているものは変更されませんでした。

  • Firebase によって自動プロビジョニングされなかった既存の API キーは変更されませんでした。

次のいずれかのオプションを使用して、Firebase アプリに関連付けられている API キーを確認できます。

  1. [プロジェクト設定] に移動し、[アプリ] カードまで下にスクロールします。

  2. 目的のアプリを選択します。

  3. 目的のアプリの Firebase 構成ファイル / オブジェクトを取得し、その API キーを見つけます。

    • Apple: GoogleService-Info.plist をダウンロードして、API_KEY フィールドを見つけます。

    • Android: google-services.json をダウンロードし、目的のアプリの構成を検索(パッケージ名で検索)して、current_key フィールドを見つけます。

    • ウェブ: [構成] オプションをクリックして、apiKey フィールドを見つけます。

  1. 次のコマンドを実行して、目的のアプリの Firebase 構成ファイル / オブジェクトを取得します。

    firebase apps:sdkconfig PLATFORM FIREBASE_APP_ID
    • PLATFORM(次のいずれか 1 つ): IOS | ANDROID | WEB
    • FIREBASE_APP_ID: Firebase アプリに割り当てられている Firebase の一意の識別子(アプリ ID の確認
  2. 出力されたアプリの Firebase 構成で、API キーを探します。

    • Apple: API_KEY フィールドを見つけます。

    • Android: 目的のアプリの構成を検索(パッケージ名で検索)して、current_key フィールドを見つけます。

    • ウェブ: apiKey フィールドを見つけます。

  1. API キーの apiKeyId(UID)を取得するには、目的のアプリに該当するエンドポイントを呼び出し、次のステップに apiKeyId 値を渡します。

  2. projects.locations.keys.getKeyString を呼び出して、API キーの文字列を取得します。

    この keyString は、アプリの構成アーティファクト(Apple | Android | ウェブ)で見つかる値と同じです。

  • Firebase Apple アプリ - アプリごとに独自の構成ファイルがあり、リストに含めることのできる API キーは 1 つのみです。

  • Firebase Android アプリ - 1 つの Firebase プロジェクト内のすべての Android アプリは同じ構成ファイル内に含まれ、個々のアプリに含めることのできる API キーは 1 つのみです。ただし、この構成ファイルの個々のアプリには異なるキーを含めることができます。

  • Firebase ウェブアプリ - 各アプリに独自の構成オブジェクトがあり、含めることのできる API キーは 1 つのみです。

ただし、1 つのアプリで複数の API キーを使用することは可能です。他の API キーにアプリがアクセスできるメカニズム(環境変数など)を提供する必要があります。他の API キーにアクセスするためのメカニズムが、Firebase 構成ファイル / オブジェクト内にリストされている API キーに依存しないようにします。

最初にアプリの Firebase 構成ファイル / オブジェクトを取得するとき、Firebase は、対象のアプリと一致する「アプリケーションの制限」が適用されている既存の API キーがプロジェクト内に含まれているかどうかをチェックします(たとえば Apple アプリのバンドル ID でマッチングします)。

この条件に合致する制限付きキーが見つからない場合、Firebase は構成ファイル / オブジェクト内の iOS key(Apple アプリ)、Android key(Android アプリ)、Browser key(ウェブアプリ)のリストを取得します(これらのキーが存在し、対象のアプリとのマッチングを制限する「アプリケーションの制限」がないと仮定)。

はい。構成ファイル / オブジェクトから API キーを手動で削除できます。ただし、API キーにアクセスするための別のメカニズムをアプリに提供する必要があります(環境変数を使用するなど)。そうしないと、Firebase サービスへの呼び出しは失敗します。

はい。構成ファイル / オブジェクトを手動で編集して、別の API キーをアプリに関連付けることができます。

なお、コンソールからアプリの構成ファイル / オブジェクトを再取得すると、Firebase が自動的にそのアプリにマッチングする API キーのリストが必ず含まれます。そのため、必要に応じて手動編集を繰り返さなければならないことに注意してください。

いいえ。API キーは特定のプロジェクトのみを識別するため、他のプロジェクトに移動することはできません。

アプリで使用されている API キーを削除すると、そのアプリからの API 呼び出しは失敗します。その場合、無効な API キーの使用を試みていることを通知するレポート、メール、エラーを受け取ることがあります。

API キーを削除すると、元に戻すことはできません。

Firebase API キーの場合、キーの「API の制限」許可リストに登録する必要がある API は、クライアントが呼び出しとともに API キーを提供することが必要な API のみです。Firebase 関連の API でこの要件が適用されるのはごく一部です。プロジェクトで有効にしている Firebase 関連の API のほとんどは、キーの「API の制限」許可リストに登録する必要はありません。

次の表を使用して、Firebase API キーの「API の制限」許可リストに含める必要がある Firebase 関連の API を確認します。Firebase API キーは Firebase サービスにのみ使用してください。詳しくは、特定のタイプの API には、制限された個別の API キーを作成するをご覧ください。

プロジェクトのすべての API キーは、Google Cloud Console の [API とサービス] > [認証情報] パネルで表示、管理できます。

API 名(サービス名) API の表示名 関連する Firebase
サービス / プロダクト
firebase.googleapis.com Firebase Management API すべてのプロダクト
logging.googleapis.com Cloud Logging API すべてのプロダクト
firebaseinstallations.googleapis.com Firebase Installations API Cloud MessagingCrashlyticsIn-App MessagingPerformance MonitoringRemote ConfigFirebase ML
firebaseappcheck.googleapis.com Firebase App Check API App Check
firebaseappdistribution.googleapis.com Firebase App Distribution API App Distribution
firebaseapptesters.googleapis.com Firebase App Testers API App Distribution
identitytoolkit.googleapis.com Identity Toolkit API Authentication
securetoken.googleapis.com Token Service API Authentication
firebaserules.googleapis.com * Firebase Rules API Cloud FirestoreCloud StorageRealtime Database
datastore.googleapis.com Cloud Datastore API Cloud Firestore
firestore.googleapis.com Google Cloud Firestore API Cloud Firestore
fcmregistrations.googleapis.com FCM Registration API Cloud Messaging
firebasestorage.googleapis.com Cloud Storage for Firebase API Cloud Storage
firebasedynamiclinks.googleapis.com Firebase Dynamic Links API Dynamic Links
firebasehosting.googleapis.com * Firebase Hosting API Hosting
firebaseinappmessaging.googleapis.com Firebase In-App Messaging API In-App Messaging
firebaseml.googleapis.com Firebase ML API Firebase ML
mlkit.googleapis.com ** ML Kit API Firebase ML
mobilecrashreporting.googleapis.com Mobile Crash Reporting API Performance Monitoring
play.googleapis.com Google Play Android Developer API Performance Monitoring
firebaseremoteconfig.googleapis.com Firebase Remote Config API Performance MonitoringRemote Config
firebaseremoteconfigrealtime.googleapis.com Firebase Remote Config Realtime API Performance MonitoringRemote Config
cloudconfig.googleapis.com ** なし Remote Config
firebasedatabase.googleapis.com * Firebase Realtime Database API Realtime Database
firebasevertexai.googleapis.com Vertex AI in Firebase API Vertex AI in Firebase

* サードパーティ製ツールで Firebase API キーを使用している場合、または Firebase サービス / プロダクトへの直接 REST アクセスを使用している場合にのみ必要です。

** プロダクトの以前のバージョンの SDK では必須です。最新バージョンの SDK を使用している場合、API をキーの許可リストに登録する必要はありません。

トラブルシューティング

API_KEY_SERVICE_BLOCKED エラーまたは次のようなエラーが表示された場合は、このよくある質問のガイダンスに沿って対応してください。

Forbidden: 403 POST https://example-service.googleapis.com/method: Requests to this API example-service.googleapis.com method google.example-service.rest.method are blocked.

アプリが API の呼び出しに使用している API キーに「API の制限」が適用されていて、その API がキーの許可リストに含まれていない可能性があります。

ウェブアプリで使用されている API キーに「API の制限」が適用されている可能性があります。その場合は、許可される API のリストに Firebase Management API が含まれていることを確認してください。

無効な API キーの一般的な原因のいくつかを以下に示します。

  • API キーに「API キーの制限」が適用されていて、キーの使用を試みているアプリとマッチングされない(「アプリケーションの制限」)、または呼び出そうとしている API を使用できない(「API の制限」)ようになっています。

  • Google CloudConsole で API キーがプロジェクトから削除されました。

  • アプリの Firebase 構成ファイル / オブジェクトにリストされているプロジェクト ID の API キーが作成されていません。

この問題の解決策の一つとして、アプリの Firebase 構成ファイル / オブジェクトの更新されたバージョンを取得し、古い構成ファイル / オブジェクトと置き換えるという方法があります。構成ファイルをダウンロード用に送信したり、コンソールで構成オブジェクトを表示したりする前に、Firebase は、リスト内にある API キーがアプリにマッチングしていることを確認します。