LoginSignup
6
5

More than 3 years have passed since last update.

CloudFront以外からのWebアクセスを拒否したい

Posted at

概要

CloudFront -> ELB -> EC2(Apache httpd) の構成で、インターネットから直接のELBへのアクセスを拒否したい。全てのウェブアクセスはCloudFront経由に限定したい。

案0 ELBの待ち受けポートをデフォルト以外のものにする

CloudFrontとELBの設定さえ合致していれば、ELBは必ずしも443や80ポートでリッスンする必要はない。デフォルトでないポートに変えるだけでボットなどの変なアクセスがほとんど来なくなる。ただしこれはアクセス制限でも何でもないため、他の案と併用するのが良い。

案1 ELBのセキュリティグループでCloudFrontのグローバルIPアドレスを指定する

CloudFrontのグローバルIPはJSONで公開されている。これをもとにCloudFrontのグローバルIPを許可するセキュリティグループをELBにアタッチすればアクセス制限が可能。ただしこのグローバルIPはわりと頻繁に変更が発生する。グローバルIPの変更イベントはSNSで受信することができるため、このイベントをトリガーにLambdaをキックしてセキュリティグループを動的に変更すれば対応できなくもないが、面倒だし変更イベント発生時のタイムラグも気になる。

案2 CloudFrontのカスタムヘッダをapacheがチェックする

これ系の話題はクラスメソッドさんのブログですでに網羅されていますよね。。
CloudFront側でカスタムヘッダを付加し、apache側でカスタムヘッダの項目と値が一致することを確認。一致しなかったらアクセスを拒否する。

案3 ELBのWAFがCloudFrontのカスタムヘッダをチェックする

案2と仕組みは同じ。WAFのちょっとした追加コストが許容されるのなら案2よりこちらが良い。案2だとec2までリクエストが届いた上で拒否するが、この案だとec2までリクエストは届かない。(細かい話をすると案3はelbまではリクエストが到達する。案1だとelbにも到達しない)

6
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
5