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

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

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

FirebaseのAPIキーは、通常のAPIキーとは異なります

APIキーが通常使用される方法とは異なり、FirebaseサービスのAPIキーは、バックエンドリソースへのアクセスを制御するために使用されません。これは、Firebaseセキュリティルール(リソースにアクセスできるユーザーを制御するため)とアプリチェック(リソースにアクセスできるアプリを制御するため)でのみ実行できます。

通常、APIキーをしっかりと保護する必要があります(たとえば、ボールトサービスを使用したり、キーを環境変数として設定したりします)。ただし、FirebaseサービスのAPIキーは、コードまたはチェックインされた設定ファイルに含めることができます。

FirebaseサービスのAPIキーはコードに安全に含めることができますが、APIキーに制限を適用する必要がある特定のケースがいくつかあります。たとえば、Firebase ML、メール/パスワードのログイン方法を使用したFirebase認証、または請求可能なGoogleCloudAPIを使用している場合です。これらのケースの詳細については、このページの後半でご覧ください。

APIキーの作成

Firebaseプロジェクトには多くのAPIキーを含めることができますが、各APIキーは単一のFirebaseプロジェクトにのみ関連付けることができます。

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

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

  • Firebaseプロジェクトを作成する>自動作成されたBrowser key
  • FirebaseAppleアプリを作成>自動作成されたiOS key
  • FirebaseAndroidアプリを作成>自動作成されたAndroid key

開発やデバッグなどのために、 GoogleCloudConsoleで独自のAPIキーを作成することもできます。これがいつ推奨されるかについては、このページの後半で詳しく説明します。

APIキーを見つける

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

また、次の場所で、どのAPIキーがFirebaseアプリに自動的に一致するかを確認できます。デフォルトでは、同じプラットフォーム(Apple対Android対Web)用のプロジェクトのすべてのFirebaseアプリが同じAPIキーを使用します。

  • Firebase Apple Apps API_KEYフィールドのFirebase構成ファイルGoogleService-Info.plistでアプリの自動一致APIキーを検索します。

  • Firebase Androidアプリ—Firebase構成ファイルgoogle-services.jsoncurrent_keyフィールドでアプリの自動一致APIキーを検索します。

  • Firebase Web Apps —Firebase構成オブジェクトのapiKeyフィールドでアプリの自動一致APIキーを検索します。

APIキーの使用

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

たとえば、APIキーの値をクエリパラメータとしてREST API呼び出しに渡すことにより、APIキーを明示的に使用できます。この例は、ダイナミックリンクリンク短縮APIにリクエストを送信する方法を示しています。

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

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

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

FirebaseサービスのAPIキーをシークレットとして扱う必要はありませんが、APIキーの誤用からプロジェクトを保護するために、追加の対策を講じる必要がある特定のケースがいくつかあります(以下を参照)。

パスワードベースの認証を使用する場合は、クォータを厳しくします

パスワードベースのFirebase認証を使用していて、誰かがAPIキーを入手した場合Firebaseセキュリティルールで保護されている限り、FirebaseプロジェクトのデータベースやCloudStorageデータにアクセスすることはできません。ただし、APIキーを使用して、Firebaseの認証エンドポイントにアクセスし、プロジェクトに対して認証リクエストを行うことができます。

誰かがAPIキーを悪用してブルートフォース攻撃を試みる可能性を軽減するために、アプリの通常のトラフィックの期待を反映するように、 identitytoolkit.googleapis.comエンドポイントのデフォルトの割り当てを厳しくすることができます。この割り当てを厳しくし、アプリが突然ユーザーを獲得した場合、割り当てを増やすまでサインインエラーが発生する可能性があることに注意してください。 GoogleCloudConsoleでプロジェクトのAPI割り当てを変更できます。

特定のタイプのAPIには、個別の制限付きAPIキーを使用します

Firebaseサービスに使用されるAPIキーは通常、シークレットとして扱う必要はありませんが、手動で有効にしたGoogleCloudAPIへのアクセスを許可するために使用されるAPIキーには特別な注意を払う必要があります。

Firebaseによって自動的に有効にされない(つまり、自分で有効にした)Google Cloud APIを(任意のプラットフォームで)使用する場合は、それらのAPIで使用するための個別の制限付きAPIキーを作成することを検討する必要があります。 APIが請求可能なGoogleCloudサービス用である場合、これは特に重要です。

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

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

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

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

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

FirebaseMLと一緒にFirebaseLocalEmulator Suiteを開発に使用している場合は、デバッグ専用のAPIキーを作成して使用する必要があることに注意してください。この種のキーを作成する手順は、 FirebaseMLのドキュメントに記載されています。

よくある質問