AWS IP制限をかけているEC2にCloudFrontからのHTTPSを許可する
久しぶりの投稿です。3年間構造解析のエンジニアをしてきましたが、4月からAWS関連の部に行くこととなり、必死にAWSを勉強中です。どこかで3年間やってきたことの総括をしたいなーと思ってます。
間違ったことを言ってしまっているときは指摘していただけると非常に助かります。
勉強には社内のAWS環境を使用させていただいていて、その中で詰まった点があったのでメモしておきます。
EC2に関する社内ルール
社内環境用AWSにはいくつか使用に関するルールがあります。今回関係があるルールは以下のようなものです。
- EC2には0.0.0.0/0からのアクセスできないようにすること
です。そのため、EC2に割り当てるセキュリティグループのインバウンドルールで社内のプロキシサーバーのIpを設定して、HTTPSやSSHをできるようにしていました。
問題の発生(CloudFront)
勉強がてら、上記のEC2をALBの配下に置いたりして遊んでいました。
そこで以前AWSのドキュメントで見たことがあったCloudFrontも使ってみようと思いました。
しかし、ここで問題が発生。
セキュリティグループには社内からのアクセスを想定してIPアドレスの制限を設定していましたが、CloudFrontは外部からのアクセスとなるため、EC2とのHTTPSが出来なかったのです。
(こんなことに気づくのすらかなり時間がかかるIT系初心者なのです、、優しくして)
問題の解決
非常に悩みました。EC2に0.0.0.0/0からのアクセスを許可すればCloudFrontとHTTPS通信できることは検証できていました。しかし、0.0.0.0/0からのアクセスを許可したままだと社内ルールに抵触しますし、ハッカーさんたちの攻撃の的になってしまいます。
苦肉の策として思いついたのが、CloudFrontのIPアドレスをインバウンドルールに追加すればいいのでは?ということです。
ネットで検索したところ見つけました!以下のjsonファイルの中にCloudFrontのIpアドレスが入っていました。
CloudFront エッジサーバーの場所とIPアドレス範囲
この中で"service": "CLOUDFRONT"の検索で引っかかるIPアドレスがCloudFrontのIPアドレスだそうです。
よし!これで次に進める!と思ったが、、、そのIPアドレスの数なんと155個(2022年3月25日現在)
そうですよね、世界中にエッジロケーションあるんですよね、、
もっとスマートにやれる方法はあるんでしょうが、はい、やりました。まずセキュリティグループのインバウンドルールに50個のCloudFrontのIPを追加しました。(セキュリティグループには設定できるルールの上限がある?)
そしてCloudFrontの動作検証をしたらできました。うまくキャッシュサーバーとして動いていることを確認できました。上記の50個でだめだったらもう50個を新しく定義してみる予定でしたが、幸運でした。
問題点
上記の解決方法は問題点が多いです。
- 155個も手打ちでIPアドレスを登録するのは馬鹿らしい
- 新しいエッジロケーションが追加されたとき、そのエッジからはアクセスが出来なくなってしまう。
- 定期的にIPリストを更新することが必要。しかし、更新されるまでの間新しいエッジからはアクセスができない
これらの問題点はAWSエンジニアの方たちはどのように解決しているんですかね、今のところノ―アイディアです。新しい部署で聞きたいことが山ほどあり、非常に楽しみです。
今後
なによりやることはCloudFrontを社内のIPからのアクセスに限定することですね。
今は野放しになってしまっているので、WAFとかを使うんでしょうか。
とにかく一つ一つ勉強していって、ここにメモを残していきます。
誰かの役にも立てれば光栄です。
それでは、また今度~~