CloudFrontを使ってVPCのプライベートサブネットのWebコンテンツを配信する(VPCオリジン)

近年、クラウドサービスの利用がますます普及してきています。
特に、ネットワークパフォーマンスやセキュリティを重視する企業にとって、効率的なコンテンツ配信の手段が求められています。
そんな中、Amazon CloudFront は新たに注目すべき機能を追加しました。
Webアプリケーションを全世界へ高速に配信可能とするCloudFrontサービスは、現在まで配信コンテンツ元をインターネットに公開する必要がありました。
今回のアップデートにより、プライベートサブネットでホストされているアプリケーションを配信元とすることが可能となり、一層スムーズにコンテンツ配信が行えるようになります。
これにより、より安全で効率的なアクセスが提供されることが期待できます。
そんな中、Amazon CloudFront は新たに注目すべき機能を追加しました。
Webアプリケーションを全世界へ高速に配信可能とするCloudFrontサービスは、現在まで配信コンテンツ元をインターネットに公開する必要がありました。
今回のアップデートにより、プライベートサブネットでホストされているアプリケーションを配信元とすることが可能となり、一層スムーズにコンテンツ配信が行えるようになります。
これにより、より安全で効率的なアクセスが提供されることが期待できます。
CloudFrontとは?
AWS CloudFrontは、Amazon Web Servicesが提供するコンテンツデリバリーネットワーク(CDN)サービスです。
このサービスを使用することで高速で安全なコンテンツ配信を実現し、ウェブサイトやアプリケーションのパフォーマンスを向上させることが可能です。
CloudFrontは以下のような特徴を持っています。
このサービスを使用することで高速で安全なコンテンツ配信を実現し、ウェブサイトやアプリケーションのパフォーマンスを向上させることが可能です。
CloudFrontは以下のような特徴を持っています。
- グローバルな配信: 世界中のエッジロケーションを使用して、低レイテンシーでコンテンツを配信
- キャッシング: 頻繁にアクセスされるコンテンツをエッジロケーションにキャッシュし、オリジンサーバーの負荷を軽減
- セキュリティ: HTTPS対応、DDoS保護などのセキュリティ機能を提供
- 柔軟性: 静的・動的コンテンツ、ストリーミングメディアなど、様々なタイプのコンテンツに対応
- AWS統合: 他のAWSサービスと簡単に連携可能
構成比較
今回のアップデートにより、プライベートサブネットでホストされているアプリケーションを配信元とすることが可能となりました。
これまでの構成と今回のアップデート後の構成を比較してみましょう。
EC2にてホストされているWebアプリケーションをALBにてサーバ冗長化しつつ、CLoudFrontにてコンテンツ配信する構成で考えてみます。
構成の異なる点は、以下の通りです。
既存の構成ですと、インターネットに公開してしまっているALBに直接利用者がアクセスしてしまうケースが考えられました。
ALBに直接アクセスされてしまいますと、CloudFrontにて配信を高速化使用としているメリットを提供できませんし、セキュリティ対策をCloudFrontとALBの両方に設定する必要があり、コストも手間もかかっていました。
それがALBをインターネット公開不要になると、上記対策のコストと手間も減らすことができて、よりセキュアな環境にすることができるようになりました。
これまでの構成と今回のアップデート後の構成を比較してみましょう。
EC2にてホストされているWebアプリケーションをALBにてサーバ冗長化しつつ、CLoudFrontにてコンテンツ配信する構成で考えてみます。
構成の異なる点は、以下の通りです。
- Application Load Balancerがプライベート限定公開設定でOK
- CloudFrontのVPC Originsという機能を使用する関係上、VPC内にENIが作成されます。
ENIはALBが配置されているサブネットと同じサブネットに作成されます。
既存の構成ですと、インターネットに公開してしまっているALBに直接利用者がアクセスしてしまうケースが考えられました。
ALBに直接アクセスされてしまいますと、CloudFrontにて配信を高速化使用としているメリットを提供できませんし、セキュリティ対策をCloudFrontとALBの両方に設定する必要があり、コストも手間もかかっていました。
それがALBをインターネット公開不要になると、上記対策のコストと手間も減らすことができて、よりセキュアな環境にすることができるようになりました。
動作検証
①EC2を2台作成し、nginxをインストールしておきます。

②ALBを作成します。スキームは内部で作成してください。
また、ターゲットグループには、①で作成したEC2の2台を設定してください。

作成が完了したら、ALBのDNS名を控えておきましょう。

③CloudFrontの「VPC オリジン」を作成します。
名前は適当なものを入力し、オリジンARNにプライベートで作成したALBを設定します。

④CloudFrontを作成します。「Origin domain」には③で作成したVPC オリジンを選択します。

⑤作成されたCloudFrontのディストリビューションドメイン名でアクセスしてみます。

無事にアクセスすることができました。


②ALBを作成します。スキームは内部で作成してください。
また、ターゲットグループには、①で作成したEC2の2台を設定してください。

作成が完了したら、ALBのDNS名を控えておきましょう。

③CloudFrontの「VPC オリジン」を作成します。
名前は適当なものを入力し、オリジンARNにプライベートで作成したALBを設定します。

④CloudFrontを作成します。「Origin domain」には③で作成したVPC オリジンを選択します。

⑤作成されたCloudFrontのディストリビューションドメイン名でアクセスしてみます。

無事にアクセスすることができました。

注意点
- 構成図にも記載されていますが、今回の構成においてもInternet Gatewayが必須となります。
作成されるVPC Originsがインターネット上のCLoudFrontとの通信を行うために必要となるようです。
ただし、ルーティングテーブルへの設定は不要で、VPCにアタッチだけしておけば使用可能になります。 - プライベートで作成したALBはVPC オリジンによって作成されたENIから通信を受けることになります。
なので、ALBにアタッチしているSGには、VPC オリジンのENIからの通信許可を設定する必要があります。
- VPC オリジンにより作成されるENIには「CloudFront-VPCOrigins-Service-SG」というSGが自動作成されて付けられています。
このSGはアウトバウンドが全開放になっていますので、セキュリティ的にはよくありません。
対象のALBのみに向けて開けるようにポートと送信先を絞るのが賢明です。
まとめ
CloudFrontにてVPC オリジンという機能が追加されたことにより直接VPC内のアプリケーションを配信することができるようになりました。
セキュリティ的にもインターネットに公開する範囲は少ない方がよいので、今後のスタンダートな構成となりそうです。
設計や構築作業的にも特に負荷が上がる点も少なく、VPC オリジンを追加してあげるだけで済みそうです。
セキュリティ的にもインターネットに公開する範囲は少ない方がよいので、今後のスタンダートな構成となりそうです。
設計や構築作業的にも特に負荷が上がる点も少なく、VPC オリジンを追加してあげるだけで済みそうです。