Rails6 で LoadBalancer からのヘルスチェックが 403 にならないようにする

問題

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' }
}

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です