シークレット管理
パスワード、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 でのシークレット漏洩防止の例を示す。
# 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 を使う。
さらに掘り下げるなら関連書籍が参考になる。
この記事は役に立ちましたか?
関連用語
Secrets Manager
AWS のシークレット管理サービスで、パスワードや API キーを安全に保存・自動ローテーションする
KMS
AWS の暗号鍵管理サービスで、データの暗号化・復号に使う鍵を安全に管理する
シークレットローテーション
API キーやデータベースパスワードなどの秘密情報を定期的に自動更新するセキュリティプラクティス
コードカバレッジ
テストがソースコードのどの程度の範囲を実行しているかを測定する指標
PKCE
OAuth 2.0 の認可コードフローを、クライアントシークレットなしで安全に実行するための拡張
GitHub Actions
GitHub に統合された CI/CD プラットフォームで、ワークフローを YAML で定義して自動実行する
関連する記事
OS・低レイヤー本ガイド - コンピュータの仕組みを学ぶ技術書の選び方
OS、コンパイラ、ネットワークなど低レイヤーを学べる技術書の 4 ジャンルと、どこから始めるべきかの指針、賞味期限の見極め方を紹介します。
「あとで読む」ブックマークが 100 件を超えたら本を買え
ブラウザのブックマークに技術記事を溜め込んでいませんか。断片的な記事を 100 件読むより、同じテーマの本を 1 冊読む方が効率的な理由を解説します。
Web 開発本ガイド - フロントエンドからバックエンドまで
Web 開発の全体像を学べる技術書の選び方と学習マップを紹介。フレームワーク本の賞味期限問題と公式ドキュメントとの使い分けも解説します。