Zookeeper学习之路——ACL权限控制

背景

ZooKeeper作为一个分布式协调框架,内部存储的都是一些分布式系统运行时状态的元数据,尤其是一些涉及到分布式锁,master选举和分布式协调等应用场景的数据,数据的访问权限涉及到ZooKeeper运行时安全。为了保障ZooKeeper的数据安全,提供了一套完整的ACL(Access Control List)权限控制机制来保障数据的安全。
和Linux中使用的UGO(User,Group,Others)权限控制机制不同,UGO就是针对所属用户组,所属群组组和其他,这样的权限控制是粗粒度的,如果要求的权限是user1该数据有权限,同时要求group1和group2也是拥有权限的,user2对数据没有权限。对于这样的权限控制UGO没有办法提供一个有效的控制机制。

ACL

ACL的权限通常是使用“schema:id:permission”来标识一个有效的ACL信息。

权限模式:Scheme

ZooKeeper权限控制有四种模式,分别是IP,Digest,World,Super

IP

IP模式就是通过IP地址粒度来控制权限,如果配置了“ip:192.168.28.125”,就是标识对于整个IP地址的是有权限控制访问的,也可以通过配置IP网段的方式,例如“ip:192.168.28.1/24”,表示针对192.168.28.*整个IP段进行权限控制。

Digest

Digest模式是通过“username:password”的形式来配置权限控制信息,便于区分不同应用用来进行权限控制。ZooKeeper会对配置完的信息进行两次编码,分别是SHA-1算法加密和BASE64编码,具体的实现是由DigestAuthenticationProvider.generateDigest()方法来保证的。

World

World是一种最开放的权限控制模式。数据节点的访问权限对所有用户开放,也就是所有的用户都可以在不进行任何权限校验的情况下操作ZooKeeper上的数据,World模式也是一种特殊的Digest模式,它只有一个权限标识“world:anyone”

Super

Super模式是超级用户的权限,超级用户可以操作ZooKeeper上的任意节点数据。

授权对象:ID

对于不同的scheme,授权的对象是不同的。
IP模式:授权对象通常是一个ip地址或者是一个ip段
Digest模式:授权对象通常是自定义中的username
World模式:授权对象是anyone
Super模式:授权对象和Digest中的相同

权限:Permission

对数据节点的控制操作权限分为五种:

  • CREATE:创建节点以及子节点的权限
  • DELETE:删除接单以及子节点的权限
  • READ:数据节点的读取权限
  • WRITE:数据节点的写权限
  • ADMIN:数据节点的管理权限

权限扩展

尽管ZooKeeper已经为我们提供了上述的四种权限模式,同时也提供给我们能够自定义自己权限的方式——实现接口
org.apache.zookeeper.server.auth.AuthenticationProvider
- 启动参数配置
在ZooKeeper启动参数中配置类似于如下的系统属性
-Dzookeeper.authProvider.1=com.zkbook.CustomAuthenticationProvider
- 配置文件配置
在zoo.cfg配置文件中配置类似于如下的配置项
authProvider.1=com.zkbook.CustomAuthenticationProvider

ACL管理

猜你喜欢

转载自blog.csdn.net/u010871004/article/details/80821336