使用Redis ACL配置权限
您可以定义自定义的Redis ACL规则以分配给数据访问角色,或使用预定义的Redis ACL。
Redis 提供了三个预定义的 ACL 规则,这些规则带有 Redis 标志,无法更改:
- 完全访问: 允许所有命令。
- 读写: 允许读取和写入命令,并排除危险命令。
- 只读: 仅允许读取命令。
未标记Redis标志的ACL是用户定义的ACL规则。
配置一个可以分配给数据访问角色的Redis ACL:
-
从Redis Cloud 控制台菜单中转到数据访问控制。
-
选择Redis ACLs标签。
-
要么选择
+
创建一个新的Redis ACL,要么指向一个现有的ACL并选择铅笔图标进行编辑。注意:内置的Redis ACLs无法编辑。 -
提供一个描述性名称并使用ACL语法创建ACL规则。
-
选择勾号以保存您的更改。您的新Redis ACL应出现在列表中。
创建Redis ACL后,您可以将其分配给一个角色。Redis ACL在分配给角色之前不会完全验证。有关更多信息,请参阅创建角色或Active-Active访问角色以获取Active-Active数据库。
使用ACL语法定义权限
您可以使用Redis ACL语法定义这些权限。此语法允许您简洁地指定允许的命令、命令类别、键和发布/订阅通道。
+
包括 命令或命令类别-
排除 命令或命令类别@
表示一个命令类别~
定义了一个允许的键模式&
允许访问 pub/sub 频道
Redis Cloud 控制台会在您输入时验证您的 ACL 语法。
命令ACL规则
一个命令可以是任何Redis命令。
例如,这个Redis ACL规则表示允许SET
命令:
+set
命令类别ACL规则
一个命令类别是一个预定义的、命名的命令集合。
例如,读取数据的Redis命令在read
命令类别中可用。此Redis ACL规则允许访问所有读取命令:
+@read
要找出read
命令类别中包含哪些命令,请使用redis-cli
运行以下命令:
ACL CAT read
关键ACL规则
要指定哪些键是可访问的,请使用键权限语法。
以下ACL规则允许访问所有键:
~*
然而,此ACL规则仅允许访问以cache:
为前缀的键。
~cache:*
从 Redis 7.0 开始,键模式也可以用于定义命令如何读取或写入键。
以下ACL规则允许您将信息从以cache:
为前缀的键复制到以app:
为前缀的键中:
+@all ~app:* %R~cache:*
有关此工作原理的更多信息,请参阅key permissions syntax。
发布/订阅 ACL 规则
发布/订阅 ACL 规则决定了用户可以访问哪些发布/订阅频道。更多信息请参见,Redis 发布/订阅
对于早于 Redis 7.0 的版本,发布/订阅是宽松的,默认情况下允许访问所有频道。
Redis 7.0 使发布/订阅变得限制性,并阻止访问 Redis 软件中的所有频道。然而,Redis Cloud 仍然默认为允许的发布/订阅,即使对于 Redis 7.0 订阅也是如此。
Redis 版本 |
Redis 社区版 发布/订阅 ACLs |
Redis 云 发布/订阅 ACLs |
---|---|---|
6.0 | 不支持 | 不支持 |
6.2 | 宽松的 | 宽松的 |
7.0 | 限制性 | 宽松 |
限制频道访问
要阻止访问所有频道,请使用以下ACL规则:
resetchannels
如果你想限制对特定频道的访问,首先包含resetchannels
。然后使用&
语法来允许访问特定频道:
resetchannels &channel1 &channel2
允许所有频道
为了使发布/订阅明确允许并允许用户访问所有频道,请设置以下规则:
allchannels
选择器
从 Redis 7.0 开始,Redis 支持添加多组彼此独立评估的规则,称为 selectors。
以下ACL规则允许用户对以cache
为前缀的键执行GET
操作,并对以app
为前缀的键执行SET
操作:
+GET ~cache:* (+SET ~app:*)
预定义权限
Redis Cloud 包含三个预定义的权限:
-
完全访问权限 (
+@all ~*
) - 所有命令对所有键都允许。 -
读写权限 (
+@all -@dangerous ~*
) - 允许所有键使用除dangerous
命令类别外的所有命令。 -
只读 (
+@read ~*
) - 仅允许对所有键使用read
命令类别。
高级功能命令权限
请注意,您可以为订阅中包含的任何高级功能的Redis命令定义权限;但是,这些权限只能用于支持这些功能的数据库。