API キー
API の利用者を識別し、アクセスを制御するための文字列トークン
API キーとは
API キーは、API の利用者を識別し、アクセスを制御するための文字列トークンである。認証 (誰か) ではなく識別 (どのクライアントか) に使う。レート制限や使用量の追跡に利用される。
API キー vs 認証トークン
API キーと認証トークンの違いを以下にまとめる。
| 観点 | API キー | OAuth / JWT |
|---|---|---|
| 目的 | クライアントの識別 | ユーザーの認証・認可 |
| セキュリティ | 低い (秘密の共有) | 高い (署名付きトークン) |
| 有効期限 | 長い (手動ローテーション) | 短い (自動更新) |
| 用途 | 公開 API、レート制限 | ユーザーデータへのアクセス |
API キーの送信方法
API キーの送信方法の例を示す。
# ヘッダーで送信 (推奨)
curl -H "x-api-key: abc123" https://api.example.com/data
# クエリパラメータで送信 (非推奨: ログに残る)
curl https://api.example.com/data?api_key=abc123
API キーの管理
API キーはコードにハードコードせず環境変数で管理し、AWS では Secrets Manager でセキュアに保存する。定期的に新しいキーにローテーションし、必要な API のみアクセス可能なスコープ制限と、特定の IP からのみ使用可能な IP 制限を設ける。
API キーの漏洩対策
API キーの漏洩対策を図で示す。
❌ よくある漏洩パターン:
- Git リポジトリにコミット
- フロントエンドの JS に埋め込み
- ログに出力
- URL のクエリパラメータに含める
✅ 対策:
- .gitignore で .env を除外
- サーバーサイドでのみ使用
- ログのマスキング
- ヘッダーで送信
Lambda での API キーの取得
Lambda での API キーの取得のコード例を示す。
import { SecretsManagerClient, GetSecretValueCommand } from '@aws-sdk/client-secrets-manager';
const client = new SecretsManagerClient({});
const secret = await client.send(
new GetSecretValueCommand({ SecretId: 'my-api-key' })
);
const apiKey = secret.SecretString;
API キーだけでは不十分
API キーは識別には使えるが、セキュリティの唯一の防御線にしない。認証が必要な API には OAuth 2.0 / JWT を併用する。
全体像を把握するには関連書籍も有用。
この記事は役に立ちましたか?
関連用語
レート制限
API やサービスへのリクエスト数に上限を設け、過負荷を防ぐ仕組み
API Gateway
API のエントリーポイントとして認証、スロットリング、ルーティングを一元管理する AWS サービス
シークレット管理
パスワード、API キー、証明書などの機密情報を安全に保存 / 配布 / ローテーションする手法
ケイパビリティベースセキュリティ
リソースへのアクセス権を偽造不可能なトークン (ケイパビリティ) として管理するセキュリティモデル
OAuth 2.0
ユーザーのパスワードを渡さずに、リソースへの限定的なアクセスを許可する認可フレームワーク
OpenID Connect
OAuth 2.0 の上に構築された認証レイヤーで、ユーザーの身元情報を ID トークンとして提供する
関連する記事
セキュリティ本ガイド - Web 開発者が読むべき技術書の選び方
Web セキュリティの基礎から実践まで学べる技術書の選び方マトリクスと、読了後にやるべき 3 つのアクションを紹介します。
AWS 本の選び方 - 全体像 / 構築 / 設計 / 運用 / セキュリティの 5 視点
AWS を学ぶ技術書の選び方を「全体像 / 構築 / 設計 / 運用 / セキュリティ」の 5 視点で整理。公式ドキュメントと本の役割分担、資格対策書の位置づけまで、2026 年 8 月時点の定番書で AWS 独学のルートを解説します。
バグを生むのは知識不足ではなく想像力不足である
バグの多くは、コードを書いた時点で「こういうケースもありうる」と想像できなかったことが原因です。想像力を鍛える読書法と、エッジケースへの感度を高める方法を解説します。