Cloudfront-EC2の構成でオリジンへの直接アクセスを制限する
2019-08-08
tl; dr
- Cloudfrontにカスタムヘッダーを設定
- webサーバーではそのヘッダーで検証する
構成
- httpd 2.4
- Cloudfront
設定
- httpd
<Directory>
でも <Files>
でも <Location>
でもお好きなところで。
<Directory "/var/www/html">
Require expr req('X-Pre-Shared-Key') =~ /^rNM59WBezZ-ユニークな文字列-Sm8HYxg4CD$/
</Directory>
- Cloudfront
Terraformで書くとこんな感じ。
resource "aws_cloudfront_distribution" "default" {
origin {
custom_header {
name = "x-pre-shared-key"
value = "rNM59WBezZ-ユニークな文字列-Sm8HYxg4CD"
}
}
}
まとめ
- Cloudfront経由以外だと403がレスポンスされる
- 秘密の文字列がバレると直接アクセスできちゃう
- Nginxでも似たような設定はできるはず(未検証)
location / {
if ($http_x_pre_shared_key != "rNM59WBezZ-ユニークな文字列-Sm8HYxg4CD") {
return 403;
}
proxy_pass http://127.0.0.1:3000;
}