まえがき

cloudpackサポートです。
下記のような構成で、ユーザーから ALB へ直接アクセスさせたくない、EC2 へも ALB からしかアクセスさせたくない場合があるかと思います。

今まで、EC2・ALB へのアクセスを CloudFront を経由したアクセスのみに制限する場合は、
以下の方法で各経路を制限することで実現する方法が一般的に用いられてきました。

  1. CloudFront – ALB 間 : カスタムヘッダーとリスナールールで制限
  2. ALB – EC2 間 : セキュリティグループで制限

今回ご紹介する CloudFront 用のマネージドプレフィックスリストを利用することで、
カスタムヘッダーやリスナールールを使用する必要なく、馴染みのあるセキュリティグループの設定のみで CloudFront と ALB 間の制限を実現ができます。

CloudFront のマネージドプレフィックスリストについて

2022 年 2 月 7 日に マネージドプレフィックスリストが CloudFront に対応しました。

・Amazon VPC で Amazon CloudFront 用に AWS が管理するプレフィックスリストのサポートを開始
https://aws.amazon.com/jp/about-aws/whats-new/2022/02/amazon-cloudfront-managed-prefix-list/

これまでも ip-ranges.json で公開されている CloudFront の IP アドレス範囲のみをセキュリティグループへ許可するといった方法もありました。
しかしながら、CloudFront の IP アドレス範囲は非常に多くあり AWS 側で不定期で変更になるためお客様で管理することが大変でした。

AWS が管理する CloudFront 用のマネージドプレフィックスを利用すれば、セキュリティグループへは1回のルール登録操作で CloudFront の IP アドレス範囲のみを許可することができます。
さらには、AWS 側で CloudFront の IP アドレス範囲が変更されたとしても登録している IP アドレス範囲が自動更新されるため管理も容易になります。

実際に使ってみよう

ALB用セキュリティグループの設定

マネージドプレフィックスリストは Amazon VPC のコンソール内にあります。
今回使用する CloudFront 用のマネージドプレフィックスリストは AWS が管理するマネージドプレフィックスのため、最初から「com.amazonaws.global.cloudfront.origin-facing」というプレフィックス名で存在します。
そのため、マネージドプレフィックスに関しては作成などの必要な作業はありません。

ALB のセキュリティグループのインバウンドルールの設定を行います。
先に確認した CloudFront 用のマネージドプレフィックスのプレフィックスリスト ID をソースで選択することができます。
HTTP / HTTPS を許可するように登録します。

EC2用セキュリティグループの設定

次に EC2 の80ポートのインバウンドを ALB からのアクセスのみ許可します。
EC2 のセキュリティグループのインバウンドルールへ ALB のセキュリティグループを設定します。

以上の設定で CloudFront のオリジンへのインバウンド HTTP/HTTPS アクセスを制限できます。

注意点としてセキュリティグループのルールとしてはプレフィックスリスト1つの登録となっていますが、
実際にはセキュリティグループにはプレフィックスリストに登録されている IP アドレス範囲の数だけルールが追加されています。
本記事執筆時点では CloudFront 用のマネージドプレフィックスへは44個の IP アドレス範囲が登録されているため、
HTTP/HTTPS の2つのポートに対してルールを追加する場合は合計88個のルールが追加されることになります。
セキュリティグループあたりのルール数の上限に達しないように、前もって上限緩和を行うよう気をつけましょう。