介绍
支持仪表板使用 Redis 缓存工单及其处理结果。你将在保持流程可用的同时,创建只能访问自身数据的账户。
Redis 将值存储在称为键的名称下。缓存键是数据名称,不是密码。本实验使用合成工单和隔离训练网络中的真实 Redis 服务。只需基本终端操作,无需 Redis 或编程经验。Client 和 Cache Server 标签页进入两个容器,它们共享实例的内核。Dashboard 显示真实请求,不是安全评分。
处理支持工单
在本步骤中,你将了解应用正常的工作方式。Redis 是服务器,负责保存命名的值并响应请求。仪表板是客户端,向 Redis 获取工单,处理后写回结果。缓存是应用使用的便捷存储;这里的数据均为合成数据。 输入保存在 support:ticket,处理后的输出保存在 support:result。
打开 Dashboard,查看 input 和 result。最初输入为 Ticket 104: password reset,结果为空。点击一次 Process ticket,结果变为 Processed: Ticket 104: password reset。重新加载会再次读取存储的值。这是真实的读取和写入。
页面还显示 username: default。用户名标识 Redis 账户,与缓存键不同。应用当前使用自动可用、无需密码的默认账户。正常业务输出证明服务可用,却不能说明该账户还能访问哪些其他数据。
如果页面显示连接错误,重新加载一次。不要把错误页面当作权限拒绝。保持两个终端标签页打开,通过名称区分操作位置。
比较必要访问和过度访问
在本步骤中,你将读写一个可丢弃的值,然后了解默认访问为何过宽。使用 Client,预配置终端位于应用容器中。redis-cli 是 Redis 的命令行客户端。-h cache-server 用私有网络名称选择服务器;这里的 localhost 则指客户端容器自身。
GET 读取键。读取仪表板输入:
redis-cli -h cache-server GET support:ticket
响应包含 Ticket 104: password reset。冒号只是键名的一部分,support: 前缀将应用数据归为一组。
SET 写入值。使用可丢弃的练习键 demo:note,保留业务输入不变:
redis-cli -h cache-server SET demo:note practice
OK 表示写入成功。读回该值:
redis-cli -h cache-server GET demo:note
响应为 practice。现在读取无关的合成财务值:
redis-cli -h cache-server GET finance:payroll
你会得到 Private payroll: synthetic。支持仪表板没有业务理由读取工资。身份验证回答谁在连接,授权决定可以使用哪些命令和键。默认账户当前既允许这种无关读取,也允许不必要的管理命令。
创建权限受限的应用账户
在本步骤中,你将仅授予命名账户所需的操作和键范围。切换至 Cache Server。cache-admin 是预配置助手,通过独立维护账户运行真实 redis-cli,用于管理,不是应用配置。
访问控制列表(ACL)为各账户规定命令和键规则。仪表板需要对 support:* 执行 GET 和 SET。星号表示 support: 后的任意后缀,这个简单前缀模式不是正则表达式。
ACL SETUSER 创建或修改账户。reset 清除旧规则,on 启用身份验证,>... 指定密码,~... 指定键模式,+get +set 仅允许这两个命令。单引号保护 > 和 * 不被 shell 解释,否则 shell 可能重定向输出或展开文件名。运行:
cache-admin ACL SETUSER dashboard reset on '>Dash-Lab-42' '~support:*' +get +set
预期得到 OK。密码 Dash-Lab-42 用于账户验证,不是 Redis 数据键。训练凭据只是本地示例,不是生产秘密。
切换至 Client。--user 选择命名账户,--askpass 提示输入密码,避免将密码放在命令行中。每次提示时输入 Dash-Lab-42,字符可能不会显示:
redis-cli -h cache-server --user dashboard --askpass GET support:ticket
工单仍可读取。通过另一条新连接测试无关键:
redis-cli -h cache-server --user dashboard --askpass GET finance:payroll
预期出现 NOPERM:身份验证成功,但键被禁止。WRONGPASS 表示用户名或密码错误,修正后重试。连接错误表示无法访问服务,不代表限制成功。如果 ACL 输入有误,在 Cache Server 中重新运行完整的 reset 命令并使用正确值。
保存有效 ACL
在本步骤中,你将持久保存账户,使其权限在未来服务启动后仍然存在。内存中的 ACL 修改立即生效,但不会自动更新配置文件。使用 Cache Server:
cache-admin ACL SAVE
预期得到 OK。Redis 将有效用户写入该服务使用的 ACL 文件 /data/users.acl。cat 显示文件内容,查看保存的规则:
cat /data/users.acl
dashboard 行包含 ~support:*、-@all、+get 和 +set,顺序可能不同。-@all 表示默认拒绝所有命令类别。以 # 开头的值是 Redis 的密码哈希,不是原始密码。
查看有效账户进行比较:
cache-admin ACL GETUSER dashboard
查找相同的键范围和命令权限。编辑未使用的文件不会改变运行中的账户。ACL SAVE 保存的是实际生效的规则。
本实验仍保留默认入口。创建更好的账户不会自动切换已有应用或停用旧路径。下一实验将从独立快照开始教授这些后续修改。切勿将维护凭据填入应用。
总结
你处理了真实支持工单,区分了数据键和密码,比较了必要与过度访问,并创建、保存了仅能对 support:* 执行 GET/SET 的命名账户。应用切换后仍需停用旧的默认路径。


