API キー

API の利用者を識別し、アクセスを制御するための文字列トークン

APIセキュリティ

API キーとは

API キーは、API の利用者を識別し、アクセスを制御するための文字列トークンである。認証 (誰か) ではなく識別 (どのクライアントか) に使う。レート制限や使用量の追跡に利用される。

API キー vs 認証トークン

観点 API キー OAuth / JWT
目的 クライアントの識別 ユーザーの認証・認可
セキュリティ 低い (秘密の共有) 高い (署名付きトークン)
有効期限 長い (手動ローテーション) 短い (自動更新)
用途 公開 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 キーの漏洩対策

❌ よくある漏洩パターン:
  - Git リポジトリにコミット
  - フロントエンドの JS に埋め込み
  - ログに出力
  - URL のクエリパラメータに含める

✅ 対策:
  - .gitignore で .env を除外
  - サーバーサイドでのみ使用
  - ログのマスキング
  - ヘッダーで送信

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 を併用する。

全体像を把握するには関連書籍も有用。

関連用語