Amazon CloudFront が VPC オリジンをサポートしたので、検証してみました。
アップデート概要
- CloudFront ディストリビューションを通じて、プライベートサブネットに配置した、ALB、NLB、 EC2 インスタンスへアクセス可能になる
→パブリックIPアドレスを持たなくなるため、セキュリティリスクの低減とコスト削減につながる
VPCとALBを作成
以下のVPCを作成します。
プライベートサブネットを2つ持ち、インターネットゲートウェイをアタッチしています。

内部ALBを作成します。

ターゲットタイプはインスタンスを選択します。

プライベートサブネットにはApache2を起動したEC2インスタンスを配置しておきます。

Apache2の設定として、以下のコマンドでindex.htmlを作成しておきます。
# echo "<html><head><title>Test Page</title></head><body>Hello World</body></html>" > /var/www/html/index.html # curl localhost:80 <html><head><title>Test Page</title></head><body>Hello World</body></html>
ターゲットグループにはそのEC2インスタンスを登録します。

リスナールールで先ほどのターゲットグループを指定します。

ALBのセキュリティグループは、CloudFrontのマネージドプレフィックスリストからの80/HTTPインバウンドを許可します。

EC2インスタンスのセキュリティグループは、ALBのセキュリティグループからの80/HTTPインバウンドを許可します。

ここまでの設定でうまくいけば、ALBのリソースマップから正常性確認ができます。

CLoudFrontを設定する
CloudFrontの画面から「VPCオリジン」を作成します。
オリジンARNは、事前準備で作成したALBを選択します。

ネットワークインターフェースを確認してみると、各プライベートサブネットにCloudFrontが管理するENIが作成されていることが分かります。

ディストリビューションのオリジンを先ほど作成したVPCオリジンを選択して作成します。


アクセスしてみる
CloudFrontのディストリビューションドメイン名にアクセスすると、プライベートサブネットに配置したEC2インスタンスで稼働しているApache2に接続できました。

まとめ
VPCオリジンを使うことで、簡単にCloudFront経由でプライベートサブネットのコンテンツを提供することができました。