Redis企业软件中的Redis ACL概述

Redis企业软件中Redis ACLs、语法和ACL命令支持的概述。

Redis访问控制列表(Redis ACLs)允许您为特定的Redis命令、键和发布/订阅频道定义命名的权限。您可以为多个数据库和角色使用已定义的Redis ACLs。

预定义的Redis ACLs

Redis 企业版软件提供了一个预定义的 Redis ACL,名为 Full Access。此 ACL 允许对所有键执行所有命令,并且无法编辑。

Redis ACL 语法

Redis ACLs 是通过 Redis 语法 定义的,您可以在其中指定允许用于特定键的命令或命令类别。

命令和类别

Redis ACL 规则可以允许或阻止特定的 Redis 命令命令类别

  • + 包含命令

  • - 排除命令

  • +@ 包含命令类别

  • -@ 排除命令类别

以下示例允许所有read命令和SET命令:

+@read +SET

模块命令有几个ACL限制:

  • Redis 模块 没有命令类别。

  • 其他命令类别 ACLs,例如+@read+@write,不包括Redis模块命令。+@all是唯一的例外,因为它允许所有Redis命令。

  • 你必须在Redis ACL规则中包含单独的模块命令以允许它们。

    例如,以下Redis ACL规则允许只读命令和RediSearch命令FT.INFOFT.SEARCH

    +@read +FT.INFO +FT.SEARCH
    

关键模式

要定义对特定键或键模式的访问,请使用以下前缀:

  • ~%RW~ 允许对键进行读写访问。

  • %R~ 允许对键进行读取访问。

  • %W~ 允许对键进行写访问。

%RW~, %R~, 和 %W~ 仅支持 Redis 7.2 或更高版本的数据库。

以下示例允许对所有以“app1”开头的键进行读写访问,并对所有以“app2”开头的键进行只读访问:

~app1* %R~app2*

发布/订阅频道

& 前缀允许访问 pub/sub 频道(仅支持 Redis 6.2 或更高版本的数据库)。

要限制对特定频道的访问,请在允许的频道之前包含resetchannels

resetchannels &channel1 &channel2

选择器

Selectors 允许你在单个 Redis ACL 中定义多组规则(仅支持 Redis 7.2 或更高版本的数据库)。如果命令匹配基本规则或 Redis ACL 中的任何选择器,则该命令被允许。

  • (<rule set>) 创建一个新的选择器。

  • clearselectors 删除用户的所有现有选择器。此操作不会删除基本的ACL规则。

在以下示例中,基本规则允许GET key1,选择器允许SET key2

+GET ~key1 (+SET ~key2)

默认的发布/订阅权限

Redis数据库版本6.2引入了发布/订阅ACL规则,这些规则决定了用户可以访问哪些发布/订阅频道

配置选项 acl-pubsub-default,在 Redis Enterprise Software 版本 6.4.2 中添加,用于确定所有发布/订阅通道的集群范围默认访问级别。Redis Enterprise Software 默认使用以下发布/订阅权限:

  • 对于版本6.4.2和7.2,acl-pubsub-default默认是宽松的(allchannels&*),以适应早期的Redis版本。

  • 在未来的版本中,acl-pubsub-default 将更改为限制性(resetchannels)。限制性权限默认会阻止所有发布/订阅频道,除非由ACL规则明确允许。

如果您使用ACLs和pub/sub通道,您应该审查您的数据库和ACL设置,并计划将您的集群过渡到限制性的pub/sub权限,以准备未来的Redis Enterprise Software版本。

准备限制性的发布/订阅权限

为了保护发布/订阅通道并为将来默认具有限制性发布/订阅权限的Redis Enterprise Software版本准备您的集群:

  1. 升级Redis数据库:

    • 对于Redis Enterprise Software版本6.4.2,请将集群中的所有数据库升级到Redis DB版本6.2。

    • 对于Redis Enterprise Software版本7.2,将集群中的所有数据库升级到Redis DB版本7.2或6.2。

  2. 使用resetchannels &channel格式创建或更新具有特定频道权限的ACLs。

  3. 将ACLs与相关数据库关联。

  4. 将默认的发布/订阅权限(acl-pubsub-default)设置为限制性。详情请参阅更改默认的发布/订阅权限

  5. 如果出现任何问题,您可以暂时将默认的发布/订阅设置更改回宽松模式。在再次使发布/订阅权限变得严格之前,请解决所有有问题的ACL。

Note:

当您将集群的默认发布/订阅权限更改为限制性时,&* 会被添加到 完全访问 ACL 中。在进行此更改之前,请考虑以下事项:

  • 由于发布/订阅 ACL 语法是在 Redis 6.2 中添加的,在此更改后,您无法将 完全访问 ACL 与 6.0 或更低版本的数据库关联。

  • 如果您再次将acl-pubsub-default更改为宽松模式,完全访问 ACL 不会被恢复。

  • 每个启用了默认用户的数据库都使用完全访问 ACL。

更改默认的发布/订阅权限

自 Redis Enterprise 版本 6.4.2 起,您可以配置 acl_pubsub_default,它决定了集群中所有数据库的默认发布/订阅权限。您可以将 acl_pubsub_default 设置为以下值:

  • resetchannels 是限制性的,默认情况下会阻止访问所有频道。

  • allchannels 是宽松的,默认情况下允许访问所有频道。

为了使默认的发布/订阅权限更加严格:

  1. 升级所有数据库在集群中到Redis版本6.2或更高版本。

  2. 使用以下方法之一将默认设置为限制性(resetchannels):

    • 新的集群管理器用户界面(仅适用于Redis企业版7.2及更高版本):

      1. 导航到访问控制 > 设置 > Pub/Sub ACLs并选择编辑

      2. 对于Pub/Sub ACLs的默认权限,选择限制性,然后保存

    • rladmin tune cluster:

      rladmin tune cluster acl_pubsub_default resetchannels
      
    • 更新集群策略 REST API 请求:

      PUT /v1/cluster/policy
      { "acl_pubsub_default": "resetchannels" }
      

ACL 命令支持

Redis Enterprise Software 不支持某些 Redis ACL 命令。相反,您可以从集群管理器 UI 管理访问控制。

命令 支持
ACL CAT ✅ 支持
ACL DELUSER ❌ 不支持
ACL DRYRUN ✅ 支持
ACL GENPASS ❌ 不支持
ACL GETUSER ✅ 支持
ACL HELP ✅ 支持
ACL LIST ✅ 支持
ACL LOAD ❌ 不支持
ACL LOG ❌ 不支持
ACL SAVE ❌ 不支持
ACL SETUSER ❌ 不支持
ACL USERS ✅ 支持
ACL WHOAMI ✅ 支持

Redis ACLs 在 Redis 企业版软件中还有以下不同之处:

  • MULTIEXECDISCARD 命令始终被允许,但 ACL 会在 MULTI 子命令上强制执行。

  • 不支持嵌套选择器。

    例如,以下选择器在 Redis Enterprise 中无效:+GET ~key1 (+SET (+SET ~key2) ~key3)

  • 键和发布/订阅模式不允许以下字符:'(', ')'

  • 不支持以下密码配置语法:'>', '<', '#!', 'resetpass'

    要在Redis Enterprise Software中配置密码,请使用以下方法之一:

RATE THIS PAGE
Back to top ↑