ElastiCache(Redis)でAUTH構成時のRails TLS接続確認方法について

ElastiCache(Redis)で認証(Redis auth)設定を構成する場合、Redisへの通信暗号化が前提となります。

Redis-Authと通信暗号化 構成時の接続確認方法について記載させて頂きます。

1. redis-cli での接続確認

redis-cliは、通信暗号化機能が実装されていないため、stunnelを使用した疎通・接続確認が可能です。

Amazon ElastiCache の転送時の暗号化が有効化された Redis ノードへの接続に redis-cli を使用するにはどうすればよいですか?

redis-cli を使用して送信中の暗号化を有効にした Redis 用 Amazon ElastiCache ノードへの接続

2. [参考情報] rails consoleを使用した接続確認

環境

Rails Client (AmazonLinux 2)

$ 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)

rails consoleでの接続/検証コマンド

Redisオブジェクト作成時のurlを"rediss://"にします。 (url: 'rediss://<パスワード>>@:<ポート>/0')

$ 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.xxxxxxxx.yyyyy.apne1.cache.amazonaws.com:6379/0')
=> #<Redis client v4.2.1 for redis://master.xxxxxxxxx.yyyyy.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.yyyyyy.apne1.cache.amazonaws.com",      # EndPoint FQDN
      port: 6379,                                                                                                   # Port
      db: 0, 
      password: "this-is-a-test-token",                                                             # auth token (password)
      ssl: true,                                                                                                       # ssl enable
      namespace: "session" 
    },
  ],
  expire_after: 90.minutes
}

rails s -b でアプリケーションを起動し、ブラウザからアクセス。

$ rails s -b 10.0.X.X
=> 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.X:3000
Use Ctrl-C to stop

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.yyyyyy.apne1.cache.amazonaws.com:6379/0')
=> #<Redis client v4.2.1 for redis://master.xxxxx.yyyyy.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> 

参考情報 Support of encryption when using Redis from Amazon ElastiCache