AWSで機密情報や設定値をどこに置くか。Secrets ManagerとParameter Storeは似て非なるサービスで、選定を誤ると料金と運用が両方こじれます。違いと判断軸を現場目線で整理します。

「DBパスワードやAPIキーをどこに置くか」という問いに、AWSはSecrets ManagerSystems Manager Parameter Storeという2つの答えを用意しています。どちらも暗号化してキー・バリューを保管し、ECSLambdaから注入できる点は共通です。しかし料金体系・自動ローテーション・サイズ上限・共有機能が異なり、「とりあえずSecrets Manager」も「全部Parameter Store」も、規模が大きくなると破綻します。本記事では両者を実務目線で切り分け、SIer/情シスの現場で迷わない判断軸を示します。

01まず結論:機密はSecrets Manager、設定値はParameter Store

細かい比較の前に、EMWが現場で使っている大原則を先に置きます。

Parameter StoreのSecureStringKMSで暗号化され、標準パラメータなら保管料は無料です。一方でSecrets Managerは1シークレットあたり月額課金が発生します。つまり「暗号化して隠したいだけ」なら、必ずしもSecrets Managerである必要はありません。ここを取り違えると、数千件のパラメータで無駄な固定費が積み上がります。

現場のコツ:「秘密かどうか」ではなく「ローテーションと監査の要件があるか」で一次仕分けします。秘密でもローテーション不要ならParameter StoreのSecureStringで足りることが多く、Secrets Managerの月額を払う理由が本当にあるかを毎回問い直すのがコスト最適化の起点です。

02料金体系の違い:固定費か、ほぼ無料か

両者で最も差が出るのが料金です。数値はバージョンや改定で変わるため、必ず公式の最新を確認してください。ここでは執筆時点の考え方を示します。

ざっくり言えば、Parameter Storeの標準パラメータは「タダで暗号化保管できる」のが最大の武器です。逆にSecrets Managerは固定費がかかる代わりに、ローテーションやクロスアカウント参照、細かいバージョン管理といった「秘密を運用するための機能」がパッケージされています。単価は小さく見えても、シークレットが数百・数千件になると年間で無視できない差になります。

現場のコツ:API呼び出し課金は「取得回数×パラメータ数」で効きます。1回のGetで10件返せば10カウントです。高頻度でアクセスするアプリでは、後述のLambda拡張やアプリ側キャッシュを併用しないと、保管料より呼び出し料が膨らむケースがあります。

03自動ローテーション:ここがSecrets Manager最大の価値

Secrets Managerを選ぶ最大の理由は自動ローテーションです。AWS公式は、ローテーションを「秘密を定期的に更新するプロセス」と定義し、2つの方式を提供しています(Rotate secrets ドキュメント)。

Parameter Storeにはこの自動ローテーション機構がありません。ローテーションが必要な秘密をParameter Storeに置くと、更新の仕組みを自前でスケジューリング・実装することになり、結局Secrets Manager相当を再発明する羽目になります。ローテーション要件がある時点で、Secrets Managerが第一候補です。

ローテーション設計をアプリ側でどう受けるかは、DB接続の観点でRDS Proxyによる接続管理や、暗号鍵まわりのKMS暗号化設計とセットで考えると破綻しにくくなります。

04サイズ・階層・共有:見落としやすい制約

選定でつまずくのが、地味なサイズ上限と階層の非対称性です。公式ドキュメント(Managing tiers)に基づく主な違いを表にします。数値は変わり得るため最新確認を前提としてください。

3つの保管先の比較 項目 Secrets Manager PS 標準 PS 高度 保管料 $0.40/月 無料 $0.05/月 値サイズ上限 最大64KB 4KB 8KB 自動ローテーション あり なし なし 上限件数/リージョン クォータ確認 10,000 100,000 クロスアカウント共有 リソースポリシー 不可 パラメータポリシー 不可 可(TTL等) ※料金・上限はバージョン依存。必ず公式の最新を確認
図:Secrets Manager / Parameter Store 標準・高度パラメータの主な違い

注意したいのは、Parameter Storeの高度パラメータは標準に戻せない点です。公式は、標準へ戻すと8KB→4KBの切り詰めでデータ損失が起き、ポリシーが失われ、暗号化も変わるため不可としています。不要になったら削除して標準で作り直すしかありません。安易な高度パラメータ化はコストとロックインの両面で後を引きます。

05ECSへの注入:valueFrom で環境変数に渡す

コンテナへの注入は、ECSタスク定義のsecretsフィールドにvalueFromでARNを指定するのが定石です。両サービスとも同じ書式で扱え、実行ロール(executionRole)に取得権限を付けます。

現場のコツ:ECSの秘密注入はコンテナ起動時に一度だけ行われます。Secrets Managerでローテーションしても、稼働中のタスクの環境変数は更新されません。ローテーション後は新しいタスクを起動する(サービスなら「新しいデプロイの強制」)必要があります。ここを理解せず「ローテーションしたのに古いパスワードで接続失敗」というトラブルは非常に多いです。

タスク定義まわりの実装はECSタスク定義の実践、起動タイプの選定はFargateとEC2起動タイプもあわせてご覧ください。

06Lambdaへの注入:拡張機能でキャッシュしてコストを抑える

Lambdaから取得する場合、SDKで毎回Getすると呼び出しごとにAPI課金とレイテンシが乗ります。AWS公式のParameters and Secrets Lambda Extensionを使うと、取得値を実行環境内にキャッシュでき、API呼び出しを削減できます(AWS公式ブログ)。

ローテーション直後に古い値をキャッシュし続けると認証エラーになるため、TTLは「多少の失敗をリトライで吸収できる長さ」に設定するのが実務のバランスです。Lambda全般の作り込みはLambda本番運用の実践を参照してください。

注入パターン:ECS と Lambda Secrets Manager 機密+ローテーション Parameter Store 設定値・非機密 ECSタスク secrets: valueFrom でARN指定 起動時に環境変数へ注入 Lambda 拡張機能キャッシュ localhost:2773 / TTL既定300秒 ※実行ロールに取得権限(ssm/secretsmanager と必要なら kms:Decrypt)を付与
図:ECSは起動時注入、Lambdaは拡張機能でキャッシュしてコストとレイテンシを抑える

07IAM設計:最小権限とKMSのDecryptを忘れない

どちらのサービスも、権限設計を雑にするとそこが穴になります。ポイントは3つです。

クロスアカウントで秘密を参照する場合、Secrets Managerはリソースポリシー+KMSキーポリシーの二段で許可する必要があり、設計が一段複雑になります。ここはIAM最小権限の現実マルチアカウント統制の考え方とセットで詰めるのが安全です。

現場のコツ:「秘密は取得できるのに復号できずエラー」の8割はKMS権限漏れです。SecureStringやCMK運用に切り替えたら、実行ロールに対象キーのkms:Decryptがあるかを真っ先に確認します。CloudTrailでAccessDeniedのイベントソースを見れば、SSM側かKMS側かを即座に切り分けられます。

08選定の決定表:迷ったらこの順で当てる

ここまでを実務のフローに落とすと、次の順で判定するのが早いです。

ハイブリッド運用も現実的です。DBパスワードはSecrets Manager、その他の環境設定はParameter Store、と役割で使い分けるのが、大手エンタープライズの構成では最もバランスが良い落とし所になります。両者は同じvalueFrom書式でECSに注入できるため、混在させても運用が破綻しません。

まとめ

Secrets ManagerとParameter Storeは競合ではなく、役割分担するサービスです。ローテーションと監査要件のある機密はSecrets Manager、それ以外の設定値・非機密はParameter Store(機密でもローテーション不要ならSecureString)という一次仕分けを起点に、料金・サイズ・階層・共有の制約を当てはめれば、大きく外しません。ECSは起動時注入・ローテーション後は再デプロイ、Lambdaは拡張機能でキャッシュ、IAMはリソース単位+KMSのDecryptを忘れない——この4点を押さえれば、コストと運用の両方を破綻させずに済みます。数値や上限はバージョンで変わるため、実装前に必ず公式の最新を確認してください。設計レビューや既存構成の見直しはお気軽にお問い合わせください。

参考(一次情報)

機密情報の管理設計やCI/CDへの安全な注入でお困りでしたら、お問い合わせください。既存構成のレビューから対応します。

相談する
← ブログ一覧へ戻る