12 安全与可观测性
🎯 学习要点
📖 名词解释
ACL:访问控制列表,为不同用户设置命令与键空间权限。TLS:传输层加密,保护客户端与服务器之间的数据安全。命令重命名:将高风险命令重命名或禁用,降低误操作风险。指标:用于观测系统状态的数据,如连接数、内存、命令耗时。告警:当指标超过阈值时自动通知运维或开发人员的机制。LATENCY DOCTOR:Redis 的延迟诊断工具,分析可能引发延迟的原因。
🧭 学习方案
- 开启并配置 ACL,为应用创建专用用户与权限集合。
- 配置 TLS 并完成证书签发与部署,验证客户端加密连接。
- 重命名或禁用高风险命令,测试运维流程防止误用。
- 接入监控系统(指标与日志),设定告警阈值并演练故障告警。
🗺️ 应用场景说明
- 多租户环境:不同应用使用不同 ACL 用户,互不影响且安全隔离。
- 安全合规要求:开启传输加密与权限控制,满足审计与合规检查。
- 生产巡检:通过指标与慢查询日志,提前发现异常并处理。
⚠️ 注意事项
🛂 ACL 示例
# 开启默认用户,设置密码,允许所有键与全部命令(示例)
user default on >strongpass ~* +@all
通俗说明
- 这行的意思是:开启默认用户、设置密码、允许所有键与全部命令。
- 线上建议为每个应用单独创建用户,只开必要命令与键空间权限(最小权限)。
- 定期轮换密码,并禁用高风险命令,降低误操作与攻击面。
详细解释
- ACL 可为不同应用/环境创建独立用户与权限集,限制键空间与命令集合。
- 最小权限原则:只授予需要的命令与键前缀,降低误操作影响面。
- 密码与权限需定期审计与轮换,结合日志记录与告警。
推荐配置示例(按应用划分用户)
user app1 on >app1_strong_pass ~app1:* +@read +@write -@dangerous
user app1_readonly on >app1_ro_pass ~app1:* +@read
实战操作步骤(在 redis-cli 中执行)
ACL SETUSER app1 on >app1_strong_pass ~app1:* +@read +@write -@dangerous
ACL SETUSER app1_readonly on >app1_ro_pass ~app1:* +@read
ACL LIST
ACL GETUSER app1
ACL LOG 10
- 在应用配置中,将连接用户名和密码改为
app1 和 app1_strong_pass。 - 为只读后台查询使用
app1_readonly,避免写入操作。
常见 ACL 检查点
- 新建用户后,验证读写/只读权限是否符合预期。
- 定期查看
ACL LOG 是否有被拒绝的访问记录,并排查原因。 - 新环境上线前禁止直接使用
default 用户,避免权限过大。
🔒 命令安全
# 将高风险命令改名为空(等同禁用),避免误操作
rename-command FLUSHALL ""
rename-command KEYS ""
rename-command CONFIG ""
rename-command SHUTDOWN ""
通俗说明
- 将高风险命令“改名为空”相当于禁用,避免误操作导致数据受损。
- 可按需改名或禁用其他危险命令,配合 ACL 做最小权限。
详细解释
- 改名为空表示禁用;也可改为复杂别名,降低误触风险。
- 高风险命令包括
FLUSHALL/KEYS/CONFIG 等,生产环境谨慎使用。 - 与 ACL 联用,形成双重保护与操作规范。
实战验证示例
FLUSHALL
- 如果返回类似
(error) ERR unknown command 'FLUSHALL',说明命令已成功禁用。 - 对被重命名的命令,需要通过新名称访问,并仅授权给少量运维账号。
命令安全检查清单
- 确认所有实例均已禁用或重命名高风险命令。
- 确认危险命令的新名称未暴露给业务应用,仅限运维使用。
- 结合 ACL,确保普通应用用户无法执行危险命令。
🔐 TLS 基本配置
# 启用 TLS 端口并配置证书与 CA,开启客户端认证
tls-port 6379
tls-cert-file /path/server.crt
tls-key-file /path/server.key
tls-ca-cert-file /path/ca.crt
tls-auth-clients yes
通俗说明
- 配置证书与 CA 后,客户端与服务器之间的通信会被加密。
- 开启客户端认证只允许受信任证书接入,提升安全性。
详细解释
- 配置服务器证书与私钥,启用 TLS 端口,客户端用受信任 CA 验证。
- 可双向认证(mTLS),确保客户端身份可信,防止伪造。
- 证书需定期更新与管理,过期会导致连接失败。
证书快速生成示例(开发/测试环境)
openssl genrsa -out ca.key 2048
openssl req -x509 -new -key ca.key -days 3650 -out ca.crt -subj "/CN=redis-ca"
openssl genrsa -out server.key 2048
openssl req -new -key server.key -out server.csr -subj "/CN=redis-server"
openssl x509 -req -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out server.crt -days 3650
客户端连接示例
redis-cli --tls --cacert ca.crt -h 127.0.0.1 -p 6379 -a strongpass
- 如果启用客户端证书认证,还需要加
--cert client.crt 和 --key client.key 参数。
TLS 配置检查清单
- 服务端启动无证书错误日志(路径、权限、过期时间正确)。
- 使用
redis-cli --tls 能正常连接并完成读写操作。 - 如非必须,关闭明文端口(
port 0),避免未加密访问。
📈 观测命令
INFO
SLOWLOG GET 20
LATENCY DOCTOR
通俗说明
LATENCY DOCTOR 给出延迟诊断与建议;结合慢日志与指标一起观察。- 定期巡检并设定告警阈值,提前发现异常并处理。
详细解释
LATENCY DOCTOR 汇总延迟来源并提出建议;配合慢日志定位热点命令。- 指标巡检包括内存、命中率、连接数、持久化、复制延迟等。
- 告警阈值与动作应按业务影响设定,快速定位与止损。
常用 INFO 子命令示例
INFO memory
INFO stats
INFO replication
慢查询与延迟排查实战
CONFIG SET slowlog-log-slower-than 10000
SLOWLOG GET 10
LATENCY DOCTOR
- 通过慢日志找出耗时最高的命令和键,评估是否需要优化。
监控与告警指标建议
- 采集
used_memory、connected_clients、total_commands_processed 等核心指标。 - 为内存使用率、命令耗时、复制延迟和磁盘持久化失败次数设置告警阈值。
- 告警消息中包含实例标识和业务标签,便于快速定位问题实例。
📎 参考模板(redis.conf 简化示例)
适用场景
- 单实例或主从架构的中小业务,作为安全与可观测性基线。
- 在此基础上再按业务需要做扩展(容量、持久化等)。
模板内容说明
- 启用 ACL,并关闭默认用户。
- 禁用高风险命令。
- 启用 TLS 并关闭明文端口。
- 打开慢查询日志与延迟监控,便于排查问题。
生产环境参考模板(示例)
port 0
tls-port 6379
tls-cert-file /path/server.crt
tls-key-file /path/server.key
tls-ca-cert-file /path/ca.crt
tls-auth-clients yes
user default off
user app1 on >app1_strong_pass ~app1:* +@read +@write -@dangerous
user app1_readonly on >app1_ro_pass ~app1:* +@read
rename-command FLUSHALL ""
rename-command KEYS ""
rename-command CONFIG ""
rename-command SHUTDOWN ""
slowlog-log-slower-than 10000
slowlog-max-len 128
latency-monitor-threshold 100
使用与校验步骤
- 按模板调整
redis.conf,并替换为真实证书路径和强密码。 - 重启实例后,使用
redis-cli --tls 验证连接和基本读写是否正常。 - 使用
ACL LIST、ACL GETUSER app1 检查用户与权限是否符合设计。 - 尝试执行
FLUSHALL、CONFIG GET * 等命令,确认是否已被禁用。 - 通过
SLOWLOG GET、LATENCY DOCTOR 检查是否正常产出观测数据。
🔍 小结
- 使用 ACL 管理用户权限,遵循最小权限原则,定期轮换密码。
- 启用 TLS 保障传输安全,正确管理证书与 CA。
- 对高风险命令进行重命名或禁用,避免误操作导致数据丢失。
- 建立指标采集与告警体系,覆盖连接数、内存、命令耗时与持久化状态。
- 新环境上线前,完成“ACL 配置 → TLS 验证 → 命令重命名 → 监控告警”全流程演练。