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 はプロジェクト用の 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 サービスへの呼び出し時にエラーが発生します。
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 キーに制限を追加できます。
API 固有のキーを作成する手順を確認する
以下の手順では、Super Service API という疑似の API 向けに個別の制限付き API キーを作成する方法を説明します。
ステップ 1: 既存の API キーを構成して、Super Service API へのアクセスを許可しないようにする
Google Cloud コンソールの [認証情報] ページを開きます。画面の指示に沿って、プロジェクトを選択します。
リスト内にある既存の API キーごとに、編集ビューを開きます。
[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 キーを作成して使用する
コードの変更を開発環境からステージング環境、本番環境へと適用していく際に生じる問題を軽減するには、コード自体に API キーを含めるのではなく、API キーを環境変数として設定するか、構成ファイルに追加します。
開発において Firebase ML とともに Firebase Local Emulator Suite を使用する場合は、デバッグ専用の API キーを作成して使用する必要があります。そのようなキーの作成手順については、Firebase ML のドキュメントをご覧ください。
よくある質問とトラブルシューティング
よくある質問
Firebase サービスの API キーはデフォルトで制限されていますか?
はい。デフォルトでは、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 サービスへの呼び出し時にエラーが発生します。
Firebase ウェブアプリ - 各アプリに独自の構成オブジェクトがあり、含めることのできる API キーは 1 つのみです。
ただし、1 つのアプリで複数の API キーを使用することは可能です。他の API キーにアプリがアクセスできるメカニズム(環境変数など)を提供する必要があります。他の API キーにアクセスするためのメカニズムが、Firebase 構成ファイル / オブジェクト内にリストされている API キーに依存しないようにします。
Firebase では、どの API キーがアプリにマッチングしているかをどうやって認識しますか(Firebase 構成ファイル / オブジェクトなど)?
アプリで使用されている API キーを削除すると、そのアプリからの API 呼び出しは失敗します。その場合、無効な API キーの使用を試みていることを通知するレポート、メール、エラーを受け取ることがあります。
API キーを削除すると、元に戻すことはできません。
Firebase API キーの「API の制限」許可リストに必要な API は何ですか?
Firebase API キーの場合、キーの「API の制限」許可リストに登録する必要がある API は、クライアントが呼び出しとともに API キーを提供することが必要な API のみです。Firebase 関連の API でこの要件が適用されるのはごく一部です。プロジェクトで有効にしている Firebase 関連の API のほとんどは、キーの「API の制限」許可リストに登録する必要はありません。
次の表を使用して、Firebase API キーの「API の制限」許可リストに含める必要がある Firebase 関連の API を確認します。Firebase API キーは Firebase サービスにのみ使用してください。詳しくは、特定のタイプの API には、制限された個別の API キーを作成するをご覧ください。
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 がキーの許可リストに含まれていない可能性があります。
Firebase 以外のサービスの使用時にこのエラーが発生する場合は、そのサービスと API 専用の新しい API キーを作成することを強くおすすめします。Firebase API キーは、Firebase のサービス / プロダクトにのみ使用してください。
詳しくは、特定のタイプの API には、制限付きの個別の API キーを作成するをご覧ください。
このエラーを修正するにはどうすればよいですか?「サーバーからこの Firebase アプリの測定 ID を取得できませんでした」
ウェブアプリで使用されている API キーに「API の制限」が適用されている可能性があります。その場合は、許可される API のリストに Firebase Management API が含まれていることを確認してください。
API キーが無効であることを知らせるメールが届いたか、またはエラーが表示されました。何が起こったのでしょうか。どうすればよいですか?
無効な API キーの一般的な原因のいくつかを以下に示します。
API キーに「API キーの制限」が適用されていて、キーの使用を試みているアプリとマッチングされない(「アプリケーションの制限」)、または呼び出そうとしている API を使用できない(「API の制限」)ようになっています。
Google CloudConsole で API キーがプロジェクトから削除されました。
アプリの Firebase 構成ファイル / オブジェクトにリストされているプロジェクト ID の API キーが作成されていません。