保护动物园管理员,从哪里开始?

时间:2015-08-19 21:41:05

标签: security apache-zookeeper

我想弄清楚我的选择是什么。 Apache的程序员指南和管理员指南没有详细说明任何实质内容。我的O'Reilly Zookeeper书几乎没有谈到安全问题......我错过了什么吗?我希望通过谷歌找到关于验证客户端连接,授权操作以及加密动物园管理员和客户端之间发送的消息的教程。

2 个答案:

答案 0 :(得分:3)

我遇到了很多麻烦,但我想出来了,底部的链接给了我很大的帮助。

这段代码(使用策展人)很难弄明白:

List<ACL> myAclList = new ArrayList<ACL>();
aclList.add(new ACL(ZooDefs.Perms.ALL, ZooDefs.Ids.AUTH_IDS));
client.create(withACL(myAclList)).forPath(myPath);

如果我正确设置了zookeeper配置,那么它将强制只允许AUTH_IDS访问我的ZNode。

Ofiicial documentationMy mailing list Q1My mailing list Q2JIRA that I found useful, but some items are out of date

答案 1 :(得分:1)

从zookeeper版本3.5.4-beta开始,您就可以启用使用客户端证书来保护与远程Zookeeper服务器的通信的安全性:

客户

ZooKeeper客户端可以通过设置Java系统属性来使用Netty:

zookeeper.clientCnxnSocket="org.apache.zookeeper.ClientCnxnSocketNetty"

为了在客户端上进行安全通信,请设置以下Java系统属性:

zookeeper.client.secure=true

请注意,设置了“安全”属性后,客户端可以并且应该仅连接到服务器的“ secureClientPort”,这将在稍后进行介绍。

然后通过设置以下Java系统属性来设置密钥库和信任库环境:

zookeeper.ssl.keyStore.location="/path/to/your/keystore"
zookeeper.ssl.keyStore.password="keystore_password"
zookeeper.ssl.trustStore.location="/path/to/your/truststore"
zookeeper.ssl.trustStore.password="truststore_password"

服务器

ZooKeeper服务器可以通过设置以下Java系统属性来使用Netty:

zookeeper.serverCnxnFactory="org.apache.zookeeper.server.NettyServerCnxnFactory"

ZooKeeper服务器还需要提供一个侦听端口以接受安全的客户端连接。该端口不同于已知的“ clientPort”并与之并行运行。应该将其添加到“ zoo.cfg”中:

secureClientPort=2281

所有安全客户端(如上所述)应连接到此端口。

然后像客户端一样设置密钥库和信任库环境。

更多信息在这里: https://cwiki.apache.org/confluence/display/ZOOKEEPER/ZooKeeper+SSL+User+Guide