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节点没有权限

zookeeper acl权限继承 zookeeper权限控制_zookeeper acl权限继承

 取消节点删除子节点的权限

zookeeper acl权限继承 zookeeper权限控制_zookeeper acl权限继承_02

 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

zookeeper acl权限继承 zookeeper权限控制_zookeeper_03

 

退出客户端,重新连接之后获取/name会没权限,需要添加授权用户。

zookeeper acl权限继承 zookeeper权限控制_zookeeper_04

 

3、digest授权模式

#设置权限
setAcl /tuling/fox digest:fox:ZsWwgmtnTnx1usRF1voHFJAYGQU=:cdrwa

zookeeper acl权限继承 zookeeper权限控制_学习_05

 

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))