动物园管理员的安全

Safety about zookeeper

我遇到了zookeeper的安全问题。我有一个zookeeper&kafka,我用sasl来保护zookeeper。而我发现'zkcli'有一个bug,就是即使我不提供sasl的用户名和密码,我仍然可以访问zoopkeeper的znode。问题解释如下:

http://zookeeper-user.578899.n2.nabble.com/SASL-for-Client-connections-td7583502.html#a7583510

不知道有没有办法让zookeeper更安全。我知道setacl可以保护zookeeper的znode,但是我发现在zookeeper中使用setcal会导致一些kafka错误。有没有更好的办法?非常感谢。

不确定是否对您有帮助,但也许 :)

以下是我针对您的部分问题所做的工作(无 SASL):有效客户端 IP 的白名单。

  • 添加到zkServer.sh -Dzookeeper.authProvider.1=MyCustomIPAuthenticationProvider

  • 使用 withACL(ZooDefs.Ids.CREATOR_ALL_ACL) 创建所有 znode(假设 Curator)

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)。 (而且用例没有 Kafka!)