クラウド・インフラセキュリティ
シークレット管理
約 3 分で読めます
最終更新: 2026-01-18
シークレット管理とは
シークレット管理 (Secret Management) とは、パスワード、API キー、データベース接続文字列、TLS 証明書の秘密鍵、暗号化キーなどの機密情報を安全に保管・配布・ローテーションする仕組みです。
シークレットの漏洩は深刻なセキュリティインシデントに直結します。GitHub の公開リポジトリにコミットされた AWS アクセスキーが数分以内にボットに検出され、不正利用されるケースは日常的に発生しています。シークレット管理の目的は、機密情報をコードや設定ファイルから分離し、アクセス制御・監査・自動ローテーションを一元的に行うことです。
シークレット管理ツールと選定基準
シークレット管理には専用のツールやサービスを使用します。環境変数やコード内のハードコードは、漏洩リスクが高く監査もできないため避けるべきです。
- HashiCorp Vault: オープンソースのシークレット管理ツール。動的シークレット (使い捨ての認証情報) の生成、きめ細かいアクセスポリシー、複数の認証バックエンドに対応。マルチクラウド環境に適している
- AWS Secrets Manager: AWS ネイティブのサービス。RDS、Redshift などの AWS サービスとの統合が容易で、自動ローテーション機能を標準搭載。Lambda 関数でカスタムローテーションロジックも実装可能
- AWS Systems Manager Parameter Store: シンプルなキーバリューストア。Secrets Manager より安価で、設定値とシークレットを統合管理できる。自動ローテーション機能はないが、小規模環境では十分
選定基準は、自動ローテーションの必要性、マルチクラウド対応、既存インフラとの統合性、コストです。IAM と連携してシークレットへのアクセスを最小権限で制御することが前提です。
シークレットのライフサイクル管理
シークレットは「作成して終わり」ではなく、ライフサイクル全体を管理する必要があります。
- 生成: 十分なエントロピーを持つランダムな値を生成する。人間が考えたパスワードや推測可能なパターンは使用しない
- 配布: シークレットをアプリケーションに渡す際は、環境変数への注入、ファイルマウント、API 経由の取得のいずれかを使用する。Slack やメールでシークレットを共有しない
- ローテーション: 定期的にシークレットを更新する。データベースパスワードは 90 日ごと、API キーは用途に応じて設定する。ダウンタイムなしでローテーションするには、新旧両方のシークレットを一時的に有効にするデュアルシークレットパターンを採用する
- 失効: 不要になったシークレットは速やかに無効化・削除する。退職者が知っていたシークレットは即座にローテーションする
IaC のコード内にシークレットを記述せず、デプロイ時にシークレット管理サービスから動的に取得する設計にしましょう。コンテナ環境では、Kubernetes の External Secrets Operator で外部シークレットストアと連携できます。
シークレット漏洩の検知と対応
シークレットの漏洩を早期に検知し、被害を最小化する仕組みも重要です。
- Git シークレットスキャン: git-secrets、truffleHog、GitHub Secret Scanning などのツールで、コミット前またはプッシュ時にシークレットの混入を検出する。pre-commit フックに組み込むのが最も効果的
- ランタイム検知: アプリケーションログにシークレットが出力されていないか監視する。ログ出力時にシークレットを自動マスクするライブラリを使用する
- 漏洩時の対応手順: シークレットの漏洩を検知したら、即座にそのシークレットを無効化し、新しいシークレットを発行する。影響範囲を調査し、不正利用の痕跡がないか暗号化されたログを確認する
ゼロトラストの考え方に基づき、シークレットが漏洩した場合でも被害を限定できるよう、シークレットごとの権限を最小化し、有効期限を短く設定することが防御の基本です。
よくある誤解
- 環境変数にシークレットを格納すれば安全
- 環境変数はプロセスの /proc ファイルシステムやクラッシュダンプ、ログ出力から漏洩する可能性があります。環境変数はシークレット管理サービスから取得した値の一時的な受け渡し手段としては使えますが、永続的な保管場所としては不適切です。
- シークレットを暗号化してリポジトリにコミットすれば問題ない
- 暗号化キーの管理が新たな課題になり、キーが漏洩すれば全シークレットが復号されます。また、Git の履歴にシークレットが残り続けるため、キーローテーション時に過去のコミットも対処が必要です。専用のシークレット管理サービスを使用すべきです。