Zookeeper集群部署后怎样管理各个客户端服务的读写创建删除权限,采用ACL(Access Control List)访问控制表,可以针对节点设置相关读写等权限,保障数据安全性。
ACL构成
zookeeper 的 acl 通过 [scheme:id:permissions] 来构成权限列表。
- scheme:授权的模式,代表采用的某种权限机制,包括 world、auth、digest、ip、super 几种。
- id:授权对象,代表允许访问的用户。如果我们选择采用 IP 方式,使用的授权对象可以是一个 IP 地址或 IP 地址段;而如果使用 Digest 或 Super 方式,则对应于一个用户名。如果是 World 模式,是授权系统中所有的用户。
- permissions:授权的权限,权限组合字符串,由 cdrwa 组成,其中每个字母代表支持不同权限, 创建权限 create(c)、删除权限 delete(d)、读权限 read(r)、写权限 write(w)、管理权限admin(a)。
模式 | 描述 |
world | 授权对象只有一个anyone,代表登录到服务器的所有客户端都能对该节点执行某种权限 |
ip | 对连接的客户端使用IP地址认证方式进行认证 |
auth | 使用以添加认证的用户进行认证 |
digest | 使用 用户:密码方式验证 |
ACL权限介绍
权限类型 | ACL简写 | 描述 |
read | r | 读取节点及显示子节点列表的权限 |
write | w | 设置节点数据的权限 |
create | c | 创建子节点的权限 |
delete | d | 删除子节点的权限 |
admin | a | 设置该节点ACL权限的权限 |
授权命令介绍
授权命令 | 用法 | 描述 |
getAcl | getAcl path | 读取节点的ACL |
setAcl | setAcl path acl | 设置节点的ACL |
create | create path data acl | 创建节点时设置acl |
addAuth | addAuth scheme auth | 添加认证用户,类似于登录操作 |
ACL实战
1、取消子节点ACL权限
取消节点的读权限后,读取/name节点没有权限
取消节点删除子节点的权限
2、auth授权模式
创建用户
addauth digest fox:123456
设置权限
setAcl /name auth:fox:123456:cdrwa
# 加密
echo -n fox:123456 | openssl dgst -binary -sha1 | openssl base64
setAcl /name auth:fox:ZsWwgmtnTnx1usRF1voHFJAYGQU=:cdrwa
退出客户端,重新连接之后获取/name会没权限,需要添加授权用户。
3、digest授权模式
#设置权限
setAcl /tuling/fox digest:fox:ZsWwgmtnTnx1usRF1voHFJAYGQU=:cdrwa
4、IP授权模式
setAcl /node-ip ip:192.168.109.128:cdwra
create /node-ip data ip:192.168.109.128:cdwra
多个指定IP可以通过逗号分隔, 如 setAcl /node-ip ip:IP1:rw,ip:IP2:a
5、Super 超级管理员模式
这是一种特殊的Digest模式, 在Super模式下超级管理员用户可以对Zookeeper上的节点进行任何的操作。
需要在启动脚本上通过添加JVM 参数开启:
DigestAuthenticationProvider中定义
-Dzookeeper.DigestAuthenticationProvider.superDigest=admin:<base64encoded(SHA1(123456))