【正解】D
【0からの解説】
CloudWatch Logsには「サブスクリプションフィルター(subscription filter)」という機能があり、ロググループに届いたログをリアルタイムでAmazon Data Firehose(旧Kinesis Data Firehose)などへ転送できます。FirehoseはそのログをS3バケットへ配信でき、配信時にサーバー側暗号化(顧客管理のKMSキー = 企業が管理するキー)を適用できます。
クロスアカウントの集中ロギングでは、各ソースアカウント側に「ログを集める出口」を置く構成が定石です。Dは、中央ログアカウントに集約先のS3バケットを1つ作り、各ソースアカウントにFirehoseストリームとサブスクリプション(サブスクリプションフィルター)を作成して、各アカウントのCloudWatch Logsを中央のS3へ流し込みます。Firehoseの配信設定でKMS暗号化を有効にすれば「企業が管理するキーで暗号化」も満たせます。マネージドサービス(CloudWatch Logsサブスクリプション+Firehose+S3)の組み合わせで自前のETL/処理コードが不要なため、運用オーバーヘッドが小さく、要件に最も適合します。
【誤りの選択肢】
A:CloudWatchの「ソースアカウント/モニタリングアカウント(CloudWatch cross-account observability)」の話に近いが、これはメトリクス/ログのクロスアカウント“閲覧”の仕組みであり、「企業管理キーで暗号化した中央S3への集約」という本問の要件(保存・暗号化)を直接満たす構成ではない。記述も実際の機能と噛み合わない。
B:サブスクリプションとFirehoseを“中央アカウント側だけ”に作る構成だが、各ソースアカウントのロググループから中央アカウントのFirehoseへ流すには、ソースアカウント側にクロスアカウント送信先(送信先=destination)とサブスクリプションフィルターが必要。記述の「ARNをParameter Storeに保存して各プロジェクトが送る」だけでは配線が成立せず、回りくどく実装も曖昧。
C:各アカウントにS3、さらにOpenSearch+SQS+自前Lambdaで処理という構成は、コンポーネントが多く自前コードの保守が必要で運用オーバーヘッドが最大級。要件(中央集約・暗号化)に対して過剰。
D:各アカウントのCloudWatch LogsサブスクリプションからFirehose経由で中央S3へ集約し、KMSで暗号化。マネージドサービス中心で最小の運用オーバーヘッド。
【参考】
Real-time processing of log data with subscriptionsCross-account log data sharing with subscriptionsData protection (encryption) in Amazon Data Firehose