最近 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という設定を定義すると,特定のコマンドを無効化したり,別名のコマンドに変更することができる