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

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

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

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

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

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

Firebase サービスの API キーをコードに含めることは安全ですが、API キーに関して制限を適用しなければならない特定のケースもあります。たとえば、Firebase ML を使用している場合や、メールアドレスとパスワードによるログイン手法で Firebase Authentication を使用している場合、または課金対象の Google Cloud APIs を使用している場合などがこれに該当します。詳細については、このページの後の部分をご覧ください。

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

アプリが Firebase API を呼び出すと、Firebase 構成ファイル / オブジェクト内でプロジェクトの API キーが自動的に検索されます。環境変数などの別のメカニズムを使用して API キーを設定することもできます。

API キーに制限を適用する(推奨)

Firebase サービスの API キーをシークレットとして扱う必要はありませんが、特定の状況(以下を参照)では、API キーの不正使用からプロジェクトを保護するための追加の手段が必要になる場合があります。

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

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

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

特定のタイプの API には、制限された個別の API キーを使用する

Firebase サービスで使用する API キーは、一般的にはシークレットとして扱う必要はありませんが、手動で有効にした Google Cloud APIs へのアクセスの許可に使用する 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 ドキュメントをご覧ください。

よくある質問