ITの教科書検索
入門読了 約10分

Secrets Managerとは ― Parameter Storeとの違い

DBのパスワードやAPIキーをコードに書かず、暗号化して保管し自動で更新できるのがSecrets Managerです。Parameter Storeとの違いと選び方も分かります。

目次
  1. AWS Secrets Managerとは
  2. シークレットに入れるもの
  3. アプリが値を取り出す流れ
  4. 自動ローテーション
  5. KMSによる暗号化
  6. 取得の記録と削除
  7. Parameter Storeとの違い
  8. 条件ごとの選び方
  9. Secrets Managerの料金
  10. 練習問題

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のロールを使います。アクセスキーをシークレットに保管しません。

秘密情報の種類ごとに、AWSが勧めるサービス(Secrets Managerユーザーガイド、2026-10-31時点)
保管するもの使うサービス
データベースのパスワード、APIキー、OAuthトークンSecrets Manager
AWSを操作するための認証情報AWS IAM
データを暗号化する鍵AWS KMS
SSHの鍵EC2 Instance Connect
秘密鍵と証明書AWS Certificate Manager

アプリは、IAMロールの権限で実行時に値を取り出す

アプリのコードには、パスワードの代わりに、シークレットを取得する処理を書きます。取得の権限は、アプリが使うIAMロールに与えます。LambdaならLambdaの実行ロール、EC2ならインスタンスに付けたロールです。

必要な権限は、secretsmanager:GetSecretValueです。対象のシークレットを絞って許可すれば、ほかのアプリのパスワードは読めません。シークレットの側にリソースポリシーを付けて、読み取れる相手を決めることもできます。自分で作ったKMSキーで暗号化したシークレットを読むには、kms:Decryptの権限も必要です。

アプリコードに値なしIAMロール①値を要求③値を返す④接続Secrets Manager暗号化した値Amazon RDS②データキーを復号AWS KMS
アプリはIAMロールの権限で値を要求します。Secrets ManagerはKMSを使って値を復号し、アプリに返します。アプリは受け取った値でRDSに接続します。

値は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が付きますが、図では省きます。

手順古い値新しい値DB1 作るCURRENTPENDING古い2 DBを変更CURRENTPENDING新しい3 試すCURRENTPENDING新しい4 切り替えPREVIOUSCURRENT新しい
色の付いたラベルが、その手順で変わる部分です。アプリが取り出すのはCURRENTの付いた値で、切り替わるのは手順4です。

手順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の違い(各サービスのユーザーガイドと料金ページ、2026-10-31時点)
比べる点Secrets ManagerParameter Store
主に保管するものパスワード、APIキーなどの秘密情報URLやAMIのIDなどの設定値全般
自動ローテーションできるできない
暗号化必ずKMSで暗号化するSecureStringを選んだときだけ、KMSで暗号化する
料金シークレットの数とAPIの呼び出しの回数で決まる標準パラメータは追加料金なし
値の大きさの上限65,536バイト(64KB)標準は4KB、アドバンストは8KB

2つを組み合わせることもできます。Parameter StoreのAPIで読むときは、シークレットの名前の前に/aws/reference/secretsmanager/を付けます。これで、Secrets Managerの値を取得できます。設定値とシークレットを同じ呼び出し方で読みたいときに使います。

Secrets ManagerとParameter Storeの選び方

迷ったときは、値が秘密かどうかと、定期的に変更するかどうかで決めます。次のボタンで条件を選ぶと、向いているサービスと理由が分かります。

保管したいものと条件を選ぶ
向いているもの
Secrets Manager
料金
1シークレットで月0.40ドルと、APIの呼び出しの料金
理由
RDSのマスターユーザーのパスワードは、マネージドローテーションで自動で変えられます。Lambda関数を用意する必要もありません。Parameter Storeにはローテーションの機能がありません。

Secrets Managerの料金は、シークレットの数とAPIの呼び出しの回数で決まる

主な費用は、シークレットの保管料金と、APIの呼び出し料金です。次の表は、2026年10月31日にAWSの料金ページで確認した東京リージョンの単価です。

AWS Secrets Managerの料金(2026-10-31時点、AWS Secrets Managerの料金ページとユーザーガイド)
項目料金
シークレット1つにつき月0.40ドル。1か月に満たない分は時間で按分する
別のリージョンの複製1つのシークレットとして、同じく月0.40ドル
APIの呼び出し1万回につき0.05ドル
削除を予定したシークレットかからない
暗号化の鍵aws/secretsmanagerは無料。自分で作ったKMSキーはKMSの料金がかかる
ローテーションLambda関数を使うと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の料金ページで確認してください。

参考にした資料

練習問題(全5問)

Q1LambdaのアプリがSecrets Managerからパスワードを取り出せるようにする。最初に必要な設定はどれ?
Q2RDSのマスターユーザーのパスワードをSecrets Managerに管理させたときの説明として正しいものはどれ?
Q3シークレットのうち、KMSで暗号化されないものはどれ?
Q4エンドポイントのURLを、秘密の情報ではない設定値としてアプリの外に置きたい。向いているものはどれ?
Q5シークレットを10個保管し、APIを月に10万回呼び出す。東京リージョンの1か月の料金はいくら?(2026年10月31日時点の単価)

選んでから「採点する」を押すと、解説つきで答え合わせができます。

関連記事

AWSの記事を続けて読む

AWS 全38本中26本目