シークレット管理 - シークレット管理
API キー、パスワード、証明書などの機密情報を安全に保管・配布・ローテーションする仕組み。ハードコーディングの防止が基本。
概念図
実例
HashiCorp Vault にシークレットを保存・取得
bash
vault kv put secret/myapp/db username=admin password=s3cret
vault kv get secret/myapp/dbAWS Secrets Manager にシークレットを保存
bash
aws secretsmanager create-secret --name prod/db-password --secret-string "s3cret"シークレット管理の必要性と手法
シークレットのハードコーディングや平文保存は、情報漏洩の主要な原因の一つです。
- ハードコーディングの危険性: ソースコードに API キーやパスワードを直接記述すると、Git リポジトリ経由で漏洩するリスクがある
- 環境変数の限界: 環境変数はプロセス一覧やログに表示される場合があり、十分な保護とは言えない
シークレット管理ツール:
- HashiCorp Vault: 動的シークレット生成、自動ローテーション、監査ログを備えたシークレット管理の標準
- AWS Secrets Manager / Parameter Store: AWS 環境でのマネージドシークレット管理
- Azure Key Vault / GCP Secret Manager: 各クラウドプロバイダーのマネージドサービス
- Kubernetes Secrets: Base64 エンコードのみで暗号化されないため、Sealed Secrets や External Secrets Operator との併用を推奨
ベストプラクティス
- シークレットの自動ローテーション: パスワードや API キーを定期的に自動更新する仕組みを構築する
- 最小権限のアクセス制御: シークレットへのアクセスを必要なサービス・ユーザーに限定する
- 監査ログ: シークレットへのアクセスをすべて記録し、不正なアクセスを検知する
- Git リポジトリのスキャン: git-secrets, truffleHog, gitleaks 等でリポジトリ内のシークレットを検出する
- CI/CD パイプラインのシークレット管理: GitHub Actions Secrets, GitLab CI Variables 等を使い、パイプライン内でシークレットを安全に扱う
- .gitignore の設定:
.env,credentials.json等のファイルを Git の追跡対象から除外する
