使用Redis ACL配置权限

您可以定义自定义的Redis ACL规则以分配给数据访问角色,或使用预定义的Redis ACL。

Redis 提供了三个预定义的 ACL 规则,这些规则带有 Redis 标志,无法更改:

  • 完全访问: 允许所有命令。
  • 读写: 允许读取和写入命令,并排除危险命令。
  • 只读: 仅允许读取命令。

未标记Redis标志的ACL是用户定义的ACL规则。

配置一个可以分配给数据访问角色的Redis ACL:

  1. Redis Cloud 控制台菜单中转到数据访问控制

    Menu for database access control.
  2. 选择Redis ACLs标签。

    Redis ACLs area.
  3. 要么选择+创建一个新的Redis ACL,要么指向一个现有的ACL并选择铅笔图标进行编辑。

    Add or Update Redis ACL.
    注意:
    内置的Redis ACLs无法编辑。
  4. 提供一个描述性名称并使用ACL语法创建ACL规则。

    Add Redis ACL.
  5. 选择勾号以保存您的更改。您的新Redis ACL应出现在列表中。

    Saved 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命令定义权限;但是,这些权限只能用于支持这些功能的数据库。

RATE THIS PAGE
Back to top ↑