APIキーとは何か

APIキーは、APIを呼び出しているアプリやプロジェクトを識別し、利用可否、使用量、料金などを結び付けるために発行される文字列です。提供する権限によっては、漏えいすると第三者に機能や料金枠を使われます。

すべてのAPIキーが同じ強さの秘密情報ではありません。ブラウザやモバイルアプリへ載せる前提のキーもあるため、提供元が定める用途と制限を確認します。

一文でいうと

APIキーとは、APIの利用元を識別し、許可や使用量を管理するためにAPI提供者が発行する認証情報です。

キーを送る場所、与えられる権限、利用できるAPI、有効期限、制限方法はサービスごとに異なります。「キー」という名前だけから公開可否を判断できません。

個人開発のどこで登場するか

AI、地図、メール、決済、画像処理など、外部のAPIとは何かを利用するときに登場します。API提供者はキーを基に、呼び出し元のプロジェクト、割当量、請求対象を判断できます。

一つのキーを開発用と本番用、複数アプリ、複数人で共有すると、漏えい元を特定しにくくなります。可能なら用途ごとに分け、不要なキーを残しません。

サーバーからAPIを呼ぶ例

読書記録アプリが外部APIから本の情報を取得する場合を考えます。

  1. ブラウザが自分のサーバーへ本の番号を送る

  2. サーバーが入力を検証する

  3. サーバーが保管しているAPIキーを添えて外部APIを呼ぶ

  4. 必要な結果だけをブラウザへ返す

サーバー用の秘密キーをHTMLやJavaScriptへ埋め込むと、利用者のブラウザから読めます。一方、提供元がブラウザ用キーを用意している場合は、許可するドメインやAPIを制限するなど、その製品の手順に従います。

アクセストークンや環境変数と区別する

  • APIキー:API利用元のアプリやプロジェクトを識別するための認証情報

  • アクセストークン:特定の主体と許可範囲、期限などを表すことが多い認証情報

  • 環境変数:キーなどの値を実行環境からプログラムへ渡す手段

  • シークレット:漏えいから守るべき値の総称

APIキーを環境変数とは何かで渡すことはできますが、保存先や配信先が安全になるとは限りません。APIキーが利用者本人の細かな権限確認を代替できるとも限りません。

発行した後に制限と失効を準備する

Google Cloudの公式資料では、キーの公開により予期しない課金や不正アクセスが起こり得るため、用途の制限、不要なキーの削除、監視、分離、ローテーションなどを推奨しています。

発行時に次を記録します。

  • 何のアプリと環境で使うか

  • 利用できるAPI、接続元、割当量をどう制限するか

  • 誰が値を閲覧できるか

  • 使用量と異常をどこで確認するか

  • 漏えい時にどこで無効化するか

  • 新旧キーを安全に切り替える手順

URLのクエリへキーを入れるとログなどに残る場合があります。提供元がヘッダーや公式SDKを指定しているなら、その方法を使います。漏えいが疑われたら、ファイルから消すだけでなくキーを失効します。

次に読む記事

守るべき値全体の考え方はシークレットとは何かへ、保管・ローテーション・事故対応は個人開発の秘密情報を安全に管理するへ進みます。

参考資料