ある企業が AWS 上で稼働する Amazon ECS コンテナの Secret 管理を改善したいと考えています。現在、データベースのパスワードや API キーなどの機密情報がコンテナの環境変数としてプレーンテキストでタスク定義に埋め込まれています。最も安全で運用しやすい方法に移行するには、どのアプローチが適切ですか?
- A. シークレットを S3 バケットに保存し、コンテナの起動スクリプトで S3 から取得する
- B. 環境変数をBase64エンコードしてタスク定義に埋め込む
- C. ECS クラスターを暗号化された EFS にマウントし、シークレットをファイルとして保存する
- D. AWS Secrets Manager または Systems Manager Parameter Store(SecureString)にシークレットを格納し、ECS タスク定義の「secrets」フィールドで参照する。ECS はタスク起動時に自動的にシークレットを取得してコンテナに環境変数として注入する。タスクの IAM ロールに Secrets Manager または SSM への読み取り権限を付与する
解答と解説を見る
正解: D
ECS タスク定義の secrets フィールドで Secrets Manager または SSM Parameter Store の ARN を参照することで、ECS がタスク起動時に自動的にシークレットを取得してコンテナに注入します。シークレットはタスク定義には保存されず、IAM ロールによるアクセス制御と Secrets Manager の自動ローテーション機能も活用できます。 B: Base64 エンコードは暗号化ではなくエンコードであり、容易にデコードできます。セキュリティの向上にはなりません。 A: S3 からの取得も機能しますが、起動スクリプトのカスタム実装が必要で、ECS ネイティブの secrets 統合より管理が複雑です。また S3 のアクセスポリシーとライフサイクル管理も別途必要です。 C: EFS へのファイル保存は可能ですが、ECS の secrets フィールドのネイティブ統合より複雑で、Secrets Manager の自動ローテーション機能も利用できません。
📚 関連サービスの解説: AWS Secrets Manager ・ AWS Systems Manager