ACL 解决权限粒度问题
Redis 6.0 之前只有单一密码,连上就是全权限,任何一次泄露都等于整个实例失控。ACL 引入多用户模型:每个账号可以单独设置密码、允许执行的命令或命令类别、以及可访问的键前缀。权限从「全通或不通」变成可裁剪的集合,出问题也能快速定位到具体账号。
基本信息
| 适用平台 | Redis 6.0+;5.x 及以下只有 requirepass |
|---|---|
| 常用命令 | ACL SETUSER、ACL LIST、ACL WHOAMI、ACL LOG、ACL SAVE |
| 规则要素 | on/off、密码、~键模式、+命令/-命令、+@类别/-@类别 |
| 持久化 | ACL SAVE 写入 aclfile 指定的文件 |
| 审计 | ACL LOG 记录被拒绝的调用 |
典型使用场景
- 不同业务使用不同账号,按键前缀隔离数据范围
- 只读账号:仅授予读命令类别并禁止危险命令
- 排查权限问题:用 ACL LOG 看最近被拒绝的操作
- 禁用高危命令:对不执行管理操作的应用账号屏蔽管理类命令
- 多租户场景下给每个租户分配独立的键前缀
创建与查看账号
创建与查看账号
# 只允许访问 cache: 前缀的读写与过期设置
ACL SETUSER app_user on >密码 ~cache:* +get +set +expire
# 只读账号:开放读类别并禁止危险命令
ACL SETUSER readonly_user on >密码 ~* +@read -@dangerous
# 查看当前账号与被拒日志
ACL WHOAMI
ACL LIST
ACL LOG 5
# 持久化账号配置,否则重启后丢失
ACL SAVE规则语法速查
| 规则 | 含义 | 注意 |
|---|---|---|
| on / off | 启用或禁用账号 | 新建账号默认禁用 |
| >password | 设置密码(<password 移除) | 明文会出现在命令历史中 |
| ~pattern | 允许访问的键模式 | * 表示全部键 |
| +command / -command | 允许或禁止单个命令 | 命令名用小写更直观 |
| +@read / -@dangerous | 按命令类别授权 | 类别覆盖范围较粗,需核对 |
| resetkeys / resetcommands | 清空已配置的键与命令规则 | 调整规则时常用 |
ACL 的收益在于最小权限:按业务分配键前缀与命令子集后,一次凭证泄露的影响面被限制在很小的范围内,排查时也能直接定位到账号。
ACL 规则调整后必须执行 ACL SAVE 写入配置文件,否则实例重启时新账号与规则全部丢失,回退到旧的权限状态。