シークレット管理

パスワード、API キー、証明書などの機密情報を安全に保存・配布・ローテーションする手法

セキュリティ運用

シークレット管理とは

シークレット管理は、パスワード、API キー、DB 接続情報、TLS 証明書などの機密情報を安全に保存・配布・ローテーションする手法である。コードやリポジトリにシークレットをハードコードしない。

やってはいけないこと

// ❌ コードにハードコード
const API_KEY = 'sk-abc123def456';

// ❌ .env を Git にコミット
// .env
DATABASE_PASSWORD=secret123

// ❌ Lambda の環境変数に平文で設定 (CloudFormation テンプレートに残る)

シークレットの保存場所

方法 セキュリティ コスト 用途
Secrets Manager 高い (暗号化 + ローテーション) $0.40/月 パスワード、API キー
SSM Parameter Store (SecureString) 中程度 (暗号化) 無料 設定値
環境変数 低い (平文) 無料 非機密の設定値

シークレットのローテーション

1. Secrets Manager が新しいパスワードを生成
2. DB のパスワードを更新
3. アプリケーションが次回取得時に新パスワードを使用
→ 手動介入なしで定期的にパスワードが変更される

Git でのシークレット漏洩防止

# git-secrets: コミット時にシークレットを検出
git secrets --install
git secrets --register-aws

# .gitignore
.env
.env.local
*.pem

シークレットが漏洩した場合

1. 即座にシークレットをローテーション (新しいパスワードに変更)
2. 漏洩したシークレットを無効化
3. CloudTrail でアクセスログを確認
4. 影響範囲を調査
5. 再発防止策を実施

Kubernetes でのシークレット

Kubernetes の Secret は Base64 エンコード (暗号化ではない)。AWS Secrets Manager と連携する Secrets Store CSI Driver を使う。

さらに掘り下げるなら関連書籍が参考になる。

関連用語