ElastiCache(Redis)へRuby on RailsでTLS接続方法のメモ
ElastiCache(Redis)で認証(Redis auth)設定を構成する場合、Redisへの通信暗号化が前提となります。
1. redis-cli での接続確認
redis-cliは、通信暗号化機能が実装されていないため、stunnelを使用した疎通・接続確認が可能です。
Amazon ElastiCache の転送時の暗号化が有効化された Redis ノードへの接続に redis-cli を使用するにはどうすればよいですか? redis-cli を使用して送信中の暗号化を有効にした Redis 用 Amazon ElastiCache ノードへの接続
2. Rails consoleを使用した接続確認
[前提環境] Rails ClientがLinuxへ導入済みであること
$ ruby -v ruby 2.6.6p146 (2020-03-31 revision 67876) [x86_64-linux] $ gem -v 3.0.3 $ rails -v Rails 5.2.4.3 $ gem list redis *** LOCAL GEMS *** redis (4.2.1) redis-actionpack (5.2.0) redis-activesupport (5.2.0) redis-rack (2.1.3) redis-rails (5.0.2) redis-store (1.9.0) redis-store-testing (0.0.2)
[通常時との差異]
Redisオブジェクト作成時のurlを"rediss://"にします。
(url: 'rediss://<パスワード>@
$ rails c Loading development environment (Rails 5.2.4.3) irb(main):001:0> redis = Redis.new(url: 'rediss://:This-is-a-sample-token@master.xxxxxxxxx.xxxxx.apne1.cache.amazonaws.com:6379/0') => #<Redis client v4.2.1 for redis://master.xxxxxx.xxxxxx.apne1.cache.amazonaws.com:6379/0> irb(main):002:0> redis.set "mykeyid0002", "123456789abcdefg" => "OK" irb(main):003:0> redis.keys => ["mykeyid0002", "keyid1111", "mykeyid0001", "hoge"]
参考情報 Support of encryption when using Redis from Amazon ElastiCache
3. Rails session_store使用時の設定、接続/検証コマンド
Ruby on Railsサンプル簡易アプリをrails newで作成して、session_storeを用いたセッション管理をElastiCacheに格納するため以下session_store.rbを作成。
config/initializers/session_store.rb
<ApplicationName>::Application.config.session_store :redis_store, { servers: [ { host: "master.xxxxxx.xxxxxx.apne1.cache.amazonaws.com", xxx# EndPoint FQDN port: 6379, # Port db: 0, password: "this-is-a-test-token", # Radis auth token (password) ssl: true, # ssl enable namespace: "session" }, ], expire_after: 90.minutes }
rails s -b でアプリケーションを起動し、ブラウザからアクセスする。
$ rails s -b 10.0.X.XXX => Booting Puma => Rails 5.2.4.4 application starting in development => Run `rails server -h` for more startup options Puma starting in single mode... * Version 3.12.6 (ruby 2.6.6-p146), codename: Llamas in Pajamas * Min threads: 5, max threads: 5 * Environment: development * Listening on tcp://10.0.X.XXX:3000 Use Ctrl-C to stop
Rails ConsoleでElastiChacheにセッション情報が格納されているか確認する。
$ rails c Running via Spring preloader in process 16498 Loading development environment (Rails 5.2.4.4) irb(main):001:0> redis = Redis.new(url: 'rediss://:This-is-a-sample-token@master.XXXXXX.XXXXX.apne1.cache.amazonaws.com:6379/0') => #<Redis client v4.2.1 for redis://master.rXXXXX.XXXXXX.apne1.cache.amazonaws.com:6379/0> irb(main):002:0> redis.keys => ["session:2::11bd96f4315c95ef2b216bcf4e2807a056efdb2143735d41bb3f2c2ae689c247"] ← Session情報Key irb(main):003:0> redis.get "session:2::11bd96f4315c95ef2b216bcf4e2807a056efdb2143735d41bb3f2c2ae689c247" => "\u0004\b{\u0006I\"\u0010_csrf_token\u0006:\u0006EFI\"1fRkIT2faQQxor1sqNiRaDCp6l3G2eEsKR2XA8ImG2ZI=\u0006;\u0000F" ↑ Session情報 # 他クライアントからRailsアプリケーションへアクセス irb(main):004:0> redis.keys => ["session:2::19177af23f6ec49087bf08ca78deda97d7dd7f884d8b77f367df6d7599b4350a", "session:2::11bd96f4315c95ef2b216bcf4e2807a056efdb2143735d41bb3f2c2ae689c247"] ↑ Session情報Keyが追加された irb(main):005:0>
以上