シークレットマネージャーとは? 認証情報の裏にある金庫
シークレットマネージャーは、認証情報を暗号化して保存し、誰が読めるかを制御し、完全な監査証跡とともに実行時に配布する専用サービスです。
シークレットマネージャーは、シークレット管理の裏にある専用の金庫です。キーを config ファイルや環境変数に散らばらせる代わりに、それらを暗号化し、アクセスポリシーを適用し、ローテーションし、すべての読み取りを記録する 1 つのサービスに集約します。CI pipeline はジョブ時に必要なものを取得し、何も放置されません。
シークレットマネージャーが提供するもの
- 保存されるすべての値に対する保存時および転送時の暗号化。
- ID に紐づいたきめ細かいアクセスポリシー。
- すべての読み取りと書き込みの監査ログ。
- 組み込みまたはスケジュールされた認証情報のローテーション。
一般的な実装
HashiCorp Vault、AWS Secrets Manager、Google Secret Manager、Azure Key Vault が通常の選択肢です。それぞれ API または CLI を公開しており、pipeline は必要になる直前にシークレットを取得するためにそれを呼び出し、別の保存されたパスワードではなく短命な ID で認証します。
CI がどうやり取りするか
ジョブはマネージャーに認証し(理想的には静的キーではなく OIDC トークンや workload identity を使用)、必要な特定のシークレットを要求し、メモリ内で使い、終了します。シークレットがリポジトリや CI 設定に残ることはありません。
動的シークレット
高度なマネージャーは認証情報をその場で生成できます。1 つのジョブの寿命だけ存在し、その後失効するデータベースパスワードなど。動的シークレットは、漏れた値が有用である窓をほぼゼロまで縮めます。
なぜ CI のシークレット変数だけではだめか
CI ネイティブのシークレット store は小規模プロジェクトには十分ですが、専用マネージャーは多数の pipeline やツールにまたがってシークレットを集約し、より豊富なローテーションと監査を提供し、同じキーを各リポジトリで重複させることを避けます。多くのチームは両方を使います。マネージャーを信頼できる情報源とし、CI 変数を bootstrap トークンに使います。
ランナーの位置づけ
シークレットの取得が安全なのは、取得を行うマシンが信頼でき、かつ短命である場合だけです。isolation された ephemeral なランナー(Latchkey のマネージドランナーなど)は、マネージャーから取得したシークレットがジョブ終了と同時に消え、同じホスト上の後のジョブに決して読まれないことを保証します。
重要なポイント
- シークレットマネージャーは、暗号化、アクセスポリシー、監査とともに認証情報を集約する。
- Vault、AWS Secrets Manager、Azure Key Vault が一般的な実装である。
- 動的なジョブごとのシークレットは、漏れた認証情報をほぼ無価値にする。