我遇到了关于zookeeper安全的问题。我有一个动物园管理员和卡夫卡,我用sasl保护动物园管理员。虽然我发现'zkcli'有一个错误,即使我不提供sasl的用户名和密码,我仍然可以访问zoopkeeper的znode。问题解释如下:
http://zookeeper-user.578899.n2.nabble.com/SASL-for-Client-connections-td7583502.html#a7583510
我想知道有没有办法让动物园管理员更安全。我知道setacl可以保护zookeeper的znode,但我发现如果在zookeeper中使用setcal会导致一些kafka错误。有没有更好的办法?非常感谢。
答案 0 :(得分:0)
不确定它会对你有所帮助,但也许:)
以下是我为您的部分问题所做的工作(无SASL):有效客户端IP的白名单。
添加到zkServer.sh
-Dzookeeper.authProvider.1=MyCustomIPAuthenticationProvider
使用withACL(ZooDefs.Ids.CREATOR_ALL_ACL)
创建所有znodes(假设策展人)
和
public class MyCustomIPAuthenticationProvider extends org.apache.zookeeper.server.auth.IPAuthenticationProvider {
private static Set<String> validHosts = new HashSet<>(); // todo populate
@Override
public KeeperException.Code handleAuthentication(org.apache.zookeeper.server.ServerCnxn cnxn, byte[] authData) {
String id = cnxn.getRemoteSocketAddress().getAddress().getHostAddress();
if (! matches(id, null) || ! matches(new String(authData), null)) {
return org.apache.zookeeper.KeeperException.Code.AUTHFAILED;
}
return super.handleAuthentication(cnxn, authData);
}
@Override
public boolean matches(String id, String aclExpr) {
return validHosts.contains(id);
}
@Override
public boolean isAuthenticated() {
return true;
}
}
请注意,它不是100%安全(客户端可以伪造他的IP)。 (并且用例没有卡夫卡!)