採用に向く条件
選ぶ理由
- とにかく単純で導入が速い
- サービス間・CI/スクリプト向け
- 実装の負担が小さい
製品プロフィール
共有シークレット
1 つの秘密の文字列で呼び出し元を識別する最も単純な方式。サービス間連携やスクリプトで手軽に使える。
基本情報
選定ガイド
採用する理由と、事前に受け入れるべきトレードオフを分けて確認します。
採用に向く条件
事前に確認する条件
詳しい解説
API キーは、API へのアクセスに使う単純な鍵(文字列)です。リクエストにキーを添えて送り、サーバー側は「どのアプリ/どの契約からの呼び出しか」を識別します。
本人(人間)の認証というより、「どのアプリケーションからのアクセスか」を見分けるための識別子に近い、と捉えると役割がはっきりします。
横にスクロール
呼び出し側はヘッダなどにキーを付けてリクエストし、サーバーはそのキーが有効かを確認します。
GET /v1/data
Authorization: Bearer sk_live_xxxxxxxxxxxxxxxx
キーごとに利用元を識別できるため、呼び出し回数の制限(レート制限)、使用量の計測、キー単位の無効化といった運用に使えます。多くのサービスは、キーに接頭辞(sk_live_ 等)を付けて種別を判別しやすくし、サーバー側ではキーそのものではなくハッシュ値を保存して、DB 漏洩時にも原本が漏れないようにします。
OAuth 2.0 とよく比較されます。
| 観点 | API キー | OAuth 2.0 |
|---|---|---|
| 性質 | 単純な共有鍵 | 同意に基づくアクセス委譲 |
| 識別対象 | アプリ/契約 | 利用者の権限(スコープ) |
| 権限の粒度 | 粗い(キー単位) | 細かい(スコープ単位) |
| 有効期限 | 基本は長命(手動失効) | 短命+リフレッシュ |
| 向く場面 | 自社・サーバー間連携 | 第三者への限定委譲 |
「自社で発行し、自社サービスやサーバー間で使う」ならば API キー、「第三者アプリに利用者の権限を限定して委譲する」ならば OAuth 2.0、という使い分けになります。
サーバー間連携や開発者向け API の入口として、手早く導入できるのが利点です。一方で共有鍵ゆえに漏洩リスクが高く、露出すると悪用されやすい点に注意が必要です。
キーはソースコードや公開リポジトリに絶対に書かず、環境変数やシークレット管理(Vault 等)で保管します。用途ごとにキーを分け、可能ならキーに権限スコープと IP 制限を紐づけ、定期的にローテーション、不要になったら失効させます。GitHub 等での誤コミットは自動検知・失効の対象になるほど頻発するため、コミット前スキャンも有効です。人間のログインには使わず、機密度の高い操作には別の強い認証を併用します。
総じて API キーは、導入の手軽さと引き換えに漏洩と権限粒度の弱さを持つ方式で、ハッシュ保存・最小権限・ローテーションを前提に、主にサーバー間・開発者向けの入口として使うのが適切です。
実装・運用の視点
TL;DRは入口です。実際に選ぶ・使う段階では、何を解決するか、何と比較するか、導入後にどこで詰まるかまで見る必要があります。
サービス間 API 呼び出し
種別: 共有シークレット / 目的: 認証(主に機械間) / トークン/形式: API キー文字列
サービス間・CI/スクリプト向け
漏れたら即なりすまし(ローテーション必須)
向いている用途