Redis 6.0新特性——ACLs

2664 ワード

Redis 6.0の新しい特性の紹介


2019年ニューヨークのRedis DayでSalvatore Sanfilippo(AKA Antirez)が発表するRedis 6.0の新しい特性を紹介した.以下はACLsの聞き取りについてです.

ACLsの概要


この10年間、Redisにはこのような問題がありました.
ユーザがFLUSHALLを実行すると、OKはデータベース全体が空になったり、DEBUG SEGFAULTを実行したりして、Redisのプロセスはcrashによって終了します.
以前にこの問題を解決する方法は、Redis構成で危険コマンドをrenameすることであった可能性があります.
rename-command FLUSHALL ""

これにより、コマンドをランダム文字列に変更したり、必要に応じて直接マスクしたりします.
危険なコマンド管理が欠けていると、ネットワーク上のライブラリを使用している場合、FLUSHALLというコマンドを追加するかどうか分からないか、外部コードを使用するたびにCode Reviewを実行することもできます.
ACLsがあれば、次のように制御できます.
この接続では、RPOPLPUSHのコマンドのみが使用でき、他のコマンドは呼び出せません.
便利ではないでしょうか.ACLsがどのように働いているか見てみましょう.

ベストプラクティス


まず、ユーザーを定義します.
ログインすると、旧バージョンのデフォルトユーザー(defaule user)は何でもできます.Redis 6.0ではデフォルトユーザーを定義できます.
127.0.0.1:6379> ACL setuser antirez on >password1 >password2 >foobar +@all ~*
ACL setuser antirez on
setuser...onはこのユーザーを有効にすることを示し、offは使用できないユーザーを1つだけ定義します.>password1 >password2 >foobarは、3つのパスワードが設定されており、パスワードの交代ポリシーに使用できることを示しています.+@allは、ユーザがすべての権限を使用できることを示し、+の後に+get、または+@の後にある種類の権限が続く.~*は、利用可能なキー名を表し、ここでは*、すなわち、すべてのキーがアクセス可能である.
127.0.0.1:6379> ACL WHOAMI
"default"

デフォルトのユーザーの下で、ユーザーを切り替えます.
127.0.0.1:6379> AUTH antirez foobar
OK

以前はAUTHの後ろに直接パスワードがついていましたが、今はユーザー名とパスワードです.
127.0.0.1:6379> ACL WHOAMI
"antirez"

このユーザーには、すべてのコマンドが使用可能+すべてのキーが表示されるように設定されていたため、defaultユーザーとは変わりません.
127.0.0.1:6379> GET foo
(nil)
127.0.0.1:6379> SET foo bar
OK

権限をいくつか削除します.
127.0.0.1:6379> ACL setuser antirez -SET

このユーザーのSET権限を削除すると、この操作はできません.
127.0.0.1:6379> GET foo
"bar"
127.0.0.1:6379> SET foo 123
(error) NOPERM this user has no permissions to run the 'set' command or its subcommand

今のACLリストをもう一度見てみましょう.
127.0.0.1:6379> ACL list
1) "user antirez on >password1 >password2 >foobar ~* +@all -set"
2) "user default on nopass ~* +@all"

同様に、ユーザーが任意のコマンドを使用できるように制限することもできますが、object*のような一部のキーしか表示できません.

コメント


ACLsの実装では、コマンドのビットマップ(commands’bitmaps)を使用して、速度が低下しないようにする小さなテクニックが使用されています.ACLsを使わないと元のRedis 5と同じで、ACLsを使うと当然追加のオーバーヘッドがありますが、非常に小さく、benchmarksでは新旧バージョンの違いに気づかないでしょう.