自前で用意する Redis
redis.conf
へ以下のように requirepass
を設定します。
この場合は、 foobared
というパスワードが設定されており、TLS などの暗号化通信は必要ない状態です。
# snip # requirepass foobared # snip #
ちなみに、公式のドキュメントからいつの間にか解説がなくなって、全部コンフィグ読めとなっていた。
最近、一行 (80 文字くらい) を超えるコードコメントは、個人的には非常に良くないと思うようになってしまった。
https://raw.githubusercontent.com/redis/redis/6.0/redis.conf
ちなみに
似たようなコンフィグの masterauth
ですが、こちらはレプリケーションする際に問い合わせで利用する値です。
なので、レプリケーションしていなければ設定しなくてよかったはずです。
AWS ElastiCache
暗号化接続が必要になります。
見事に何も設定できませんね。
こうする
作業手順としては以下になります。
- セキュリティの送信中の暗号化にチェックを入れる
- アクセスコントロールのアクセスコントロールオプションを変更する
- アクセスコントロールなし→ Redis AUTH デフォルトユーザー
- Redis 認証トークンに任意の値を入力する
これでオッケーデース。
ローカル開発やCI/CDで、証明書が面倒of面倒で Docker なりパッケージ管理ツールで Redis は入れるけど……って場合がほとんどだと思います。
いざ本番に持ち込もうとすると「あれ?!」ってなる、というかマネージドサービスは最近そうなりがちなので、考慮できるようになるといいですね。
最近は上がってきた成果物が動かなくて、この手の調査ばっかりしているヨ。
暗号化時の redis-cli など動作確認について
どうすんの? という感じですよね。 --tls
をつけることで、暗号化通信ができます。 Establish a secure TLS connection.
と書いてあるので、接続できる最適な形式を選択してくれと思うんじゃが……。
あとは通常の問い合わせと同じく --askpass
つけたり、接続できたら PINGPONG してやりゃいいと思います。
こうする
実際に動かすとこんな感じですね。
redis-cli -h ${HOSTNAME} -p 6379 --askpass --tls password: *********** ${HOST}:6379 > PING PONG
Rails
Rails で redis(sidekiq) 使っている場合は、 console からなんらかのジョブ数問い合わせて数字が返ってくることを確認できればよさそうです (エラーにならなければ通信できているので)。
Sidekiq::Stats.processed #=> 0
このあたりが参考に。
ちなみに
gem sidekiq
使っている場合、上記のように送信中の暗号化にチェックを入れていると redis-cli --tls
したように、当然暗号化に対応した接続が必要です。 以下のように問い合わせ時のプロトコルを rediss://
にすればアクセスできます、「レディスエス」って感じの発音でいいのかな、もしくは「レディスッス?」
実運用する時は development とそれ以外でプロトコルを切り替えるか、 ENV なりで FQDN 全体を管理させる、とするのが一番スマートなのかな。
- redis://${HOST}:6379/ + rediss://${HOST}:6379/