【正解】C
【0からの解説】
「エンドツーエンドの転送中暗号化」とは、クライアント → ロードバランサー の区間だけでなく、ロードバランサー → EC2 インスタンス の区間も暗号化することを意味します。つまり HTTPS(TLS)が経路全体で途切れないようにする必要があります。
選択肢 C では、ALB に ACM 発行の証明書を関連付け(クライアント↔ALB を暗号化)、さらに各 EC2 インスタンスにはサードパーティ製(自己管理)の SSL 証明書をインストールして、ALB は HTTPS(ポート 443)でインスタンスへ転送します(ALB↔EC2 も暗号化)。これで全経路が暗号化され、要件を満たします。
ここで重要なのは「ACM のパブリック証明書は、ALB や CloudFront などの AWS サービスに関連付けて使うことはできるが、エクスポートして EC2 に直接インストールすることはできない」という制約です。そのため、EC2 側には別途サードパーティ製/自己管理の証明書が必要になります。
【誤りの選択肢】
A:ACM のパブリック証明書はエクスポートできないため「SSL 証明書をエクスポートして各 EC2 にインストールする」という手順が実現不可能です。よって誤りです。
B:CloudFront でクライアント↔CloudFront は暗号化できますが、ALB を介さずターゲットグループを直接オリジンにすることはできません(CloudFront のオリジンはドメインを指す必要があり、構成として成立しにくい)。また EC2 側の暗号化(エンドツーエンド)が明示されておらず、要件を確実に満たしません。
D:NLB でも TLS 終端は可能ですが、本選択肢は NLB に「サードパーティ証明書をインストール」しつつ EC2 にも証明書を入れる構成で、ACM を使う C と比べ管理が煩雑です。ベストプラクティスとしては ALB + ACM(フロント)+ EC2 個別証明書(バックエンド)の C が適切です。
【参考】
ACM 証明書を使用できるサービス(エクスポート不可の説明)ALB の HTTPS リスナーの作成