kakakakakku blog

Weekly Tech Blog: Keep on Learning!

Redis で特定のコマンドを無効化できる設定「rename-command」

最近 Redis の公式ドキュメント「Redis Security」を読んでいたら「Disabling of specific commands」というトピックを発見した.簡単に表現すると redis.confrename-command という設定を定義すると,特定のコマンドを無効化したり,別名のコマンドに変更することができる機能と言える.例えば FLUSHALLFLUSHDB など,もし運用上不要なコマンドがあれば,誤って実行してしまうことを防止することができる.rename-command は今まで使ったことがなく,試してみることにした.

redis.io

検証環境

今回は Mac に brew でインストールした Redis 5.0.5 を使う.

$ redis-server --version
Redis server v=5.0.5 sha=00000000:0 malloc=libc bits=64 build=31cd6e21ec924b46

$ redis-cli --version
redis-cli 5.0.5

CONFIG GET コマンドを実行する

まず,設定値を取得する CONFIG GET コマンドを通常通りに実行する.以下のように portsave の設定値を取得できた.

127.0.0.1:6379> CONFIG GET port
1) "port"
2) "6379"

127.0.0.1:6379> CONFIG GET save
1) "save"
2) "3600 1 300 100 60 10000"

CONFIG コマンドを無効化する

次に,公式ドキュメントに書いてある通りに redis.conf を修正する.

rename-command CONFIG ""

すると,CONFIG GET を実行しても unknown command となり,無効化されていた.

127.0.0.1:6379> CONFIG GET port
(error) ERR unknown command `CONFIG`, with args beginning with: `GET`, `port`,

127.0.0.1:6379> CONFIG GET save
(error) ERR unknown command `CONFIG`, with args beginning with: `GET`, `save`,

CONFIG コマンドを別名に変更する

次も,公式ドキュメントに書いてある通りに redis.conf を修正する.今度は CONFIG コマンドを推測不可能な別名に変更している.

rename-command CONFIG b840fc02d524045429941cc15f59e41cb7be6c52

すると,今度は b840fc02d524045429941cc15f59e41cb7be6c52 コマンドを使って,設定値を取得できた.

127.0.0.1:6379> b840fc02d524045429941cc15f59e41cb7be6c52 GET port
1) "port"
2) "6379"

127.0.0.1:6379> b840fc02d524045429941cc15f59e41cb7be6c52 GET save
1) "save"
2) "900 1 300 10 60 10000"

KAKKUSET コマンドと KAKKUGET コマンドを作る

運用上使うことはないけど,例えば KAKKU というプレフィックスを付けたコマンドを作ることもできる.同様に redis.conf を修正する.

rename-command SET KAKKUSET
rename-command GET KAKKUGET

すると,KAKKUSET コマンドと KAKKUGET コマンドを使えるようになる.

127.0.0.1:6379> KAKKUSET mykey "Hello"
OK
127.0.0.1:6379> KAKKUGET mykey
"Hello"

まとめ

  • Redis の公式ドキュメント「Redis Security」を読んでいたら「Disabling of specific commands」というトピックを発見した
  • redis.confrename-command という設定を定義すると,特定のコマンドを無効化したり,別名のコマンドに変更することができる