RailsAdmin で Web サービスの管理ページを実装しているんだけど、公開するにあたって、管理ページに誰でもアクセスできるのはマズイ。そこでまず考えるのは、管理ページに IP アドレスの制限をかけること。
ただ、今回は Heroku を使っているので、Apache や Nginx で制限する方法は使えない。Heroku では Rail 本体でやるしかない。ならば Rack ミドルウェアで制限してやればいいと思い、Rack::Access を使うことにした。
Rack::Access は rack-contrib に含まれているので、まず Gemfile に
gem "rack-contrib", require: "rack/contrib"
を記述して
bundle
でインストール。
あとは、config/application.rb で Rack::Access を使うように指定する。
module Sample class Application < Rails::Application config.middleware.use Rack::Access, { "/admins" => ["127.0.0.1", "自分の IP アドレス"], "/rails_admin" => ["127.0.0.1", "自分の IP アドレス"], } end end
これで、指定した IP アドレスのみ、管理ページと管理者の登録・ログインページにアクセスできるようになった。他の IP アドレスだと 403 Forbidden が返ってくる。
Rack ミドルウェアを使っているので、Rails 以外、例えば Sinatra でも適用できるのがこの方法の長所だな。