type
status
date
slug
summary
tags
category
icon
password
理論
AWS Systems Manager Parameter Store と Secrets Manager の違い
項目 | AWS Systems Manager Parameter Store | AWS Secrets Manager |
主な用途 | 設定データや機密情報の管理 | データベースやAPIキーなど、機密情報の管理 |
ローテーション機能 | 手動またはカスタム実装が必要 | 自動ローテーション機能を標準で提供 |
コスト | 無料プランあり(基本機能は無料) | 有料(機能が豊富な分、コストがかかる) |
統合性 | SSMエージェントを通じてEC2やLambdaなどと連携が簡単 | 機密情報を簡単に取得するAPIやSDKを提供 |
暗号化 | AWS KMSで暗号化可能 | デフォルトでKMS暗号化 |
ターゲットユースケース | 環境変数や設定データ、簡易なパスワードの管理 | データベース認証情報や重要なキーの安全な保存 |
アクセス制御 | IAMで可能 | IAMで可能 |
簡単な違いまとめ
- Parameter Store: 設定データや簡単なパスワードの管理。コストを抑えたい場合に適している。
- Secrets Manager: 機密情報の管理がメイン。ローテーションが必要な場合や強力なセキュリティが必要なケースに最適。
AWS Secrets Manager には自動ローテーション機能が標準で提供されています。これにより、保存されているシークレット(例えば、データベースのパスワードなど)を定期的に自動で変更することができます。
自動ローテーションの仕組み
- Secrets Manager はシークレットを保存するだけでなく、それを定期的に変更(ローテーション)する機能も持っています。
- ローテーションの際には、AWS Lambda 関数を使用してパスワードを更新し、その変更をアプリケーションやサービスに反映させます。
- ローテーションの頻度(例えば90日ごと)や、ローテーション処理を行うためのLambda関数も設定することができます。
自動ローテーションの設定手順
- シークレットの作成: AWS Secrets Managerでシークレット(例えば、RDSのデータベースのパスワード)を作成します。
- ローテーションの有効化: 作成したシークレットに対して、ローテーションを有効化します。この際、Lambda関数を指定して、どのようにパスワードをローテーションするかを設定します。
- ローテーションのスケジュール設定: ローテーションの頻度を設定します(例:90日ごと)。
- Lambda関数によるパスワード更新: Lambda関数が実行されることで、シークレットが自動的に更新され、新しいパスワードが適用されます。

実践
Secrets Managerにシークレットを保存
マネージメントコンソールより新規にシークレットを作成し、対象のRDSを指定し、「ユーザ名」と「パスワード」を保存します。

RDSの「ユーザ名」と「パスワード」を入力します。


対象のRDSインスタンスを選択します。
今回は、わかりやすいように、まず「自動ローテーション無効」で作成します。

自動ローテーションを有効にする
作成したシークレットの「ローテーションの編集」から、自動ローテーションを有効にします。
ローテーションスケジュールの設定
ローテーションウィンドウでの指定には、cronおよびrate式をサポートしています。
今回は下記の内容で設定し、「毎日7:00:00 UTC」にローテーションされるように設定します。
項目 | 設定値 |
スケジュール式 | cron(0 7 * * ? *) |
ウィンドウ期間 | 1h |
すぐにローテーション | OFF |
上記を設定します。

<注意点>
- Secrets ManagerのタイムゾーンはUTCです。
- cron式のminute、およびyearは0しか設定できません。
- これはローテーションウィンドウが正時に開始されるため、および1年を超える設定ができないためです。
- すぐにローテーションはネットワーク次第で失敗してしまいますので[OFF]にしておくのがオススメです。
ローテーション関数の設定
ローテーション関数は、あらかじめ用意されているローテーション関数のテンプレートに基づいたローテーション関数を自動作成するか、作成済みの自作のローテーション関数が利用可能です。
項目 | 内容 |
ローテーション関数を作成 | ローテーション関数を自動作成 |
アカウントからローテーション関数を使用 | 作成済みローテーション関数を利用 |
「個別の認証情報を使用してこのシークレットをローテーション」は「いいえ」を選択します。
こちらは後述の「ローテーション戦略」の指定です。今回は一般的な「シングルユーザーのローテーション戦略」をとります。
項目 | 内容 |
いいえ | シングルユーザーのローテーション戦略 |
はい | 交代ユーザーのローテーション戦略 |
設定が完了するとあらかじめ用意されているCloudFormationテンプレートからLambdaにローテーション関数が自動生成されます。

ここで作成されるlambda関数は、「VPC、サブネット、セキュリティグループ」がシークレット作成時に指定したRDSから引き継がれます。

<注意点>
- lambda関数のSGからRDSのSGにアクセス許可されていること。
- プライベートサブネットであればPrivateLinkやNATを経由してSecrets Managerにアクセス可能であること。
- RDSと同じ場所に作成されることに抵抗がある場合は、作成後に移動しましょう。
- NATがない環境では、意外とハマりポイントなのでご注意です。
これでローテーションの設定は完了です。
一問道場
質問 #26
トピック 1
セキュリティエンジニアは、既存のアプリケーションがAmazon S3内の暗号化ファイルからAmazon RDS for MySQLデータベースの認証情報を取得していることを確認しました。次のアプリケーションバージョンでは、セキュリティを向上させるために以下の設計変更を実装したいと考えています:
- データベースは、強力でランダムに生成されたパスワードを使用し、AWSが管理する安全なサービスに保存されなければならない。
- アプリケーションリソースはAWS CloudFormationを使用してデプロイされなければならない。
- データベースの認証情報は90日ごとにローテーションされなければならない。
ソリューションアーキテクトは、アプリケーションをデプロイするためのCloudFormationテンプレートを作成します。
セキュリティエンジニアの要件を満たし、運用上の負担を最小限に抑えるCloudFormationテンプレートに指定するリソースはどれですか?
A.
AWS Secrets Managerを使用してデータベースパスワードをシークレットリソースとして生成します。
AWS Lambda関数リソースを作成してデータベースパスワードをローテーションします。
Secrets ManagerのRotationScheduleリソースを指定して、データベースパスワードを90日ごとにローテーションします。
B.
AWS Systems Manager Parameter Storeを使用してデータベースパスワードをSecureStringパラメータタイプとして生成します。
AWS Lambda関数リソースを作成してデータベースパスワードをローテーションします。
Parameter StoreのRotationScheduleリソースを指定して、データベースパスワードを90日ごとにローテーションします。
C.
AWS Secrets Managerを使用してデータベースパスワードをシークレットリソースとして生成します。
AWS Lambda関数リソースを作成してデータベースパスワードをローテーションします。
Amazon EventBridgeのスケジュールされたルールリソースを作成して、90日ごとにLambda関数のパスワードローテーションをトリガーします。
D.
AWS Systems Manager Parameter Storeを使用してデータベースパスワードをSecureStringパラメータタイプとして生成します。
AWS AppSync DataSourceリソースを指定して、データベースパスワードを自動的に90日ごとにローテーションします。
解説
この問題は、セキュリティ要件を満たしながら、最小限の運用負荷でデータベースのクレデンシャルをローテーションする方法を求めています。以下に各選択肢の解説を行います。
A. AWS Secrets Manager と RotationSchedule の組み合わせ
- Secrets Manager は、AWS が提供するフルマネージドなシークレット管理サービスです。強力なランダムなパスワードの生成、保存、管理、ローテーションをサポートします。
- RotationSchedule リソースを使用することで、Secrets Manager が自動的にパスワードをローテーションします。AWSはLambda関数を利用して、パスワードを自動的にローテーションします。
- この方法は、運用負荷が非常に少なく、Secrets Managerが自動でパスワードの管理とローテーションを行うため、セキュリティ要件を満たし、非常に効率的です。
B. AWS Systems Manager Parameter Store と RotationSchedule の組み合わせ
- Systems Manager Parameter Store は、シークレット管理のために使えるもう1つのサービスですが、Secrets Managerよりもシンプルな機能を提供します。
- SecureString パラメータタイプを使用して、暗号化されたパラメータを保存しますが、RotationScheduleは直接サポートしていません。このオプションでは、パスワードのローテーションを実行するためにAWS Lambda関数を手動で作成する必要があり、そのため運用負荷が増加します。
- Parameter Store を使った場合、Secrets Managerのような自動ローテーション機能がないため、運用負荷が高くなります。
C. AWS Secrets Manager と EventBridge によるスケジュール管理
- AWS Lambda を使ってパスワードをローテーションし、EventBridge を利用して90日ごとにLambda関数をトリガーする設定を行います。
- EventBridge によるスケジュールトリガーは可能ですが、Secrets Manager に組み込まれている RotationSchedule 機能を使えば、同じ結果をより簡単に得ることができます。したがって、運用負荷は高くなり、無駄な手間がかかる可能性があります。
D. AWS Systems Manager Parameter Store と AWS AppSync
- AppSync はGraphQLベースのデータ操作を提供するサービスであり、パラメータのローテーションには通常使用しません。Parameter Storeのパラメータを自動的にローテーションするためには、通常AWS Lambdaを使用しますが、AppSyncはその役割には適していません。
- この方法は、運用負荷が高く、不適切なリソースの選択であり、正しい選択肢ではありません。
結論
最も効率的で運用負荷が少ないのは 選択肢A です。AWS Secrets Manager と RotationSchedule を利用すれば、パスワードの生成、保存、ローテーションがすべて自動で行われるため、セキュリティ要件を満たしつつ、管理が簡単になります。
- 作者:みなみ
- 链接:https://tangly1024.com/資格勉強/164d7ae8-88e2-8064-965e-fcf5787961cb
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。
相关文章