APIキー・シークレット管理

更新日:

APIキーやトークンは「その文字列を持っている人=本人」とみなされる鍵。漏れると他人があなたの権限をすべて使える(勝手に課金される、データを消される等)。生成AIで開発するときに最も事故が起きやすいポイント。

よくある漏洩パターン

  • コードに直接書いて Git に commit → 履歴に残り、消しても復元できる
  • ブラウザで動くコードに埋め込む → 開発者ツールで誰でも見られる
  • ログやエラーメッセージに出力してしまう
  • AIチャットやスクリーンショットに貼り付けてしまう
  • リポジトリを誤って public にする

対策

1. 環境変数に分ける

# .env.local (このファイルは Git に含めない)
OPENAI_API_KEY=sk-xxxx
# .gitignore
.env*
  • 本番環境では各サービスのシークレット機能を使う(例: Cloudflare の wrangler secret put)

2. ブラウザに送られる値に注意

  • Next.js の NEXT_PUBLIC_ 付き環境変数などはブラウザに配信される=公開情報
  • 環境変数に入れていても、ブラウザで使えば見える
  • 秘密キーはサーバー側の処理でだけ使う

3. キーの種類を見分ける

  • 公開して良いキー(publishable key)と秘密キー(secret key)が分かれているサービスがある(Stripe等)
  • 種類が分からないときは秘密キーとして扱う

4. 最小権限

  • 用途ごとにキーを分け、必要な権限だけ付ける
  • 「全権限キー」を使い回すと、漏れたときの被害が最大になる

漏れたときの対応

  1. まずキーを無効化(revoke)して新しいキーを発行 ← 最優先
  2. その後に原因調査・コード修正
    (原因を調べている間にも悪用されるため、順番が大事)

AIへの指示例(CLAUDE.md / AGENTS.md に書いておく)

「APIキーやパスワードはコードに直書きせず、必ず環境変数から読むこと。.env ファイルは commit しないこと」

関連