7
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 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にも到達しない)

7
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
7
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?