2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Claude Codeで環境変数とシークレットを安全管理する8つの実践テクニック

2
Posted at

Claude Codeで環境変数とシークレットを安全管理する8つの実践テクニック

GitHubに誤ってAPIキーをコミットして冷や汗——開発者なら一度は経験があるはず。シークレット漏洩の9割は人的ミスです。

Claude Codeを組み込めば、.env管理からシークレット検出、定期ローテーションまで機械的に安全を担保できます。この記事では筆者が運営する多言語技術メディア(2,400ページ超)の運用でも実際に使っている8テクを紹介します。

1. .envのセットアップを対話形式で自動化

新しい開発者が環境変数を揃えるのは面倒。.env.exampleから自動生成します。

claude -p "
.env.example を読んで、このプロジェクトの .env を対話形式で作成してください。

各変数について:
1. 用途の説明
2. どこで取得するか(URL 付き)
3. ローカル開発での推奨値
4. 必須かオプションか

作成した .env は .gitignore にあることを確認してから保存。
"

新人オンボーディングの速度が段違いに上がります。

2. pre-commitフックでシークレット誤コミットを防ぐ

git commitの瞬間に検出します。

claude -p "
.husky/pre-commit を作成してください。

要件:
- ステージ中のファイルに以下のパターンがないかチェック:
  - AWS アクセスキー: AKIA[0-9A-Z]{16}
  - Stripe: sk_live_[0-9a-zA-Z]{24}
  - GitHub PAT: ghp_[0-9a-zA-Z]{36}
  - 一般的な API キー風の文字列
- 検出したらコミットを拒否し、該当ファイル・行を表示
- false positive 用に // secrets-ignore コメントで除外可能に

trufflehog や gitleaks を使う選択肢も比較して推奨構成を提案してください。
"

gitleaksが業界標準ですが、Claude Codeと組み合わせて検出内容の自動修正までできると理想的。

3. 既存コミット履歴の監査

過去に漏らしたシークレットが残っていないかチェック。

claude -p "
全コミット履歴をスキャンしてシークレットを検出:

1. gitleaks detect --source . --no-git を実行
2. 結果を分類(アクティブ / 既に無効化済み / 誤検知)
3. アクティブな漏洩は即ローテーションする手順を提示
4. .git 履歴から完全削除する手順(git filter-branch か BFG Repo Cleaner)

結果を docs/security/secret-audit.md に機密扱いで出力。
"

漏れたシークレットは即失効・再発行

履歴から消しても、フォーク・キャッシュで残っている前提で動くのが鉄則です。

4. .env.exampleを常に最新に保つ

実.envを更新したら.env.exampleも更新する——これを機械化。

claude -p "
.env と .env.example を比較:

1. .env にあって .env.example にない変数 → 追加(値はプレースホルダに)
2. .env.example にあって .env にない変数 → 不要なら削除提案
3. 各変数のコメント(用途説明)を整備
4. 機密値がプレースホルダになっているか確認

更新後、.env.example を git diff で確認できる状態で保存。
"

5. 本番シークレットをSecrets Managerに移行

ローカルの.envから本番はAWS Secrets Manager / Cloudflare Secrets / Dopplerへ。

claude -p "
.env にある本番用シークレット10個を AWS Secrets Manager に移行:

1. aws secretsmanager create-secret コマンドを生成
2. IAM ポリシー(読み取り権限の最小化)
3. アプリ側でのフェッチコード(キャッシュ付き)
4. デプロイ手順(既存の .env との切り替え)
5. ロールバック手順

Terraform 定義も出力してください。
"

本番のシークレットがコード/リポジトリに残らない状態を作ります。

6. 90日ごとの自動ローテーション

APIキーを90日で必ず再発行する仕組み。

claude -p "
Stripe / OpenAI / Resend など外部サービスの API キーを
90日ごとに自動ローテーションするスクリプトを設計:

1. 各サービスの API 経由で新キー発行
2. Secrets Manager / Cloudflare Secrets に保存
3. デプロイをトリガーして新キーを反映
4. 旧キーの無効化
5. ローテーションログを docs/security/rotation-log.md に追記

GitHub Actions の schedule トリガーで月次実行する YAML も書いて。
"

90日ごとにローテーションはコンプライアンス要件でもあります。

7. 漏洩時のインシデントプレイブック

起きてから慌てない準備。

claude -p "
シークレット漏洩インシデント対応手順を docs/security/incident-playbook.md に:

前提: GitHub 公開リポジトリに AWS アクセスキーを誤コミット

0〜15分:
- AWS コンソールでキー無効化
- 該当リポジトリをプライベート化

15分〜1時間:
- CloudTrail でキーの不正利用確認
- git filter-branch で履歴からキー削除
- 新キーの発行と Secrets Manager 反映

1時間以上:
- セキュリティチーム報告
- 顧客通知要否の判断

各ステップのコマンドと担当者も明記。
"

8. CLAUDE.mdでAIの振る舞いを制約

Claude Code自体が安全に振る舞うようルールを明文化。

## シークレット取り扱いルール

### 禁止
- .env ファイルの内容をコードにハードコード
- API キーをログ出力(console.log 含む)
- シークレットをコメントに書く
- シークレットを README / docs に書く

### 必須
- API キー変更時は必ず .env.example も更新
- 新しい外部サービス追加時は Secrets Manager に登録
- pre-commit hook でシークレット検出を通す

### AI への指示
- コード生成時、APIキー類の値は必ず process.env.XXX に置き換える
- .env の内容を別の場所にコピーしない
- シークレット関連の変更は必ず人間のレビューを通す

これでClaude Codeがうっかり鍵をハードコードするリスクを減らせます。

やってはいけないこと

❌ .env.exampleを.envと同期しない

新人が動かせない環境変数を見逃し、後で大混乱。必ず同期。

❌ Slack や Zoom で API キーを共有

履歴に永久保存されます。シークレット専用ツール(1Password / Doppler)経由で共有。

❌ ログに機密情報を混入

console.log(req.headers)はAuthorizationヘッダを丸裸にします。マスキングを徹底。

❌ 「誰もこんなコミット見ない」と思う

botが5秒で検出してマイニングします。公開前提で対策。

まとめ

  • .envセットアップを対話形式で自動化
  • pre-commitでシークレット誤コミットを検出
  • 既存コミット履歴の監査
  • .env.exampleを自動同期
  • 本番はSecrets Managerに集約
  • 90日ごとの自動ローテーション
  • 漏洩時のプレイブックを事前整備
  • CLAUDE.mdでAIの振る舞いも制約

シークレット管理は仕組みで解く問題。Claude Codeがあれば、属人的なチェックから機械的な安全網に切り替えられます。

関連リソース

この記事はClaudeCodeLabからの転載です。Claude Codeでの業務自動化・研修・コンサルティングのご相談はclaudecode-lab.comまで。

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?