Secrets Managerとは ― Parameter Storeとの違い
DBの
AWS Secrets Managerとは、パスワードやAPIキーをコードの外で保管するサービス
RDSに接続するパスワードをソースコードや環境変数に直接書くと、レビューで指摘されることがあります。「Secrets Managerに入れてください」という指摘です。AWS Secrets Managerは、こうした秘密の値を暗号化して保管するサービスです。アプリは実行時に値を取得できます。
コードに書いたパスワードは、コードやアプリの中身を見られる人なら読めてしまいます。パスワードを変更するたびに、コードを修正してデプロイし直す手間もかかります。Secrets Managerに移すと、コードからパスワードがなくなり、定期的な変更も自動化できます。
Secrets Managerで保管する1件の秘密情報を、シークレットと呼びます。シークレットには月ごとの料金がかかります。
似たサービスのParameter Storeは、標準パラメータなら追加料金なしで使えます。ただし、ローテーション(値の定期的な更新)を自動で行う機能はありません。どちらが向くかは、後半の比較表と条件ごとの選び方で説明します。
シークレットに保管するのは、DBのパスワードやAPIキー、トークン
Secrets Managerには、データベースのパスワードや外部サービスのAPIキー、OAuthのトークンなどを保管します。1つのシークレットの値は、65,536バイトまで保管できます。
秘密の値がすべてSecrets Managerに向くわけではありません。AWSは、種類ごとに次のサービスを勧めています。たとえばEC2やLambdaからAWSのサービスを使うときは、IAMのロールを使います。アクセスキーをシークレットに保管しません。
アプリは、IAMロールの権限で実行時に値を取り出す
アプリのコードには、パスワードの代わりに、シークレットを取得する処理を書きます。取得の権限は、アプリが使うIAMロールに与えます。LambdaならLambdaの実行ロール、EC2ならインスタンスに付けたロールです。
必要な権限は、secretsmanager:
値はTLSで暗号化された通信でアプリに届きます。受け取ったパスワードで、アプリはRDSに接続します。Lambdaには、AWS Parameters and Secrets Lambda Extensionという拡張機能があります。これを使うと、SDKなしで値を取得してキャッシュできます。
自動ローテーションは、シークレットとDBのパスワードを一緒に更新する
ローテーションは、シークレットの値を定期的に更新することです。シークレットだけでなく、データベースや外部サービスの側のパスワードも同時に変更します。アプリは実行時にシークレットから値を取得するので、コードの修正もデプロイも不要です。同じパスワードを長く使わないので、漏えいしたときのリスクも小さくなります。
やり方は主に2つあります。マネージドローテーションが使えるのは、RDS・Aurora・DocumentDBのマスターユーザーのパスワードです。Redshiftの管理者のパスワードにも使えます。これは、そのサービスがローテーションの設定と実行を受け持つ方法です。Lambda関数は不要です。SalesforceやSnowflakeなど、AWSと連携している外部サービスのシークレットにも使えます。
RDSにパスワードの管理を任せると、RDSがパスワードを作ってSecrets Managerに保管します。更新は既定で7日ごとです。更新の間隔は変更でき、最短で4時間ごとです。
そのほかのシークレットは、Lambda関数でローテーションします。アプリ用のデータベースユーザーには、AWSがテンプレートの関数を用意しています。関数はスケジュールに沿って呼び出され、次の図の4つの手順を実行します。
ラベルは、シークレットのどのバージョンが今使う値かを示す目印です。実際の名前はAWSCURRENTのように頭にAWSが付きますが、図では省きます。
手順2から手順4までの間は、データベースのパスワードだけが先に変わっています。この短い間にアプリがCURRENTの値で新しく接続すると、拒否される可能性があります。接続に失敗したら値を再取得して再接続する処理をアプリに入れておくと、この影響を抑えられます。すでに開いている接続は切れません。
可用性を優先するアプリには、2つのユーザーを交互に更新する方法があります。更新中に値を取得しても、どちらかの有効なユーザーの値が返るので、接続を拒否される可能性がさらに下がります。
シークレットの値は、KMSのキーでエンベロープ暗号化される
Secrets Managerは、値の暗号化にAWS KMSを使います。値をデータキーで暗号化し、そのデータキーをKMSキーで暗号化します。このやり方をエンベロープ暗号化と呼びます。シークレットの値が変わるたびに、新しいデータキーを使います。
使うKMSキーは、シークレットを作るときに選びます。何も作らなくても、Secrets Manager用のAWSマネージドキーを無料で使えます。名前はaws/secretsmanagerです。鍵の権限を細かく分けたいときや、キーの使用を個別に監査したいときは、自分で作ったカスタマーマネージドキーを選びます。
暗号化されるのは、シークレットの値だけです。名前・説明・ローテーションの設定・タグは暗号化されません。パスワードの一部を名前やタグに書くと、保管の意味がなくなります。
取得の記録はCloudTrailに残り、削除には7日以上の回復期間がある
シークレットを取得すると、AWS CloudTrailに記録が残ります。コードに直接書いたパスワードと違い、どのロールがいつ読んだかを後から調べられます。
シークレットを削除しても、すぐには消えません。まず取得できない状態になり、7日以上の回復期間が過ぎたあとに削除されます。回復期間中なら元に戻せるので、まだ使っているアプリが見つかっても復旧できます。回復期間なしで削除するCLIの指定もありますが、その場合は元に戻せません。
Secrets ManagerとParameter Storeの違いは、ローテーションと料金
Parameter Storeは、AWS Systems Managerの機能の1つです。名前を付けた設定値を1か所で管理します。保管した値をパラメータと呼びます。種類は、平文のStringとStringList、暗号化するSecureStringの3つです。AMIのIDやエンドポイントのURLのように、秘密ではない値に向いています。
SecureStringを使えば、Parameter Storeでも値を暗号化できます。ただし、自動ローテーションはできません。AWSは、パスワード・APIキー・トークンにはSecrets Managerを勧めています。
| 比べる | Secrets Manager | Parameter Store |
|---|---|---|
| 主に | パスワード、 | URLや |
| 自動ローテーション | できる | できない |
| 暗号化 | 必ず | SecureStringを |
| 料金 | シークレットの | 標準パラメータは |
| 値の | 65,536バイト | 標準は |
2つを組み合わせることもできます。Parameter StoreのAPIで読むときは、シークレットの名前の前に/aws/reference/を付けます。これで、Secrets Managerの値を取得できます。設定値とシークレットを同じ呼び出し方で読みたいときに使います。
Secrets ManagerとParameter Storeの選び方
迷ったときは、値が秘密かどうかと、定期的に変更するかどうかで決めます。次のボタンで条件を選ぶと、向いているサービスと理由が分かります。
- 向いている
もの - Secrets Manager
- 料金
- 1シークレットで
月0.40ドルと、 APIの 呼び出しの 料金 - 理由
- RDSの
マスターユーザーの パスワードは、 マネージドローテーションで 自動で 変えられます。 Lambda関数を 用意する 必要も ありません。 Parameter Storeには ローテーションの 機能が ありません。
- 向いている
もの - Secrets Manager
- 料金
- Secrets Managerの
料金と、 更新に 使う Lambda関数の 料金 - 理由
- APIキーのように
更新の 方法が サービスごとに 違う ものは、 Lambda関数に 更新の 手順を 書きます。 Secrets Managerは、 スケジュールに 沿って その 関数を 呼び出します。 Salesforceや Snowflakeなど、 AWSと 連携している 外部サービスは、 Lambda関数なしで 更新できます。
- 向いている
もの - Parameter Store
(String) - 料金
- 標準パラメータなら
追加料金なし - 理由
- 秘密でない
値に、 Secrets Managerの ローテーションや 暗号化は 不要です。 Parameter Storeなら、 文字列の まま 無料で 保管でき、 環境ごとの 設定値も まとめられます。
- 向いている
もの - Parameter Store
(SecureString) - 料金
- 標準パラメータなら
追加料金なし。 KMSの APIの 呼び出しは、 月2万回を 超えると KMSの 料金が かかる - 理由
- SecureStringを
選ぶと、 値を KMSで 暗号化して 保管できます。 暗号化が 必要な 設定値の 例に、 AWSは サービスの エンドポイントや アカウントIDを 挙げています。
- 向いている
もの - AWSの
勧めは Secrets Manager - 料金
- Secrets Managerは
月0.40ドルから。 SecureStringは 標準パラメータなら 保管の 料金なしで、 KMSの APIの 料金は 別 - 理由
- AWSは、
パスワードや APIキーには Secrets Managerを 勧めています。 費用だけを 優先して SecureStringに 置くこともできますが、 パスワードの 変更は 自分で 行うことになります。
Secrets Managerの料金は、シークレットの数とAPIの呼び出しの回数で決まる
主な費用は、シークレットの保管料金と、APIの呼び出し料金です。次の表は、2026年10月31日にAWSの料金ページで確認した東京リージョンの単価です。
| 項目 | 料金 |
|---|---|
| シークレット | 1つに |
| 別の | 1つの |
| APIの | 1万回に |
| 削除を | かからない |
| 暗号化の | aws/secretsmanagerは |
| ローテーション | Lambda関数を |
たとえばシークレットを10個保管し、APIを月に10万回呼び出すと、4.00ドルと0.50ドルで月4.50ドルです。ローテーションで新しいバージョンができても、バージョンの分の料金は増えません。呼び出しの回数が多いアプリは、取得した値をキャッシュすると処理が速くなり、料金も減らせます。
Parameter Storeの標準パラメータは、追加料金がかかりません。アドバンストパラメータは1つにつき月0.05ドルです。APIの呼び出しにも料金がかかります。SecureStringの暗号化と復号では、KMSのAPIの呼び出しが月2万回の無料枠を超えると、KMSの料金がかかります。
従量課金の考え方は、AWSの料金の記事にまとめています。最新の値は、Secrets Managerの料金ページとSystems Managerの料金ページで確認してください。
参考にした資料
- AWS「What is AWS Secrets Manager?」(サービスの定義、種類ごとに勧めるサービス、料金の考え方)
- AWS「AWS Secrets Manager FAQs」(アプリからの使い方、TLSでの受け渡し)
- AWS「Identity-based policies」(取り出すのに必要な権限)
- AWS「Resource-based policies」(シークレットに付けるポリシー)
- AWS「Use AWS Secrets Manager secrets in AWS Lambda functions」(Lambdaの拡張機能)
- AWS「Rotate AWS Secrets Manager secrets」とAWS「Managed rotation」(ローテーションの定義と2つのやり方)
- AWS「Managed external secrets Partners」(連携している外部サービスの一覧)
- AWS「Password management with Amazon RDS and AWS Secrets Manager」(RDSのマスターユーザーのパスワードの管理)
- AWS「Lambda rotation functions」とAWS「Lambda function rotation strategies」(4つの手順、ユーザーの更新のしかた)
- AWS「Rotation schedules」(更新の間隔)
- AWS「Secret encryption and decryption in AWS Secrets Manager」(エンベロープ暗号化、暗号化される範囲)
- AWS「Get secrets from AWS Secrets Manager」とAWS「Delete an AWS Secrets Manager secret」(CloudTrailの記録、削除と回復期間)
- AWS「AWS Secrets Manager quotas」(値の大きさの上限)
- AWS「AWS Systems Manager Parameter Store」とAWS「Choosing parameter tiers in Parameter Store」(パラメータの種類、値の大きさ)
- AWS「Referencing AWS Secrets Manager secrets from Parameter Store parameters」(Parameter Storeからの参照)
- AWS「AWS Secrets Manager Pricing」とAWS「AWS Systems Manager Pricing」、AWS「AWS Key Management Service Pricing」(料金)
練習問題(全5問)
正解:Lambdaの
アプリは、
正解:RDSが
RDSは
正解:シークレットの
Secrets Managerが
正解:Parameter Storeの
Parameter Storeの
正解:4.50ドル
シークレットは
選んでから「採点する」を押すと、解説つきで答え合わせができます。