一咸灿、背景
由于部門內(nèi)clickhouse集群依賴的zookeeper集群并未設置訪問權(quán)限控制,所以被安全部門通報漏洞
二、解決的方案
1、不把Zookeeper直接暴露在公網(wǎng)
2、添加訪問控制兵罢,根據(jù)情況選擇對應方式(認證用戶,用戶名密碼)
3伏伯、綁定指定IP訪問(利用IPtable實現(xiàn))
三浩考、實現(xiàn)
這里我們選擇方案二(別問我為哈 手動黑人3問號)
3.1 zookeeper配置
首先打開命令行客戶端 zkCli.sh
/opt/soft/zookeeper/bin/zkCli.sh
為zookeeper 增加一個認證用戶
格式如下: addauth digest 用戶名:密碼明文
addauth digest clickhouse:myPassword
為zk路徑設置權(quán)限,這里有明文和密文兩種方式
首先創(chuàng)建一個測試目錄
create /test test
- 方式一 明文
setAcl /test auth:clickhouse:myPassword:cdrwa
- 方式二 密文(密文密碼的生成規(guī)則和目錄權(quán)限可參考文末 : Zookeeper ACL權(quán)限配置及zkclient示例)
setAcl /test digest:clickhouse:myPassword:cdrwa
查看設置的權(quán)限
getAcl /test
此時只有:clickhouse:myPassword 能對/test目錄操作
配置zk中的clickhouse目錄
這里看zk的用途,如果zk只為ck提供服務,那么可以直接為/目錄設置權(quán)限
setAcl / auth:clickhouse:myPassword:cdrwa
如果zk還同時為其他框架提供服務那么可只為ck使用的目錄設置權(quán)限
setAcl /clickhouse auth:clickhouse:myPassword:cdrwa
這里需要注意的是zk的路徑權(quán)限不會繼承,也就是說你對于/clickhouse設置的權(quán)限 對于/clickhouse/xx 是不生效的 但是如果ck里配置了zk的用戶及密碼 那么由ck創(chuàng)建出的zk路徑是帶有權(quán)限的
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 驗證
隨便找一個表查詢或?qū)懭?無誤即可
如果報錯檢查
- zk用戶名密碼是否配置
- ck xml配置明文密碼是否正確 是否同步
- ck 是否全部重啟
3.4 以后如果想通過zkCli操作ck的路徑怎么辦???
那當然是登錄zkCli
再執(zhí)行addauth digest clickhouse:myPassword 即可操作帶有權(quán)限的路徑