問題
Rails6 から導入された DNS rebinding protection
によって、 config.hosts
に定義した host 以外の host を使ってアクセスされた場合、403 が返るようになった。
通常のアクセス時は問題ないが、ALB 等からヘルスチェックされる場合、定義した hosts ではなく EC2 に割り当てられたインターナルな host (eg: ip-100-100-100-100.ap-northeast-1.compute.internal
) が使われるためエラーになってしまう。
解決方法
Add request exclusion to Host Authorization #38829 (rails/rails) で追加された config.host_authorization
を使いオプトアウトすることが出来る。
config.host_authorization = {
exclude: -> (request) { request.path == '/health_check' }
}