【AWS】CloudFrontでIP制限をかける方法
概要
運用中のプロダクトにCloudFrontを導入することになりました。
これまではALBでIP制限をかけていたのですが、CloudFrontを立てる場合は考慮ポイントがあるので記事にします。
対応方針
今回検討したのは以下の二つの方針です
- 引き続きALBでIP制限をかける
- CloudFrontでIP制限をかける
ALBでIP制限をかける
ALBのリスナールールで「送信元IP」を設定することで制限を実現していました。
CloudFrontを挟む場合は送信元IPがCloudFrontのIPになってしまうため、この方法ではうまくいきません。
従って別の方法で制限をかける必要があります。
よく紹介されているのはX-Forwarded-Forヘッダーを使う方法です。
しかしX-Forwarded-Forは偽装可能で、その対策は結局アプリケーション層でやる必要があり、ALBの設定だけでは解決できなそうなことがわかりました。
IP制限という一つの目的に対して、インフラとアプリケーション両方で対策するのは運用が辛くなりそうだと判断し、CloudFrontでの対応を採用することにします。
CloudFrontでIP制限をかける
CloudFront Functionsを使うことでいけそうです。
以下の記事を参考に設定しました。
CloudFront Functionsを作成し、特定のビヘイビアに関連づければ良いので比較的簡単にIP制限をかけることができます。
ただしこれだけではIP制限として不十分です。
CloudFrontからALBにアクセスしているということは、ALBへのHTTPSアクセスを設定している、つまり特定のドメインからCloudFrontを経由せずにALBに直接アクセスできる状態になっていると思います。
従って、ALBのSecurity Groupsでアクセス元をCloudFrontのみに限定する必要があります。
具体的には、CloudFrontのマネージドプレフィックスリストを紐づけてやります。
以下を参考に実施しました。
まとめ
CloudFrontを導入した場合のIP制限方法について書きました。
どなたかの参考になれば幸いです。
Discussion