データベース認証情報の安全な保管とローテーション
あるアプリケーションが Amazon RDS のパスワードを EC2 上の設定ファイルに平文で保持しており、監査で平文保持の禁止と90日ごとのローテーションを指摘されました。ローテーションのたびの再デプロイは避けたいです。運用負荷が最小の方法はどれですか。
解説を読む(正解: D)
アプリケーションが必要とするデータベースのパスワードや API キーを、ソースコードや設定ファイルに平文で埋め込むと、リポジトリの流出や AMI の複製をきっかけに漏えいします。AWS Secrets Manager はこの問題に対処するサービスで、シークレットを AWS KMS で暗号化して保管し、IAM ポリシーでアクセスを制御し、CloudTrail に取得履歴を残します。さらに Amazon RDS などに対しては Lambda 関数によるローテーションが組み込みで用意され、指定した日数ごとにデータベース側のパスワードとシークレットの値を自動で同時更新します。アプリケーションは実行時に API でシークレットを取得するため、ローテーションのたびに再デプロイする必要がありません。したがって D が両方の指摘を満たします。A は Parameter Store の String 型で平文保存となり暗号化の指摘に応えられず、SecureString を使ったとしても認証情報の自動ローテーション機能自体は備わっておらず手作業が残ります。B はインスタンスストアが停止で消える一時ディスクであるうえ、鍵の管理や DB 側のパスワード変更との同期を自前で作り込む必要があり、運用負荷が最大になります。C の AWS KMS は暗号鍵を管理するサービスで、データベースのパスワードそのものを保管する用途には設計されておらず、KMS のキーローテーションは暗号鍵の更新であってアプリケーション認証情報の更新ではありません。
データベース認証情報の保管と自動ローテーション
Amazon RDS データベースの認証情報をアプリケーションから安全に取得できるようにし、さらに定期的な自動ローテーションも行いたいと考えています。最も適したサービスはどれですか。
解説を読む(正解: A)
AWS Secrets Manager は、データベースの接続情報や API キーなどのシークレットを AWS KMS で暗号化して保管し、アプリケーションからは API 呼び出しで取得できるようにするマネージドサービスです。最大の特徴は、Amazon RDS や Amazon Redshift、Amazon DocumentDB などに対する組み込みのローテーション機能で、指定した間隔で Lambda 関数が新しいパスワードを生成しデータベース側にも反映してくれるため、認証情報をコードや設定ファイルに埋め込まずに済み、定期的なローテーションも自動化できます。保管と自動ローテーションの両方を満たす A が正解です。B の Systems Manager Parameter Store は設定値やシークレットを階層的に保存でき、SecureString を使えば暗号化も可能で無料枠もある実用的な選択肢ですが、シークレットの自動ローテーション機能は備えていないため、本要件の後半を満たせません。C の AWS KMS は暗号化キーの作成・管理と暗号化操作を提供するサービスであり、Secrets Manager が内部で利用するものの、シークレットそのものを保管したりローテーションしたりする機能はありません。D の AWS Certificate Manager は TLS/SSL 証明書の発行と自動更新を担うサービスで、データベースのユーザー名とパスワードの管理には使えません。
アプリケーションが使う認証情報の安全な保管
ある開発チームは、データベース接続用のユーザー名とパスワードを暗号化して保管し、アプリケーションから API 経由で取得できるようにし、90 日ごとの自動ローテーションも実現したいと考えています。運用オーバーヘッドを最小限に抑えられる AWS サービスはどれですか。
解説を読む(正解: D)
認証情報をソースコードや設定ファイルに直接書き込むと、リポジトリの共有やログ出力を通じて漏えいするリスクが高く、変更のたびにアプリケーションの再デプロイが必要になります。この問題を解決するのが専用のシークレット管理サービスです。D の AWS Secrets Manager は、データベース認証情報や API キーなどのシークレットを AWS KMS で暗号化して保管し、アプリケーションからは実行時に API 呼び出しで取得させる仕組みを提供します。IAM ポリシーによる細かなアクセス制御、CloudTrail による取得履歴の記録に加え、Amazon RDS などと連携した自動ローテーション機能を標準で備えているため、90 日ごとのローテーションを独自実装せずに実現でき、運用オーバーヘッドを最小化できます。A の AWS KMS は暗号化キーの作成・管理・利用を担うサービスであり、暗号化そのものの基盤ではありますが、パスワード文字列を「シークレットとして格納しローテーションする」機能は持ちません。B の Amazon CloudWatch Logs はログの収集・保管・検索を行う監視サービスであり、認証情報の保管先として設計されておらず、閲覧権限を持つ運用者に平文相当の情報が露出する危険があります。C の AWS Systems Manager OpsCenter は運用上の課題(OpsItem)を一元管理するダッシュボードで、シークレット保管の用途ではありません。Systems Manager で機密値を扱う場合は Parameter Store の SecureString を用いますが、自動ローテーションまで含めた要件では Secrets Manager が適切です。