TLS 証明書の安全な管理と保管データの暗号化 保険金請求の査定を行う企業が、Windows Server ベースのコンテナアプリケーションを Amazon ECS クラスターで稼働させています。このアプリケーションは外部の与信情報プロバイダの API からデータを取得する際に、クライアント TLS 証明書を提示して通信を暗号化する必要があります。また、取得したデータは高い耐久性を持つストレージに暗号化して保存しなければなりません。証明書はプロバイダの規約により定期的に更新する必要があります。運用上のオーバーヘッドを最小限に抑えて、これらの要件を満たす構成はどれですか。
A AWS App Mesh を導入し、仮想ノードと仮想ゲートウェイの間で TLS 証明書による接続を構成する。データは SSE-KMS で暗号化した Amazon S3 に保存し、IAM ポリシーでアクセスを制御する B Python の暗号化ライブラリで証明書の取り扱いとデータの暗号化を実装した AWS Lambda 関数を自作する。関数のデプロイパッケージと暗号化済みデータを Amazon S3 バケットに保存し、バケットポリシーでアクセスを制御する C AWS KMS のカスタマー管理キーを作成し、EC2 インスタンスプロファイルにそのキーの使用を許可する。証明書はインスタンスのローカルディスクに配置し、暗号化したデータを Amazon S3 に保存してバケットポリシーでアクセスを制御する D TLS 証明書を AWS Secrets Manager のシークレットとして暗号化保存し、自動ローテーションを設定してタスクの実行時に取得する。データは SSE-KMS で暗号化した Amazon S3 に保存し、IAM ポリシーでアクセスを制御する
解説を読む(正解: D) TLS 通信に用いるクライアント証明書や秘密鍵をコンテナイメージやインスタンスのディスクに直接埋め込むと、更新のたびにイメージの再ビルドや配布作業が必要になり、有効期限の管理も人手に依存してしまいます。AWS Secrets Manager は AWS KMS で暗号化した状態でシークレットを保持し、IAM で取得権限を制御でき、ローテーションを自動化できるマネージドサービスです。D では ECS タスクロールに付与した権限で実行時に証明書を取得するため、イメージへの埋め込みが不要になります。保存データは SSE-KMS で暗号化した Amazon S3 に置き、IAM ポリシーでアクセスを制御することで、高い耐久性と保管中の暗号化という要件も同時に満たせます。結果として、転送中と保管中の双方の暗号化要件を最小の運用負荷で実現できます。A の App Mesh はメッシュ内のサービス間通信を制御する仕組みであり、外部のサードパーティ API への接続を保護する用途には合わず、サイドカーの導入や証明書配布の運用負荷も増えます。B は暗号化処理を自前のライブラリで実装するもので、鍵管理と保守の負担が最も大きく、Lambda 関数を S3 に保存するという記述も要件と噛み合いません。C は証明書をインスタンスのローカルディスクに置く前提であり、更新や配布を手作業で行うことになるため、運用オーバーヘッドが最小とは言えません。
データベース認証情報の保管と自動ローテーション 地方銀行のグループ会社が運営する住宅ローン審査アプリケーションでは、Amazon RDS for PostgreSQL への接続文字列が EC2 上の設定ファイルに平文で保存されています。監督官庁の指導により、認証情報は暗号化して保管し、90 日ごとに自動でローテーションしなければならなくなりました。アプリケーションの改修は最小限に抑え、ローテーション用のスクリプトをサーバー上で自前運用することは避けたいと考えています。最も適した方法はどれですか。
A AWS KMS で暗号化した認証情報ファイルを Amazon S3 に置き、インスタンス起動時のユーザーデータで復号して配置する B AWS Systems Manager Parameter Store の String 型パラメータに認証情報を保存し、運用担当者が四半期ごとに手動で値を書き換える C 認証情報を EC2 の環境変数に埋め込んだ AMI を作成し、90 日ごとに AMI を作り直してインスタンスを入れ替える D AWS Secrets Manager に RDS の認証情報をシークレットとして保存し、マネージドのローテーション機能で 90 日ごとにパスワードを自動更新して、アプリケーションは実行時に API でシークレットを取得する
解説を読む(正解: D) AWS Secrets Manager は、データベース認証情報や API キーなどのシークレットを AWS KMS で暗号化して保管し、アプリケーションからは API 経由で取得させるためのマネージドサービスです。最大の特徴は組み込みのローテーション機能で、Amazon RDS をはじめとする対応データベースについては AWS が用意したローテーション用 Lambda 関数を利用でき、指定した間隔でデータベース側のパスワード変更とシークレットの更新を自動で同期して実行します。アクセス制御は IAM ポリシーとリソースベースポリシーで行い、取得操作は AWS CloudTrail に記録されるため、監査要件にも対応できます。
アプリケーションは接続時にシークレットを取得する処理へ変更するだけでよく、ローテーションのスクリプトを自前で運用する必要もないため、D がシナリオの制約に最も適合します。
B の Parameter Store の String 型は暗号化されないうえ (暗号化するなら SecureString が必要)、Parameter Store 自体にデータベースパスワードを自動ローテーションする組み込み機能はなく、手動更新では自動化の要件を満たせません。C は AMI に認証情報を焼き込む設計で、AMI の共有やコピーで認証情報が拡散するリスクがあり、入れ替え作業も重くなります。A は暗号化保管こそできるものの、90 日ごとのパスワード変更とファイル更新の連携をすべて自前で作り込む必要があり、避けたいとされている自前運用そのものです。
データベース認証情報の保管と自動ローテーション オンライン学習プラットフォームを運営する教育系企業では、アプリケーションが Amazon RDS for PostgreSQL に接続する際のマスターパスワードを、EC2 上の設定ファイルに平文で記載しています。年次監査で、認証情報を暗号化して集中管理すること、30 日ごとに自動でローテーションすること、ローテーション時にアプリケーションの再デプロイや手動作業が発生しないことの 3 点を求められました。運用負荷を最も小さくできる構成はどれですか。
A AWS Secrets Manager にデータベース認証情報を保存し、Amazon RDS 向けのマネージドなローテーション機能を 30 日周期で有効化して、アプリケーションは SDK でシークレットを取得する B AWS Systems Manager Parameter Store の SecureString パラメータに保存し、30 日ごとにパスワードを変更して書き戻す Lambda 関数を自作して EventBridge のスケジュールで起動する C パスワードを S3 バケットに SSE-KMS で暗号化して置き、EC2 の起動時にダウンロードして環境変数に展開する D パスワードを暗号化した状態でカスタム AMI に焼き込み、30 日ごとに AMI を再作成して Auto Scaling グループの起動テンプレートを更新する
解説を読む(正解: A) AWS Secrets Manager は、データベースの認証情報や API キーなどのシークレットを AWS KMS で暗号化して集中管理し、IAM ポリシーとリソースベースポリシーでアクセスを制御できるサービスです。最大の特長は、Amazon RDS、Amazon Redshift、Amazon DocumentDB などに対して AWS があらかじめ用意したローテーションの仕組みを提供している点で、ローテーション周期を指定するだけで、新しいパスワードの生成、データベース側への反映、シークレットの新バージョン発行までを自動で実行します。アプリケーションは常に同じシークレット ID を SDK 経由で参照するため、パスワードが変わってもコード変更も再デプロイも不要です。したがって選択肢 A が 3 つの要件をすべて満たし、運用負荷も最小になります。B の Parameter Store は SecureString による暗号化保管こそ可能ですが、ローテーション機能を標準では持たないため、Lambda 関数の実装・テスト・エラー処理・データベース側との同期をすべて自前で作り込む必要があり、運用負荷は明確に大きくなります。C は S3 に認証情報を置く設計で、暗号化はされていても、バケットポリシーの設定ミスによる露出リスクがあり、ローテーションの仕組みも自作となるうえ、起動時にしか読み込まないためローテーション後に再起動が必要になります。D は AMI という不変のイメージに秘密情報を埋め込む典型的なアンチパターンで、AMI の共有やスナップショットの流出で秘密が漏れるうえ、30 日ごとに AMI 再作成とインスタンス入れ替えが必要となり最も手間がかかります。