🌐

【AWS】CloudFrontでIP制限をかける方法

2024/09/16に公開

概要

運用中のプロダクトにCloudFrontを導入することになりました。
これまではALBでIP制限をかけていたのですが、CloudFrontを立てる場合は考慮ポイントがあるので記事にします。

対応方針

今回検討したのは以下の二つの方針です

  1. 引き続きALBでIP制限をかける
  2. CloudFrontでIP制限をかける

ALBでIP制限をかける

ALBのリスナールールで「送信元IP」を設定することで制限を実現していました。

CloudFrontを挟む場合は送信元IPがCloudFrontのIPになってしまうため、この方法ではうまくいきません。
従って別の方法で制限をかける必要があります。
よく紹介されているのはX-Forwarded-Forヘッダーを使う方法です。
しかしX-Forwarded-Forは偽装可能で、その対策は結局アプリケーション層でやる必要があり、ALBの設定だけでは解決できなそうなことがわかりました。
IP制限という一つの目的に対して、インフラとアプリケーション両方で対策するのは運用が辛くなりそうだと判断し、CloudFrontでの対応を採用することにします。

CloudFrontでIP制限をかける

CloudFront Functionsを使うことでいけそうです。
以下の記事を参考に設定しました。
https://dev.classmethod.jp/articles/cloudfront-functions-ip-control/

CloudFront Functionsを作成し、特定のビヘイビアに関連づければ良いので比較的簡単にIP制限をかけることができます。

ただしこれだけではIP制限として不十分です。
CloudFrontからALBにアクセスしているということは、ALBへのHTTPSアクセスを設定している、つまり特定のドメインからCloudFrontを経由せずにALBに直接アクセスできる状態になっていると思います。
従って、ALBのSecurity Groupsでアクセス元をCloudFrontのみに限定する必要があります。
具体的には、CloudFrontのマネージドプレフィックスリストを紐づけてやります。
以下を参考に実施しました。
https://aws.amazon.com/jp/blogs/news/limit-access-to-your-origins-using-the-aws-managed-prefix-list-for-amazon-cloudfront/

まとめ

CloudFrontを導入した場合のIP制限方法について書きました。
どなたかの参考になれば幸いです。

Discussion