DEA / ドメイン4 データセキュリティとガバナンス

Secrets Manager と Parameter Store

データパイプラインは、データベースのパスワード、 の キー、接続先のホスト名など、多くの設定値と認証情報を使います。これらをコードやジョブの引数に書くと、漏えいやローテーションの漏れにつながります。 DEA では、認証情報を に保管して自動でローテーションし、ほかの設定値は Parameter Store に置く、という使い分けが問われます。

Point
  • Secret は「秘密」で、パスワードや API キーのように漏れてはいけない値です。
  • Rotation は「交代、回転」で、認証情報を定期的に新しい値へ替えることです。
  • SecureString は、Parameter Store で KMS により暗号化して保存する型です。
  • 和訳

概要

どちらも「値を安全に保管し、 の権限があるプログラムだけに取り出させる」サービスです。 違いは、 が認証情報のライフサイクル (生成、ローテーション、データベースとの同期) まで面倒を見るのに対し、Parameter Store は設定値の階層的な保管が中心である点です。

概要の図 GetSecretValue KMS で復号 定期ローテーション GetParameter Glue ジョブ / Lambda Secrets Manager AWS KMS RDS / Redshift Parameter Store/pipeline/prod/bucket
見るポイント代表的な判断
データベースのパスワードを自動で替えたいかSecrets Manager の自動ローテーションを使います。
単なる設定値 (名、閾値) かParameter Store の String を使います。
費用を抑えて暗号化した値を置きたいかParameter Store の SecureString (標準パラメータ) を使います。
別アカウントや別で使うかSecrets Manager のリソースポリシーやレプリカを検討します。

主要技術

①Secrets Manager のシークレット

シークレットは、キーと値の組 () やテキストとして保存され、必ず で暗号化されます。既定は AWS マネージドキー (aws/secretsmanager) で、も選べます。

機能内容判断ポイント
取得GetSecretValue で値を取り出します。取り出す主体に secretsmanager:GetSecretValue と、カスタマー管理キーなら kms:Decrypt が必要です。
リソースポリシーシークレットに付けるポリシーです。別アカウントに共有する場合に使います。その場合はカスタマー管理キーで暗号化し、キーポリシーでも相手を許可します。
レプリカシークレットを別へ複製します。のパイプラインや で、各リージョンから同じ値を読めます。
バージョンとステージングラベルAWSCURRENT、AWSPENDING、AWSPREVIOUS で版を区別します。ローテーション中も、アプリは AWSCURRENT を読めば正しい値を得ます。

②自動ローテーション ⚠️ 頻出

方式仕組み対象
マネージドローテーションサービス側がローテーションを設定・実行します。 関数は不要です。・ のマスターユーザーのパスワードを で管理する設定、 の管理者パスワードの管理など、サービスが管理するシークレットです。
Lambda 関数によるローテーションローテーション用の Lambda 関数が、新しいパスワードの生成、データベースへの設定、検証、切り替えを行います。RDS・Aurora・Redshift・ 用のテンプレートがあります。それ以外 ( の キーなど) は自作の関数で替えます。

ローテーションの戦略は2つあります。

戦略動き向いている場面
シングルユーザー1つのユーザーのパスワードを更新します。一般的な用途です。切り替えの一瞬に古いパスワードで接続していた処理が失敗する可能性があります。
交代ユーザー (alternating users)2つのユーザーを交互に更新し、片方は常に有効です。停止できない高可用の処理向けです。ユーザーを複製する権限 (管理者のシークレット) が必要です。

スケジュールは rate() または cron() 式で指定し、最短で4時間ごと、最長で999日ごとにローテーションできます。ローテーションはローテーションウィンドウ (最短1時間) の中で行われます。

ローテーション用の Lambda 関数を 内で動かす場合は、データベースへの経路と、Secrets Manager の API への経路 (インターフェイスまたは ゲートウェイ) の両方が必要です。ローテーションが失敗する典型的な原因です。


③Systems Manager Parameter Store

Parameter Store は、/pipeline/prod/source-bucket のような階層の名前で値を保管します。階層の途中までを指定してまとめて取得 (GetParametersByPath) でき、 ポリシーも階層単位で絞れます。

型内容
String平文の文字列です。
StringListカンマ区切りの複数の値です。
SecureString で暗号化した文字列です。取得時に WithDecryption を指定して復号します。
項目標準パラメータアドバンストパラメータ
数 (アカウント・ごと)10,000100,000
値の最大サイズ4 KB8 KB
パラメータポリシー (有効期限、期限前の通知、変更がないことの通知)不可可
他アカウントとの共有不可可
料金追加料金なし有料

標準からアドバンストへは変更できますが、アドバンストから標準へは戻せません。 Parameter Store には自動ローテーションの機能はありません。アドバンストパラメータのポリシーで「期限が近い」と通知することはできますが、値の更新は自分で行います。


④Secrets Manager と Parameter Store の比較 ⚠️ 頻出

観点Parameter Store
主な用途データベースの認証情報、 キー設定値、機能フラグ、少量の機密値
自動ローテーションあり (マネージド、)なし
暗号化常に で暗号化SecureString のときだけ KMS で暗号化
料金シークレットの数と API 呼び出しに課金標準は追加料金なし
別への複製レプリカありなし
別アカウントとの共有リソースポリシーアドバンストパラメータの共有

Parameter Store の /aws/reference/secretsmanager/シークレット名 という名前で、Secrets Manager のシークレットを参照することもできます。設定値の取得を Parameter Store の API に統一したい場合に使えます。


⑤パイプラインからの参照

参照する側方法
の接続 接続にユーザー名とパスワードを直接書かず、 のシークレットを指定します。ジョブのロールにシークレットの取得権限を付けます。
で取得するか、AWS Parameters and Secrets Lambda Extension で取得結果をし、呼び出しのたびの 呼び出しと遅延を減らします。
管理者のパスワードを Secrets Manager で管理できます。Redshift Data API では、シークレットの ARN を指定して認証できます。では、接続先の ・ の認証情報をシークレットで渡します。
/ MWAA では、 の接続や変数の保管先 (シークレットバックエンド) に Secrets Manager を設定できます。
動的参照 {{resolve:secretsmanager:...}} や {{resolve:ssm:...}} でテンプレートに値を書かずに参照します。

試験対策

認証情報の問題では、「自動でローテーションしたいか」でまず分けます。ローテーションが要件なら 、設定値の保管や費用重視なら Parameter Store です。 コード・環境変数・ジョブの引数への平文のパスワードの埋め込みは、どの問題でも誤答です。

①判断マトリクス

問題文のキーワード選ぶもの理由
のパスワードを30日ごとに自動で替えたい の自動ローテーションデータベースとシークレットを同期して替えます。
運用の手間を最小にして RDS のマスターパスワードを管理RDS の Secrets Manager 統合 (マネージドローテーション) 関数を用意せずに済みます。
ローテーション中も接続を切らしたくない交代ユーザーの戦略片方のユーザーが常に有効です。
ジョブの 接続にパスワードを書きたくないGlue 接続に Secrets Manager のシークレットを指定ジョブのロールで取得します。
名や閾値などの設定値を環境ごとに管理Parameter Store の階層 (/env/app/...)階層で取得と権限を分けられます。
暗号化した値を追加料金なしで保管したいParameter Store の SecureString (標準)標準パラメータは追加料金がありません。
8 KB の値やパラメータの有効期限が必要Parameter Store のアドバンストパラメータ標準は 4 KB で、ポリシーを使えません。
Lambda から頻繁に読み、遅延と費用を減らしたいParameters and Secrets Lambda Extension取得結果をします。
別アカウントのジョブにシークレットを使わせるリソースポリシー + AWS マネージドキーは他アカウントに許可できません。
複数で同じ認証情報を使うSecrets Manager のレプリカリージョンごとに読めます。

②よくある誤答

  • Parameter Store に自動ローテーションがあると考えること。ローテーションは の機能です。
  • ローテーション用の を に置いたのに、Secrets Manager への経路を用意しないこと。か が必要です。
  • 別アカウントへの共有で、リソースポリシーだけ設定して キーの許可を忘れること。
  • 認証情報を ジョブの引数や Lambda の環境変数に平文で置くこと。

参考文献

  1. ※1出題比率: AWS 公式の試験ガイドに記載された、採点対象の設問のうちその分野が占める割合です。

検索

キーワードを入力してください