上級 25分 Lesson 10

シークレット管理 — パスワードをコードに書いた日が終わる

Secrets Manager、Parameter Store、ACM、CloudHSMを「秘密の管理方法」として講義形式で解説

AWS Secrets Manager ACM CloudHSM SCS-C03 Security

朝からネガティブな質問で申し訳ないんですが。かつて、あなたはコードにパスワード書きました?沈黙が答えですね。みんなやってます。「これ本番用のDBパスワード」とコメント書いて、ソースコード内に平文で。その時代は終わった。秘密を管理する仕組みがあります。

シークレット、証明書、暗号化キー。この3つを安全に管理するのが、このセクションのテーマ。4つのサービスが登場します。Secrets Manager、Parameter Store、ACM、CloudHSM。「何を何で管理するか」の使い分けが重要。そこが試験のキモ。

Secrets Manager の本質

Secrets Manager。役割は「変わるシークレット」の自動ローテーション。DB パスワード。毎月、自動的に新しいのに更新されます。API キー、ユーザー認証情報。こういった「時々更新する秘密情報」。

ローテーションの仕組みですね。4ステップ。「create」で新しいシークレット値を準備。「set」でそれを有効化してテスト。「test」で本当に動くか確認。「finish」で本番切り替え。これ全部 Lambda で制御されます。

制約ね。Lambda トリガーの実行時間。これね、5秒。ローテーション関数が DB に接続して新パスワード設定、そのテスト。全部 5秒以内。VPC 内の Lambda だと起動遅くなるから要注意。

ローテーション戦略

シングルユーザー戦略と交替ユーザー戦略。シングルは「1ユーザーで、パスワード更新のたび一瞬のダウンタイムがある」。交替ユーザーは「ユーザー2個用意して、交互に使い回す」。アプリケーションの接続切断がない。本番環境は交替ユーザー推奨。

MySQL で実装するときの話。実装例は Python で、pymysql ライブラリ使って DB に接続。新ユーザー作成して、GRANT で権限付与。テスト接続。OK なら本番切り替え。この流れが標準。

Parameter Store と比較

Secrets Manager と Parameter Store。違い多い。Secrets Manager は「機密度高い情報、自動ローテーション必須」。Parameter Store は「設定値。変わりにくい情報。低コスト重視」。

料金体系もね。Secrets Manager は月 0.4 ドル/シークレット。Parameter Store は無料(Standard)か月 0.05 ドル(Advanced)。小規模なら Parameter Store 十分。

サイズも違います。Secrets Manager は最大 64KB。Parameter Store は 4~8KB。「社内で使ってる秘密鍵ファイル、100MB」みたいなのは、どちらにも保管できない。S3 に保管して、ポインタを Secrets Manager に入れる。

Parameter Store の秘密

Parameter Store の SecureString。これね。KMS で自動暗号化されます。取得するときに「WithDecryption」オプション付ければ、自動復号化。楽。

階層構造もポイント。/prod/db/host/prod/db/user みたいに、スラッシュで階層化。ポリシーで「/prod/app/*」へのアクセスは許可、みたいに粒度細かく制御できます。Secrets Manager にはこの階層がない。

ACM の自動更新

ACM。SSL/TLS 証明書。AWS が無料で発行・更新。便利。

自動更新。有効期限 90 日前から、自動更新開始。条件がある。DNS 検証を使ってること。Route 53 で自動 CNAME 作成。そしたら自動検証→自動更新。メール検証だと、90 日ごとにメール手動確認が必要。

CloudFront での重要な制約。ACM 証明書は us-east-1 でのみ CloudFront と連携可能。他リージョンで発行した証明書を CloudFront で使おうとしても、見えない。これ、引っかけ問題の定番。

EC2 での ACM 制約

EC2 上で直接 HTTPS 終端。Nginx で ACM 証明書使いたい。不可。パブリック証明書はエクスポートできない。秘密鍵が取得できない。

代替案は ACM PCA(Private Certificate Authority)。月額 400 ドル + 発行ごと 1 ドル。プライベート証明書発行。秘密鍵付きでダウンロード可能。EC2 の Nginx で使える。

ただし。PCA は社内システム用。パブリック HTTPS には使えない。ブラウザが信頼しない。あくまで社内 VPN、マイクロサービス間通信。

CloudHSM の立場

CloudHSM。物理ハードウェアセキュリティモジュール。FIPS 140-2 Level 3。KMS(Level 2)より上。

何が違うか。キーの完全管理。AWS 側からキーアクセスできない。顧客だけが管理。規制要件「キー管理を完全に顧客側で」ってな場合。CloudHSM 必須。

コスト。月額約 1050 ドル。最小 3 台クラスター構成。初期構築含めると、結構かかります。PCI-DSS Level 3 とか超大規模 SaaS(多テナント暗号化)とか。本当に必要な場合だけ。

カスタムキーストア

KMS の「カスタムキーストア」機能。CloudHSM 上のキーを KMS の API 経由で使える。つまり「KMS の便利さ」と「CloudHSM の強力なセキュリティ」を組み合わせ。

内部的には、KMS が CloudHSM にリクエスト送って、暗号化操作を実行。キーは CloudHSM を出ない。AWS クラウド側の責任分界点と顧客側の責任分界点が明確に分かれます。

試験ポイント

「パスワード自動ローテーション + クロスアカウント共有」って言われたら。Secrets Manager + リソースポリシー + Lambda。これ、セット。

「64MB の秘密鍵をシークレット保管」。不可。容量オーバー。S3 + KMS か CloudHSM。実務的には S3 に保管して、ポインタを Secrets Manager に。

「CloudFront で自動更新」。ACM、us-east-1、DNS 検証。この3つのセット。

「EC2 で HTTPS 終端」。ACM パブリックは不可。ACM PCA 選択。秘密鍵が取得できるから。

できないこと・制約

Secrets Manager は 64KB 上限。大ファイル不可。

Parameter Store は 4~8KB 上限。超えるとエラー。

ACM はエクスポート不可(パブリック)。秘密鍵取得できない。CloudFront・ALB・API Gateway 向け。

CloudHSM は自動ローテーション機能がない。手動で新キー生成→切り替え。運用負荷高い。

まとめ

使い分けの表。Secrets Manager は「自動ローテーション必須」。Parameter Store は「設定値、低コスト」。ACM は「AWS 内リソース向けの無料証明書」。CloudHSM は「規制準拠、キー完全管理」。

次の講義は Inspector と Macie。脆弱性スキャンと機密データ検出。また別のセキュリティアプローチ。では次の動画で。