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 キーに制限を追加できます。

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

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

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

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

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

よくある質問

トラブルシューティング