bigywater.tech
ZooKeeper · 74

权限变更和凭据轮换

要给服务换一个 digest 口令,怎么做才不会让线上服务突然失去访问权?这篇用一个「旧口令的服务」做实验,看改 ACL 对在线会话的影响,并验证先加后减的轮换顺序。

立即生效
改 ACL 后,旧口令的在线会话下一次请求就被拒绝
先加后减
ACL 先同时包含新旧 id,再去掉旧的
add_auth
同一个连接里可以追加新身份

改 ACL 对在线会话

实测 · 本机执行输出
  svc(旧口令)读 /cfg → 允许
  管理员把 ACL 换成 svc:new-pw 之后,svc 的现有会话读 /cfg → 拒绝

重连之后

实测 · 本机执行输出
  重连之后,svc 读 /cfg → 拒绝

平滑轮换

实测 · 本机执行输出
  ACL = root + 旧 + 新:旧口令的新会话读 /cfg → 允许 | 新口令的新会话读 /cfg → 允许
  去掉旧 id 之后:旧口令的新会话读 /cfg → 拒绝 | 新口令的会话读 → 允许

追加身份

实测 · 本机执行输出
  未认证读 → 拒绝 | add_auth(新口令)之后读 → 允许

分步演示

凭据轮换
本步的对象

    本文用到的工具与边界

    • 本机 macOS 27 / ZooKeeper 3.9.6(brew 安装的 jar,用 java -cp 直接启动自己的实例,OpenJDK 17 Temurin,JVM 堆 128 MiB)/ 本机回环端口 7300+,数据在临时目录;默认 tickTime=2000;计时用 time.perf_counter,数字每次运行会有小幅抖动。单机,经过一个 TCP 代理以便制造断线;kazoo 的 add_auth;口令是实验用的假口令
    • 没有验证:大量节点各自带 ACL 时的批量轮换(第 73 篇的递归代价)、轮换期间的客户端重试、Kerberos / TLS 证书的轮换
    京ICP备2026067502号-1京公网安备11010502063487号