AWS認定資格 WEB問題集&徹底解説
クラウドプラクティショナー
AWSサービスの一つであるAWS Secrets Managerはどんな内容なのでしょうか?また、AWS認定資格のクラウドプラクティショナー(CLF)に合格するためには、サービスのどんなポイントを押さえておけばよいのでしょうか?
ここでは、そんなあなたの疑問に回答していきたいと思います
1. サービス概要
AWS Secrets Managerは、データベース認証情報・APIキー・パスワードなどの機密情報(シークレット)を安全に保管・管理・自動ローテーションするフルマネージドサービスです。 アプリケーションのソースコードや設定ファイルへのハードコードを排除し、機密情報の一元管理と自動更新を実現します。
最大の特徴はシークレットの自動ローテーションです。Lambdaローテーション関数が定期的に新しい認証情報を生成・更新し、アプリケーション側の変更なしにパスワードをローテーションできます。 AWS Systems Manager Parameter Storeと異なり、自動ローテーションに特化した追加機能を持ちます。
2. 主な特徴と機能
2.1 シークレットの保管
JSON形式でKey-Valueペアのシークレットを保管します。AWS KMSキー(デフォルトはaws/secretsmanager)で暗号化されます。 シークレットにはARNが割り当てられ、バージョン管理(AWSCURRENT/AWSPREVIOUS等)に対応します。
2.2 自動ローテーション
シークレットの自動ローテーションは Secrets Manager の最重要機能です。
- 組み込みローテーション: Amazon RDS・Aurora・Redshift・DocumentDBのパスワードは、組み込みのLambda関数を使って設定するだけで自動ローテーション可能。
- カスタムローテーション: 独自のLambda関数を作成して任意のシークレット(サードパーティAPI等)のローテーションを自動化。
- ローテーション間隔: 日数を指定して定期ローテーション(例: 30日ごと)または手動起動。
- ゼロダウンタイム: ローテーション中も既存の接続が使えるよう、AWSCURRENT/AWSPENDING/AWSSPREVIOUSのバージョンで新旧を管理。
2.3 ネイティブ統合
- Amazon RDS / Aurora: DBインスタンスのマスターパスワードをSecrets Managerで直接管理・自動ローテーション。
- Amazon Redshift: クラスターのパスワードを自動ローテーション。
- Amazon DocumentDB: DocumentDBクラスターの認証情報を自動ローテーション。
- ECS / Lambda / EC2: ランタイムでSecrets ManagerのAPIを呼び出してシークレットを取得。
2.4 クロスアカウント共有
シークレットのリソースポリシーを設定して、別のAWSアカウントのIAMプリンシパルへのアクセスを許可できます。 一元管理アカウントから複数の環境アカウントへシークレットを共有するパターンに活用できます。
2.5 レプリケーション(マルチリージョン)
シークレットを他リージョンに自動レプリケーション。マルチリージョンアプリケーションがローカルリージョンのSecrets Managerから低レイテンシで認証情報を取得できます。
2.6 バージョン管理
ローテーション時に以下のバージョンラベルで管理されます:
- AWSCURRENT: 現在使用中の最新バージョン。
- AWSPREVIOUS: 一つ前のバージョン(ロールバック用)。
- AWSPENDING: ローテーション中の新バージョン(まだテスト中)。
3. アーキテクチャおよび技術要素
- シークレット保管: Secrets Managerに機密情報を登録→KMSで暗号化して保存。
- アプリケーション取得: Lambda/ECS/EC2がIAMロールのSTS認証情報でSecrets Manager APIを呼び出してシークレットを取得(キャッシュ推奨)。
- 自動ローテーション: 指定日数ごとにEventBridgeがLambdaローテーション関数を起動→新認証情報をDBに設定→Secrets Managerのシークレットを更新。
- VPCエンドポイント: プライベートサブネットからインターネット経由なしにSecrets ManagerへVPCエンドポイント(Interface型)でアクセス可能。
アプリケーション側では毎回APIを呼び出すのではなく、クライアントサイドキャッシュ(TTL付き)を使って呼び出し回数とレイテンシを最適化することが推奨されます。
4. セキュリティと認証・認可
- KMS暗号化: すべてのシークレットはAWS KMSキーで暗号化。デフォルトキー(aws/secretsmanager)またはCMKを使用。
- IAMポリシー: secretsmanager:GetSecretValue等の操作をIAMロールで制御。最小権限の原則で特定シークレットのARNにのみアクセス許可。
- リソースポリシー: シークレット単位でリソースベースポリシーを設定(クロスアカウントアクセス・条件付きアクセスに使用)。
- CloudTrail統合: シークレットへのすべてのAPIコールをCloudTrailに記録して監査証跡を確保。
- VPCエンドポイント: インターネット経由なしでVPC内からアクセス可能。
5. 料金形態
- シークレット保管: 1シークレットあたり月額課金(30日未満は日割り)。
- APIコール: 10,000コールあたりの課金(GetSecretValue等)。
- レプリケーション: レプリカシークレット1つあたり元シークレットと同額の月額課金。
SSM Parameter Store(無料枠あり)より高コストですが、自動ローテーション機能と組み込みのDBインテグレーションが含まれます。
6. よくあるアーキテクチャ・設計パターン
- RDS自動ローテーション: RDSのマスターパスワードをSecrets Managerで管理。30日ごとに自動ローテーション。アプリケーションはDBパスワードをハードコードせず、毎回Secrets Manager APIから取得(キャッシュあり)。
- Lambdaのシークレット取得: Lambda関数の環境変数にシークレットのARNを設定→起動時にGetSecretValueで取得→グローバル変数にキャッシュして再利用(Lambda Extensions使用も可)。
- マルチアカウントのDB認証情報共有: セキュリティアカウントのSecrets Managerにシークレットを保管→リソースポリシーで各環境アカウントへのアクセスを許可。
7. 設定・デプロイ手順(ハンズオン例)
- Secrets Managerコンソールで「新しいシークレットを保存」→シークレットタイプ(RDS DBパスワード等)を選択。
- シークレット名(例: prod/myapp/dbpassword)・KMSキー・初期値を設定。
- 自動ローテーションを有効化→ローテーション間隔(日数)・Lambdaローテーション関数(組み込みまたはカスタム)を設定。
- アプリケーション(Lambda等)のIAMロールにsecretmanager:GetSecretValueのポリシーを付与(リソースARN指定)。
- アプリコードで `boto3.client('secretsmanager').get_secret_value(SecretId='...')` を呼び出して認証情報を取得。
8. 試験で問われやすいポイント
8.1 Secrets Manager vs Parameter Store の使い分け
- Q: DBパスワードを自動ローテーションしたい場合はどちらを使うか?
A: AWS Secrets Manager(組み込みの自動ローテーション機能あり)。Parameter StoreにはネイティブのDB自動ローテーション機能はない。 - Q: コストを抑えて機密情報を保管するには?
A: SSM Parameter Store(Standard: 無料枠10,000パラメータ)。自動ローテーション不要ならParameter Storeが経済的。
8.2 自動ローテーション
- Q: Secrets Managerの自動ローテーションの仕組みは?
A: Lambdaローテーション関数が新認証情報を生成→DBに設定→シークレットを更新。AWSPENDING→AWSCURRENT→AWSPREVIOUS のバージョン管理でゼロダウンタイム。 - Q: RDS以外のサービス(例: Redshift)でも自動ローテーションはできるか?
A: はい。RedshiftとDocumentDBも組み込みのローテーションテンプレートが提供される。
8.3 セキュリティ
- Q: Secrets Managerのシークレットはどのように保護されるか?
A: AWS KMSで暗号化(aws/secretsmanagerデフォルトキーまたはCMK)。アクセスはIAMポリシーとリソースポリシーで制御。CloudTrailで全APIコールを監査。
8.4 クロスアカウント・マルチリージョン
- Q: 別アカウントからSecrets Managerのシークレットにアクセスするには?
A: シークレットのリソースポリシーで他アカウントのIAMプリンシパルへのGetSecretValue権限を付与する。 - Q: マルチリージョンアプリでSecrets Managerを使う場合は?
A: レプリケーション機能で他リージョンにシークレットを複製。各リージョンのアプリがローカルエンドポイントから低レイテンシで取得可能。
8.5 アプリケーションの実装
- Q: アプリがSecrets Managerを呼び出すたびにAPIコール料金が発生するが、どう最適化するか?
A: クライアントサイドキャッシュ(TTL付き)を実装する。AWS Secrets Manager Agent(Lambda Extensions)を使うとコンテナやLambdaで効率的にキャッシュ可能。