生产环境中,经常会有多个项目使用zookeeper,例如多个hbase集群。每个项目搭建一套独立的zookeeper,无论从机器成本,还是运维成本,都是一笔额外的开销。
然而多项目,多集群共用zookeeper又涉及一个权限隔离的问题。zookeeper本身提供了ACL机制,表示为scheme:id:permissions,第一个字段表示采用哪一种机制,第二个id表示
用户,permissions表示相关权限( CREATE、READ、WRITE、DELETE、ADMIN 也就是 增、删、改、查、管理权限,这5种权限简写为crwda)。
zookeeper提供了如下几种机制(scheme):
- world: 它下面只有一个id, 叫anyone, 代表任何人
- auth: 它不需要id, 只要是通过认证的user都有权限(zookeeper支持通过kerberos来进行认证 , 也支持username/password形式的认证)
- digest: 它对应的id为username:BASE64(SHA1(password)),它需要先通过username:password形式的认证
- ip: 它对应的id为客户机的IP地址,设置的时候可以设置一个ip段,比如ip:192.168.1.0/16, 表示匹配前16个bit的IP段
- super: 在这种scheme情况下,对应的id拥有超级权限,可以做任何事情(cdrwa)
下面演示一个通过digest(用户名密码的方式)为创建的节点设置ACL的例子:
import org.apache.zookeeper.*;
import org.apache.zookeeper.server.auth.DigestAuthenticationProvider;
import org.apache.zookeeper.data.*;
import java.util.*;
public class NewDigest {
import org.apache.zookeeper.server.auth.DigestAuthenticationProvider;
import org.apache.zookeeper.data.*;
import java.util.*;
public class NewDigest {
public static void main(String[] args) throws Exception {
// new一个acl
List<ACL> acls = new ArrayList<ACL>();
// 添加第一个id,采用用户名密码形式
Id id1 = new Id("digest",
DigestAuthenticationProvider.generateDigest("admin:admin"));
ACL acl1 = new ACL(ZooDefs.Perms.ALL, id1);
acls.add(acl1);
// 添加第二个id,所有用户可读权限
Id id2 = new Id("world", "anyone");
ACL acl2 = new ACL(ZooDefs.Perms.READ, id2);
acls.add(acl2);
// zk用admin认证,创建/test ZNode。
ZooKeeper zk = new ZooKeeper(
"host1:2181,host2:2181,host3:2181",
2000, null);
zk.addAuthInfo("digest", "admin:admin".getBytes());
zk.create("/test", "data".getBytes(), acls, CreateMode.PERSISTENT);
}
}
List<ACL> acls = new ArrayList<ACL>();
// 添加第一个id,采用用户名密码形式
Id id1 = new Id("digest",
DigestAuthenticationProvider.generateDigest("admin:admin"));
ACL acl1 = new ACL(ZooDefs.Perms.ALL, id1);
acls.add(acl1);
// 添加第二个id,所有用户可读权限
Id id2 = new Id("world", "anyone");
ACL acl2 = new ACL(ZooDefs.Perms.READ, id2);
acls.add(acl2);
// zk用admin认证,创建/test ZNode。
ZooKeeper zk = new ZooKeeper(
"host1:2181,host2:2181,host3:2181",
2000, null);
zk.addAuthInfo("digest", "admin:admin".getBytes());
zk.create("/test", "data".getBytes(), acls, CreateMode.PERSISTENT);
}
}
然而,ACL毕竟仅仅是访问控制,并非完善的权限管理,通过这种方式做多集群隔离,还有很多局限性:
(1)ACL并无递归机制,任何一个znode创建后,都需要单独设置ACL,无法继承父节点的ACL设置。
(2)除了ip这种scheme,digest和auth的使用对用户都不是透明的,这也给使用带来了很大的成本,很多依赖zookeeper的开源框架也没有加入对ACL的支持,例如hbase,storm
相关推荐
java连接zookeeper,并增加acl权限,增加节点,删除节点,对业务进行操作
Zookeeper-ACL权限控制
主要介绍了为zookeeper配置相应的acl权限的相关实例,具有一定参考价值,需要的朋友可以了解下。
ZooKeeper通过ACL修复未授权访问漏洞,此文档适合学习
zookeeper的Acl权限控制 zookeeper的javaApi zookeeper 事件监听机制 zookeeper 集群搭建 一致性协议:zab协议 zookeeper的leader选举 observer角色及其配置 zookeeperAPI连接集群 zookeeper 开源客户端curator介绍 ...
zkui 特点: 1、实现对 zookeeper(包括集群节点的监控与管理)属性的CRUD操作。 2、导出 zookeeper 的属性。 3、通过回调地址实现对属性的导入操作。 4、通过文件上传实现属性... 10、ACL支持全局访问控制。
zookeeper简单示例代码,包括对象、节点、通信协议、序列化、acl权限、curator应用、zkclient应用等。
Zookeeper,作为一个关键的分布式应用协调框架,在多节点协作和数据同步方面发挥着不可或缺的作用。...此外,还涵盖了Zookeeper的ACL权限控制和内存数据与持久化机制,为读者提供了全面深入的技术视角。
该项目使用了 Apache ZooKeeper .NET async Client 组件,除提供了基本的zk操作,还额外封装了常用的功能以便让.net开发者更好的使用zookeeper。 提供的功能 session过期重连 永久watcher 递归删除...
简单的java客户端调用zookeeper代码,其中包含ACL权限认证调用的例子
※ zk基础知识介绍 ※ zk数据模型介绍 ※ zk数据模型中znode的介绍 ※ zk数据监听 ※ zk的acl ※ zk单节点基本操作 ※ zk集群操作 ※ zk的java客户端操作
ZKUI的主要功能包括:节点状态监控、会话管理、ACL(Access ...总的来说,ZKUI是一款强大的ZooKeeper管理工具,无论你是ZooKeeper的新手还是老手,都可以通过使用ZKUI来更高效、更便捷地管理和监控你的ZooKeeper集群。
ZAB协议用途,Zookeeper角色分配,搭建Zookeeper集群,Zookeeper命令,Zookeeper的存储模型,ZKServer的监听机制,ACL权限控制,四字命令,Java访问Zookeeper,分布式协调框架,Zookeeper环境搭建
文章目录1. ZooKeeper 是什么?2. ZooKeeper 提供了... ACL 权限控制机制11. Chroot 特性12. 会话管理13. 服务器角色14. Zookeeper 下 Server 工作状态15. 数据同步16. zookeeper 是如何保证事务的顺序一致性的?17.
Zookeeper的Wiki页面展示了如何使用Zookeeper来处理事件通知,队列,优先队列,锁,共享锁,可撤销的共享锁,两阶段提交。那么Zookeeper能帮我们作什么事情呢?简单的例子:假设我们我们有个20个搜索引擎的服务器(每...
CREATE /READ/WRITE/DELETE/ADMINzookeeper的命令操作1. create [-s] [-e] path data acl-s
它不使用Kafka脚本,而是直接连接到Kafka和Zookeeper(如果需要)以确保创建资源。 无需SSH连接到远程主机。 如果您想增加分区,复制因子,更改主题的参数或轻松管理ACL,则此库非常适合您。 要求 该库使用 , 和...
使用Python-api实现列出节点、创建节点、获取节点数据、修改节点数据、删除节点、获取节点ACL等代码编写 使用python-api实现使用超级用户授权连接,并验证 Zookeeper实现主机上下线感知,linux主机名与ip地址使用...
使用 GOSSIP 协议管理成员和广播消息, 并且支持 ACL 访问控制. Consul 的使用场景 docker 实例的注册与配置共享 coreos 实例的注册与配置共享 vitess 集群 SaaS 应用的配置共享 与 confd 服务集成,动态生成 nginx...