APIキーとは何か
APIキーは、APIを呼び出しているアプリやプロジェクトを識別し、利用可否、使用量、料金などを結び付けるために発行される文字列です。提供する権限によっては、漏えいすると第三者に機能や料金枠を使われます。
すべてのAPIキーが同じ強さの秘密情報ではありません。ブラウザやモバイルアプリへ載せる前提のキーもあるため、提供元が定める用途と制限を確認します。
一文でいうと
APIキーとは、APIの利用元を識別し、許可や使用量を管理するためにAPI提供者が発行する認証情報です。
キーを送る場所、与えられる権限、利用できるAPI、有効期限、制限方法はサービスごとに異なります。「キー」という名前だけから公開可否を判断できません。
個人開発のどこで登場するか
AI、地図、メール、決済、画像処理など、外部のAPIとは何かを利用するときに登場します。API提供者はキーを基に、呼び出し元のプロジェクト、割当量、請求対象を判断できます。
一つのキーを開発用と本番用、複数アプリ、複数人で共有すると、漏えい元を特定しにくくなります。可能なら用途ごとに分け、不要なキーを残しません。
サーバーからAPIを呼ぶ例
読書記録アプリが外部APIから本の情報を取得する場合を考えます。
ブラウザが自分のサーバーへ本の番号を送る
サーバーが入力を検証する
サーバーが保管しているAPIキーを添えて外部APIを呼ぶ
必要な結果だけをブラウザへ返す
サーバー用の秘密キーをHTMLやJavaScriptへ埋め込むと、利用者のブラウザから読めます。一方、提供元がブラウザ用キーを用意している場合は、許可するドメインやAPIを制限するなど、その製品の手順に従います。
アクセストークンや環境変数と区別する
APIキー:API利用元のアプリやプロジェクトを識別するための認証情報
アクセストークン:特定の主体と許可範囲、期限などを表すことが多い認証情報
シークレット:漏えいから守るべき値の総称
APIキーを環境変数とは何かで渡すことはできますが、保存先や配信先が安全になるとは限りません。APIキーが利用者本人の細かな権限確認を代替できるとも限りません。
発行した後に制限と失効を準備する
Google Cloudの公式資料では、キーの公開により予期しない課金や不正アクセスが起こり得るため、用途の制限、不要なキーの削除、監視、分離、ローテーションなどを推奨しています。
発行時に次を記録します。
何のアプリと環境で使うか
利用できるAPI、接続元、割当量をどう制限するか
誰が値を閲覧できるか
使用量と異常をどこで確認するか
漏えい時にどこで無効化するか
新旧キーを安全に切り替える手順
URLのクエリへキーを入れるとログなどに残る場合があります。提供元がヘッダーや公式SDKを指定しているなら、その方法を使います。漏えいが疑われたら、ファイルから消すだけでなくキーを失効します。
次に読む記事
守るべき値全体の考え方はシークレットとは何かへ、保管・ローテーション・事故対応は個人開発の秘密情報を安全に管理するへ進みます。