最近 Redis の公式ドキュメント「Redis Security」を読んでいたら「Disabling of specific commands」というトピックを発見した.簡単に表現すると redis.conf
に rename-command
という設定を定義すると,特定のコマンドを無効化したり,別名のコマンドに変更することができる機能と言える.例えば FLUSHALL
や FLUSHDB
など,もし運用上不要なコマンドがあれば,誤って実行してしまうことを防止することができる.rename-command
は今まで使ったことがなく,試してみることにした.
検証環境
今回は 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
コマンドを通常通りに実行する.以下のように port
と save
の設定値を取得できた.
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.conf
にrename-command
という設定を定義すると,特定のコマンドを無効化したり,別名のコマンドに変更することができる