如何防止Apache Hive绕过ZooKeeper直接通过JDBC连接?
已通过Apache Ranger配置Apache Hive防护,常规连接需经过ZooKeeper集群,示例连接串:
jdbc:hive2://d01.test.local:2181,d02.test.local:2181,d03.test.local:2181/;serviceDiscoveryMode=zooKeeper;zooKeeperNamespace=hiveserver2
用户也可指定主机直接连接HiveServer2,示例连接串:
jdbc:hive2://d01.test.local:10000
但Ranger的Hive服务名策略仅支持配置一个(对应文件ranger-hive-security.xml),若策略基于ZooKeeper模式配置,直接连接将不受Ranger防护且审计功能失效,请问如何防护此类直接连接?
统一服务名匹配
修改所有HiveServer2节点的hive-site.xml配置,确保hive.server2.zookeeper.namespace的值与Ranger中配置的Hive服务名完全一致。同时在ranger-hive-security.xml里确认ranger.plugin.hive.service.name配置为该统一服务名。这样无论通过ZK发现还是直接连接HiveServer2,都会匹配到同一个Ranger服务策略,防护和审计功能正常生效。网络层面限制直接端口访问
利用防火墙(如iptables、firewalld)或集群安全组,仅允许ZooKeeper集群节点、Ranger服务节点以及经过认证的可信客户端IP访问HiveServer2的10000端口,其他来源的直接连接请求直接阻断,强制客户端通过ZK路由访问Hive。强制身份认证结合Ranger授权
为HiveServer2启用Kerberos身份认证,要求所有连接(包括直接连接)必须通过Kerberos认证。同时确保Ranger的Hive服务策略覆盖所有认证用户的权限,即使有人绕过ZK直接连接,也会被Ranger的授权规则拦截,且审计日志正常记录。Ranger服务实例配置优化
在Ranger的Hive服务配置页面,将所有HiveServer2节点的地址(d01.test.local:10000、d02.test.local:10000等)添加到Hive Server URL配置项中,确保Ranger能识别到所有直接连接的HiveServer2实例,将其纳入同一服务策略的防护范围。
内容的提问来源于stack exchange,提问作者Alatau

