無限ノック › SOA 練習問題一覧 › 問題
SOAセキュリティとコンプライアンス

EC2 上で動作する Web アプリケーションが Amazon RDS for MySQL に接続しています。現在、データベース認証情報がアプリケーションの設定ファイルにプレーンテキストで記述されており、セキュリティ監査で重大な指摘を受けました。要件は以下の 3 点です。 ・認証情報を安全に保存し 30 日ごとに自動ローテーションすること ・アプリケーションのダウンタイムをゼロにすること ・コードの変更を最小限にすること 最も適切な方法はどれですか。

A
AWS Systems Manager Parameter Store の SecureString パラメータに認証情報を保存し、EventBridge Scheduler で 30 日ごとに Lambda を起動してパスワードを手動ローテーションする
Parameter Store の SecureString は KMS 暗号化ストレージを提供するが、RDS との統合ローテーション機能を持たないため Lambda での自動ローテーションを別途実装する必要があり、Secrets Manager と比べて運用負荷が高く「最小コード変更」要件も満たしにくい。
B
AWS Secrets Manager に認証情報を格納し、Amazon RDS との統合ローテーションを有効化(30 日ごと)することで、Lambda ローテーション関数が自動的にパスワードを更新する
✓ 正解
Secrets Manager の RDS 統合ローテーションは Lambda が新パスワード生成・RDS 更新・シークレット切り替えを自動実行する。アプリ側は SDK で最新値を取得するだけでダウンタイムなしにローテーションでき、3 つの要件をすべて満たす最適な選択肢。
C
Amazon RDS の IAM データベース認証を有効化し、EC2 インスタンスプロファイルに紐づく IAM ロールから発行した一時認証トークンでデータベースに接続する
RDS IAM 認証はパスワード管理を完全に排除できる手法だが、アプリケーションの DB 接続コードを IAM トークン取得・15 分ごとの更新ロジックに書き換える必要があり、「最小コード変更」の要件に合わない。30 日ローテーションという要件の前提とも異なる。
D
AWS KMS で認証情報を暗号化した上で Amazon S3 バケットに保存し、EC2 インスタンスの起動スクリプトで復号して環境変数としてアプリケーションに渡す
KMS + S3 への保存は認証情報管理の標準的なパターンではなく自動ローテーション機能がない。起動スクリプトで環境変数に展開する方式はメモリダンプやプロセスリストからの漏洩リスクがあり、3 つの要件をいずれも満たせない。

解説

AWS Secrets Manager は認証情報の安全な保存と自動ローテーションを提供するマネージドサービスです。Amazon RDS との統合ローテーションを有効化すると、Lambda ローテーション関数が設定した間隔で以下を自動実行します。 ①新しいパスワードを生成してシークレットに保存 ②RDS のユーザーパスワードを新しいパスワードに更新 ③シークレットのステージングラベルを切り替えて新バージョンを有効化 アプリケーション側は Secrets Manager SDK(またはキャッシュライブラリ)を使って最新の認証情報を取得するだけでよく、ダウンタイムなしにローテーションが完了します。コード変更は設定ファイル読み込みから SDK 呼び出しへの置き換えのみです。 選択肢Aの Systems Manager Parameter Store は SecureString で KMS 暗号化を提供しますが、RDS との統合ローテーション機能がなく Lambda 実装を別途作成する必要があり運用負荷が増大する。 選択肢Cの RDS IAM 認証はパスワード管理を排除できる優れた手法ですが、一時トークン(有効期限 15 分)の取得・更新ロジックへの大幅なコード変更が必要で「最小コード変更」要件と相反する。 選択肢Dの KMS + S3 は認証情報保護の標準パターンではなく自動ローテーション機能もなく、環境変数への展開はプロセスリストやログからの漏洩リスクを持つ。

ドメイン別正答率・予想スコアでリアルタイムに実力把握

無限ノックでSOAを徹底対策。全問AI生成のオリジナル問題。

無料で演習を始める →
← SOA の問題一覧に戻る