SAA / ドメイン1 セキュアなアーキテクチャの設計
AWS Secrets Manager
は、データベースパスワード、 キー、OAuth トークンなどのシークレットを安全に保存、取得、ローテーションするサービスです。
SAA では、認証情報をコード、、環境変数、ユーザーデータへ埋め込まず、実行時に ロールで取得する設計が重要です。
概要
シークレットは で暗号化され、 とリソースポリシーでアクセスを制御します。アプリケーションは またはライブラリから必要時に値を取得します。
主要技術
①安全な保存と取得
アプリケーションにはではなく ロールを付与し、必要なシークレットだけを取得できるを設定します。 によって 操作を監査できます。
別アカウントからシークレットを読ませるには、シークレットのリソースポリシーと相手側の IAM ポリシーの両方で許可します。さらに、AWS managed key (aws/secretsmanager) はで使えないため、シークレットをで暗号化し、そのキーポリシーで相手のロールに kms:Decrypt を許可します。
の環境変数や のタスク定義の環境変数に値を直接書くと、保存時に暗号化されていても、関数やタスク定義の設定を参照できる利用者には値が見えます。値そのものは か Parameter Store の SecureString に置き、実行時に取得させるか、ECS ではタスク定義の secrets で参照させます。
②自動ローテーション ⚠️ 頻出
は対応データベースの認証情報を定期的に変更できます。一般的なシークレットでは ローテーション関数を使い、新旧認証情報の切り替えを自動化します。
のタスク定義の secrets で参照した値は、の起動時に環境変数として注入されます。ローテーションで値が変わっても実行中のタスクには反映されないため、新しいタスクへ入れ替える必要があります。再起動せずに新しい値を使わせたい場合は、アプリケーションが実行時に Secrets Manager の (またはライブラリ) で取得します。
③レプリケーションと可用性
シークレットを別へレプリケートし、災害対策や複数リージョンアプリケーションで利用できます。アプリケーション側では取得失敗やローテーションを考慮し、値を適切にします。
④Parameter Storeとの違い
| 要件 | Parameter Store | |
|---|---|---|
| シークレットの保存 | 対応します | SecureString で対応します。 |
| 組み込みのローテーション | 主用途です | 標準機能の中心ではありません。 |
| 設定値の階層管理 | 可能ですが主目的ではありません | 主用途です。 |
| データベース認証情報 | 適しています | 手動運用を組み合わせます。 |
試験対策
| 問題文のキーワード | 選ぶ機能 |
|---|---|
| DB パスワードを自動更新 | のローテーション |
| から安全に取得 | ロール + Secrets Manager |
| を管理 | |
| 一般設定値を階層管理 | Parameter Store |
「ハードコードしない」「自動ローテーション」「監査可能」が Secrets Manager の重要な判断軸です。