保护动物园管理员,从哪里开始?
Securing zookeeper, where to start?
我在试图弄清楚我的选择是什么时感到迷茫。 Apache 的程序员指南和管理员指南没有详细说明任何实质内容。我的 O'Reilly Zookeeper 书几乎没有谈到安全......我错过了什么吗?我希望通过 google 找到有关验证客户端连接、授权操作以及加密在动物园管理员和客户端之间发送的消息的教程。
我遇到了很多麻烦,但我想通了,底部的链接对我帮助很大。
这段代码(使用 Curator)很难理解:
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 documentation, My mailing list Q1, My mailing list Q2, JIRA that I found useful, but some items are out of date
从 zookeeper 版本 3.5.4-beta 开始,您可以启用使用客户端证书来保护与远程 zookeeper 服务器的通信:
客户端
ZooKeeper客户端可以通过设置Java系统属性使用Netty:
zookeeper.clientCnxnSocket="org.apache.zookeeper.ClientCnxnSocketNetty"
为了在客户端进行安全通信,设置此 Java 系统 属性:
zookeeper.client.secure=true
请注意,使用 "secure" 属性 设置,客户端可以而且应该只连接到服务器的“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
我在试图弄清楚我的选择是什么时感到迷茫。 Apache 的程序员指南和管理员指南没有详细说明任何实质内容。我的 O'Reilly Zookeeper 书几乎没有谈到安全......我错过了什么吗?我希望通过 google 找到有关验证客户端连接、授权操作以及加密在动物园管理员和客户端之间发送的消息的教程。
我遇到了很多麻烦,但我想通了,底部的链接对我帮助很大。
这段代码(使用 Curator)很难理解:
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 documentation, My mailing list Q1, My mailing list Q2, JIRA that I found useful, but some items are out of date
从 zookeeper 版本 3.5.4-beta 开始,您可以启用使用客户端证书来保护与远程 zookeeper 服务器的通信:
客户端
ZooKeeper客户端可以通过设置Java系统属性使用Netty:
zookeeper.clientCnxnSocket="org.apache.zookeeper.ClientCnxnSocketNetty"
为了在客户端进行安全通信,设置此 Java 系统 属性:
zookeeper.client.secure=true
请注意,使用 "secure" 属性 设置,客户端可以而且应该只连接到服务器的“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