Amazon CloudFrontのVPC オリジンを利用し、内部向けApplication Load Balancer宛の通信をhttpsにする

記事タイトルとURLをコピーする

こんにちは、CS5課の松井(紀)です。

先日、Amazon CloudFrontの新機能としてVPC オリジンが発表されました。
VPC オリジンによるアクセス制限

CloudFront を使用すると、仮想プライベートクラウド (VPC) プライベートサブネットでホストされているアプリケーションからコンテンツを配信できます。プライベートサブネット内のアプリケーションロードバランサー (ALB)、ネットワークロードバランサー (NLB)、および EC2 インスタンスを VPC オリジンとして使用できます。

今までAmazon CloudFront(以降CloudFront)のオリジンとしてApplication Load Balancer(以降ALB)を設定する場合は、パブリックサブネットに配置する必要がありましたが、プライベートサブネット配置された内部のALBをオリジンとして配置出来るようになりました。

今回は、内部ALBをオリジンに配置した際の CloudFront から ALB の通信を https にする方法を検証してみました。

これまでの構成

ALBをパブリックサブネットに配置する構成です。
パブリックに配置されているため、設定ミスによって意図せず外部からアクセスされるセキュリティリスクがあったり、ALBへの接続をCloudFrontのみに制限したい場合はアクセス制御を考慮するという管理の負荷がありました。

  • カスタムヘッダの追加による制御
  • Origin Access Identityによる制御

詳細は下記ブログをご覧ください。 blog.serverworks.co.jp

新しい構成

ALBがプライベートサブネットに配置出来るようになったので、外部からのアクセスの考慮が不要になりました。
またCloudFront から ALB の通信を https にする場合、以前の構成ではALB用のパブリックホストゾーンのレコードと証明書の登録が必要でした。
新しい構成の場合は、Route53に登録するレコードや登録する証明書は何を登録すればいいのでしょうか。検証してみました。

先に結論

  • 東京リージョンにおいて証明書は、バージニア北部と同じレコードで登録する必要がある
  • ALBのRoute53へのレコード登録は不要

検証

Route53

取得したドメインをパブリックホストゾーンで登録します。

取得したドメインをRoute53に登録する方法は以下を参照ください。 blog.serverworks.co.jp

東京リージョンとバージニア北部にそれぞれ同じドメイン名のACMを登録します。 ワイルドカードでもいいです、今回は検証のためにあえてcloudfront.xxxxxx.netを東京とバージニア北部にそれぞれ作りました。

Route53でレコードを作成し、ステータスが成功となっていることを確認します。

内部ALB

スキームで内部を選択、プライベートサブネットに配置します。

プロトコルHTTPSを選択します

デフォルト SSL/TLS サーバー証明書として、さきほど東京リージョンで登録したACMを登録します

疎通確認のため、固定レスポンスを設定します

Cloudfront

VPCオリジンを作成します

VPCオリジンを作成することで、内部ALBと同じサブネットにENIが自動生成されました。

ディストリビューションを作成します。

さきほど作成したVPCオリジンを選択します。

代替ドメイン名にレコード名を記載し、ACMで登録した証明書を関連付けます。

セキュリティグループ

自動生成されたセキュリティーグループには、インバウンドルールは何も設定されておりませんでした。 なお、CloudfrontからのIPをインバウンドルールで追加する必要はありません。

内部ALBに設定されているセキュリティグループのインバウンドルールを編集します。

さきほど自動生成されたVPCオリジンのENIからの接続を許可するようにルールを追加します。

Route53レコード追加

cloudfrontのAレコードを追加します。

動作確認

アクセスを試みたところ、httpsでアクセスが出来ることを確認しました。

アクセスログ

ALBのアクセスログを確認したところ、GET https://cloudfront.xxxxxxxxxxxxx.net でALBまで到達しています

https 2024-12-12T10:17:36.344770Z app/alb-https/737d65444e1094df x.x.x.x:17152 - -1 -1 -1 200 - 891 177 "GET https://cloudfront.xxxxxxxxxxxxx.net:443/ HTTP/1.1" "Amazon CloudFront"

CloudfrontのドメインでALBまで到達しているので、ALBのレコードが不要で東京に同じ証明書を作ればつながることが分かりました。

終わりに

VPCオリジンを利用し、Cloudfront→ALBへの通信をhttpsで実装することが出来ました。
もともと、ALB側にはPrivate hostzoneの登録が必要と思っていましたが、なんとレコード登録は不要でした。
レコード登録不要でCloudfront→ALB間をhttpsできるようになったのは嬉しいアップデートですね。
CloudfrontからALBまでの通信はインターネットを経由するので、通信を暗号化をしたいという要望が多いと思います、構築時の参考にしていただければ幸いです。

松井 紀樹(記事一覧)

CS5課課長1年目

オンプレサーバーの修理屋からAWSのインフラ構築へジョブチェンジ

2024 Japan AWS All Certifications Engineers

筋トレとサウナが趣味。大胸筋が歩いてる