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 API を使用している場合などです。これらのケースについては、このページで後述します。
API キーの作成
Firebase プロジェクトは多数の API キーを持つことができますが、各 API キーは 1 つの Firebase プロジェクトにのみ関連付けることができます。
次のいずれかを行うと、Firebase はプロジェクトの API キーを自動的に作成します。
- Firebase プロジェクトを作成する > 自動作成された
Browser key
- Firebase Apple アプリを作成する > 自動作成された
iOS key
- Firebase Android アプリを作成する > 自動作成された
Android key
開発やデバッグなどのために、 Google Cloud Consoleで独自の API キーを作成することもできます。これがいつ推奨されるかについては、このページで後述します。
API キーの検索
プロジェクトのすべての API キーは、Google Cloud Console の[APIs & Services] > [Credentials ] パネルで表示および管理できます。
次の場所で、どのAPI キーが Firebase アプリに自動的に一致するかを確認することもできます。デフォルトでは、同じプラットフォーム (Apple、Android、Web) 用のプロジェクトの Firebase アプリはすべて同じ API キーを使用します。
Firebase Apple Apps — Firebase 構成ファイル
のGoogleService-Info.plist API_KEY
フィールドで、アプリの自動一致 API キーを見つけます。Firebase Android アプリ— Firebase 構成ファイル
のgoogle-services.json current_key
フィールドで、アプリの自動照合 API キーを見つけます。Firebase Web Apps — Firebase 構成オブジェクトの
apiKey
フィールドで、アプリの自動一致 API キーを見つけます。
API キーの使用
API キーは、Firebase/Google サービスとやり取りするときに Firebase プロジェクトを識別するために使用されます。具体的には、割り当てと課金のために API リクエストをプロジェクトに関連付けるために使用されます。また、公開データへのアクセスにも役立ちます。
たとえば、API キーの値をクエリ パラメータとして REST API 呼び出しに渡すことで、API キーを明示的に使用できます。次の例は、 Dynamic Links リンク短縮 APIにリクエストを送信する方法を示しています。
POST https://firebasedynamiclinks.googleapis.com/v1/shortLinks?key=API_KEY
アプリが Firebase API を呼び出すと、アプリは Firebase 構成ファイル/オブジェクトでプロジェクトの API キーを自動的に検索します。ただし、環境変数を含む別のメカニズムを使用して API キーを設定することはできます。
API キーに制限を適用する(推奨)
Firebase サービスの API キーをシークレットとして扱う必要はありませんが、API キーの悪用からプロジェクトを保護するために追加の対策を講じる必要がある特定のケース (以下を参照) があります。
パスワードベースの認証を使用する場合はクォータを締めます
パスワードベースの Firebase Authentication を使用していて、誰かが API キーを入手した場合、 Firebase セキュリティ ルールによってデータが保護されている限り、Firebase プロジェクトのデータベースや Cloud Storage データにアクセスすることはできません。ただし、API キーを使用して Firebase の認証エンドポイントにアクセスし、プロジェクトに対して認証リクエストを行う可能性があります。
誰かが API キーを悪用してブルート フォース攻撃を試みる可能性を軽減するために、 identitytoolkit.googleapis.com
エンドポイントのデフォルト クォータを引き締めて、アプリの通常のトラフィック予測を反映させることができます。このクォータを厳しくすると、アプリが突然ユーザーを獲得した場合、クォータを増やすまでサインイン エラーが発生する可能性があることに注意してください。プロジェクトの API 割り当てはGoogle Cloud Consoleで変更できます。
特定の種類の API には、個別の制限付き 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: Super Service API
へのアクセスを禁止するように既存の API キーを構成する
Google Cloud Console の認証情報ページを開きます。プロンプトが表示されたら、プロジェクトを選択します。
リスト内の既存の API キーごとに、編集ビューを開きます。
[ API 制限]セクションで [キーを制限する] を選択し、API キーでアクセスできるようにするすべての API をリストに追加します。別の API キーを作成する API (この例では
Super Service API
) を含めないようにしてください。API キーのAPI 制限を設定すると、キーがアクセスできる API が明示的に宣言されます。デフォルトでは、 API 制限セクションで [キーを制限しない] が選択されている場合、API キーを使用して、プロジェクトで有効になっている任意の API にアクセスできます。
現在、既存の API キーはSuper Service API
へのアクセスを許可しませんが、各キーは、 API 制限リストに追加した API に対して引き続き機能します。
ステップ 2: Super Service API
にアクセスするための新しい API キーを作成して使用する
資格情報ページに戻ります。 Firebase プロジェクトがまだ選択されていることを確認してください。
[資格情報の作成] > [API キー] をクリックします。新しい API キーを書き留めてから、[ Restrict key ] をクリックします。
[ API 制限]セクションで [キーの制限]を選択し、
Super Service API
のみをリストに追加します。この新しい API キーは、
Super Service API
へのアクセスのみを許可します。新しい API キーを使用するようにアプリとサービスを構成します。
環境固有の API キーを使用する(推奨)
ステージングや本番環境など、環境ごとに異なる Firebase プロジェクトを設定する場合、各アプリ インスタンスが対応する Firebase プロジェクトと対話することが重要です。たとえば、ステージング アプリのインスタンスが本番環境の Firebase プロジェクトと通信することはありません。これは、ステージング アプリが、ステージング Firebase プロジェクトに関連付けられた API キーを使用する必要があることも意味します。
コード自体に API キーを含めるのではなく、開発からステージング、本番にコードの変更を促進する問題を減らすには、それらを環境変数として設定するか、構成ファイルに含めます。
Firebase Local Emulator Suite を Firebase ML と共に開発に使用している場合は、デバッグ専用 API キーを作成して使用する必要があることに注意してください。この種のキーを作成する手順については、 Firebase ML ドキュメントを参照してください。
よくある質問
次のオプションのいずれかを使用して、どの API キーが Firebase アプリに関連付けられているかを判断できます。
Firebase コンソール
[ プロジェクト設定]に移動し、[アプリ]カードまで下にスクロールします。
[興味のあるアプリを選択します。
対象のアプリの Firebase 構成ファイル/オブジェクトを取得し、その API キーを見つけます。
Apple :
GoogleService-Info.plist
をダウンロードし、API_KEY
フィールドを見つけます。Android :
google-services.json
をダウンロードし、目的のアプリの構成を見つけて (そのパッケージ名を探します)、current_key
フィールドを見つけます。Web : Configオプションを選択し、
apiKey
フィールドを見つけます。
Firebase CLI
次のコマンドを実行して、目的のアプリの Firebase 構成ファイル/オブジェクトを取得します。
firebase apps:sdkconfig PLATFORM FIREBASE_APP_ID
- PLATFORM (いずれか):
IOS
|ANDROID
|WEB
- FIREBASE_APP_ID : Firebase アプリに割り当てられた Firebase 固有の識別子 (アプリ ID を見つけます)
- PLATFORM (いずれか):
アプリの印刷された Firebase 構成で、その API キーを見つけます。
Apple :
API_KEY
フィールドを見つけますAndroid : 対象のアプリの構成を見つけ (そのパッケージ名を探します)、次に
current_key
フィールドを見つけますWeb :
apiKey
フィールドを見つける
残りの API
対象のアプリの適切なエンドポイントを呼び出して API キーの
apiKeyId
(UID) を取得し、apiKeyId
値を次のステップに渡します。- Apple :
projects.iosApps.get
呼び出します - Android :
projects.androidApps.get
呼び出します - Web :
projects.webApps.get
呼び出します
- Apple :
projects.locations.keys.getKeyString
を呼び出して、API キー文字列を取得します。この
keyString
は、アプリの構成アーティファクト ( Apple | Android | Web ) にある値と同じです。
Firebase Apple Apps — 各アプリには独自の構成ファイルがあり、リストされている API キーは 1 つだけです。
Firebase Android アプリ— Firebase プロジェクト内のすべての Android アプリが同じ構成ファイルにリストされ、各アプリにリストされる API キーは 1 つだけです。ただし、この構成ファイル内の各アプリには、異なるキーがリストされている可能性があります。
Firebase Web Apps — 各アプリには独自の構成オブジェクトがあり、リストされている API キーは 1 つだけです。
ただし、1 つのアプリで複数の API キーを使用できます。環境変数などを介して、アプリがこれらの他の API キーにアクセスするためのメカニズムを提供する必要があります。他の API キーにアクセスするメカニズムは、Firebase 構成ファイル/オブジェクトにリストされている API キーに依存することはできません。
アプリの Firebase 構成ファイル/オブジェクトを初めて取得すると、Firebase は、アプリに一致する「アプリケーション制限」を持つ既存の API キーがプロジェクトにあるかどうかを確認します (たとえば、Apple アプリの一致するバンドル ID)。
一致する制限付きキーが見つからない場合、Firebase は構成ファイル/オブジェクトに、Apple アプリのiOS key
、Android アプリのAndroid key
、Web アプリのBrowser key
をリストします (これらのキーが存在し、それらをそのアプリに一致させないようにする「アプリケーション制限」はありません)。
はい、構成ファイル/オブジェクトから API キーを手動で削除できます。ただし、アプリが API キーにアクセスするための他のメカニズムを提供する必要があります(環境変数を介するなど)。そうしないと、Firebase サービスへの呼び出しが失敗します。
はい、構成ファイル/オブジェクトを手動で編集して、別の API キーをアプリに関連付けることができます。
コンソールからアプリの構成ファイル/オブジェクトを再取得すると、 Firebase が自動的にそのアプリに一致するAPI キーが常に一覧表示されることに注意してください。そのため、必要に応じて手動で編集を繰り返す必要があります。
いいえ、API キーは特定のプロジェクトのみを識別し、別のプロジェクトに移動することはできません。
無効な API キーの最も一般的な原因のいくつかを次に示します。
API キーには「API キーの制限」が適用されており、キーを使用しようとしているアプリと照合できなくなったり (「アプリケーションの制限」)、呼び出されている API で使用できなくなったりします (「API の制限」)。
API キーが Google Cloud Console のプロジェクトから削除されました。
アプリの Firebase 構成ファイル/オブジェクトにリストされているプロジェクト ID の API キーが作成されていません。
この問題を修正する 1 つの方法は、アプリの Firebase 構成ファイル/オブジェクトの更新版を入手し、古い構成ファイル/オブジェクトを新しい更新されたファイル/オブジェクトに置き換えることです。ダウンロード用の構成ファイルを送信する前、またはコンソールに構成オブジェクトを表示する前に、Firebase はリストされている API キーがアプリと一致することを確認します。
Web アプリで使用される API キーには、おそらく「API 制限」が適用されています。この場合は、Firebase Management API が許可された API のリストに含まれていることを確認してください。
アプリで使用されている API キーを削除すると、そのアプリからの API 呼び出しは失敗します。無効な API キーを使用しようとしているというレポート、電子メール、またはエラーを受け取る場合があります。
API キーの削除は永続的であり、元に戻すことはできません。