API キー

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

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

この記事は役に立ちましたか?

関連用語

関連する記事