Clickhouse 配置带访问权限控制的zookeeper

一、背景

由于部门内clickhouse集群依赖的zookeeper集群并未设置访问权限控制,所以被安全部门通报漏洞

二、解决的方案

1、不把Zookeeper直接暴露在公网
2、添加访问控制,根据情况选择对应方式(认证用户,用户名密码)
3、绑定指定IP访问(利用IPtable实现)

三、实现

这里我们选择方案二(别问我为哈 手动黑人3问号)

3.1 zookeeper配置

首先打开命令行客户端 zkCli.sh

/opt/soft/zookeeper/bin/zkCli.sh

为zookeeper 增加一个认证用户
格式如下: addauth digest 用户名:密码明文

addauth digest clickhouse:myPassword

为zk路径设置权限,这里有明文和密文两种方式

首先创建一个测试目录

create /test test
  • 方式一 明文
setAcl /test auth:clickhouse:myPassword:cdrwa
  • 方式二 密文(密文密码的生成规则和目录权限可参考文末 : Zookeeper ACL权限配置及zkclient示例)
setAcl /test digest:clickhouse:myPassword:cdrwa

查看设置的权限

getAcl /test

此时只有:clickhouse:myPassword 能对/test目录操作

配置zk中的clickhouse目录
这里看zk的用途,如果zk只为ck提供服务,那么可以直接为/目录设置权限

setAcl / auth:clickhouse:myPassword:cdrwa

如果zk还同时为其他框架提供服务那么可只为ck使用的目录设置权限

setAcl /clickhouse auth:clickhouse:myPassword:cdrwa

这里需要注意的是zk的路径权限不会继承,也就是说你对于/clickhouse设置的权限 对于/clickhouse/xx 是不生效的 但是如果ck里配置了zk的用户及密码 那么由ck创建出的zk路径是带有权限的

3.2 clickhouse配置

在metrika.xml中配置zk的用户密码(注意这里密码需要配置成明文)

    <zookeeper-servers>
        <node index="1">
            <host>example1</host>
            <port>2181</port>
        </node>
        <node index="2">
            <host>example2</host>
            <port>2181</port>
        </node>
        <node index="3">
            <host>example3</host>
            <port>2181</port>
        </node>
        <identity>clickhouse:myPassword</identity>
    </zookeeper-servers>

配置完必须重启所有ck服务 (如果长时间无法停止 可强制kill掉)

/etc/init.d/clickhouse-server restart

3.3 验证

随便找一个表查询或写入,无误即可
如果报错检查

  • zk用户名密码是否配置
  • ck xml配置明文密码是否正确 是否同步
  • ck 是否全部重启

3.4 以后如果想通过zkCli操作ck的路径怎么办???

那当然是登录zkCli
再执行addauth digest clickhouse:myPassword 即可操作带有权限的路径

参考文档:
Zookeeper ACL权限配置及zkclient示例

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容