ClickHouse开启ldap认证简介
【摘要】 ClickHouse与openLDAP集成认证
环境要求:
- 安装且正常运行的ClickHouse 20.8 与OpenLDAP集群。
- 测试clickhouse-client 用默认用户可以正常登录,用ldapsearch指令可以正常用ldap服务器管理员账号密码或普通用户账号密码正常连接,且有用户数据。
例如:
# 通过默认用户可以登录ClickHouse
clickhouse-client -h 127.0.0.1 --port 9000
# 通过ldapsearch指令可以从加密传输端口连接到ldap server
ldapsearch -LLL -W -H ldaps://127.0.0.1:636 -D "cn=root,dc=hadoop,dc=com" -b "dc=hadoop,dc=com"
# 通过ldapwhoami指令与管理员账户密码可以从加密传输端口连接到ldap server,且有正确数据反馈
$ ldapwhoami -x -D "cn=root,ou=Users,dc=hadoop,dc=com" -W -H ldaps://127.0.0.1:636
dn:cn=root,ou=Users,dc=hadoop,dc=com
# 通过ldapwhoami指令与用户密码可以从加密传输端口连接到ldap server,且有正确数据反馈
$ ldapwhoami -x -D "uid=pro1,ou=Users,dc=hadoop,dc=com" -w pro1
dn:uid=pro1,ou=Users,dc=hadoop,dc=com
方案一:
通过配置config.xml与users.xml文件,进行新增用户,配置ldap认证。可用于配置默认用户和管理员用户使用。
注:config.xml中<ldap_server>配置参数详解在文末有详细解释。
- 修改/etc/clickhouse-server/config.xml文件在<ldap_servers>标签内配置ldap_server的信息,如果没有可根据官网说明文档自行添加或直接使用下文所举例子。 采用明文数据传输方式
<ldap_servers> <ldap_server_name> <host>localhost</host> <!-- LDAP server IP --> <port>389</port> <!-- LDAP server port --> <auth_dn_prefix>uid=</auth_dn_prefix> <!-- 管理员 组管理员 使用 cn= 普通用户使用 uid,此处有一些区别,根据实际情况选择 环境要求中举例中有提到 可参考 --> <auth_dn_suffix>,ou=Group,dc=node1,dc=com</auth_dn_suffix> <enable_tls>no</enable_tls> <!--明文传输 此处为 no --> <tls_require_cert>never</tls_require_cert> </ldap_server_name> </ldap_servers>
加密数据传输方式修改
<ldap_servers> <ldap_server_name> <host>localhost</host> <port>636</port> <auth_dn_prefix>uid=</auth_dn_prefix> <auth_dn_suffix>,ou=Group,dc=node1,dc=com</auth_dn_suffix> <enable_tls>yes</enable_tls> <!-- 加密传输 此处为 yes --> <tls_require_cert>allow</tls_require_cert> </ldap_server_name> </ldap_servers>
- /etc/clickhouse-server/users.xml文件,在<users>标签内添加用户信息,并将密码验证配置成 <ldap><server>ldap_server_name</server></ldap>
<users> <!-- 此处'username'为新增用户名,且此用户名与OpenLDAP中存在的用户名相同--> <username> <ldap> <!--此处'ldap_server_name'为在config.xml中配置的<ldap_servers>标签中配置好的openLDAP服务名--> <server>ldap_server_name</server> </ldap> <!-- 此处可对该用户权限进行配置,具体操作参考官方文档 --> <networks incl="networks" replace="replace"> <ip>::/0</ip> </networks> <!-- Settings profile for user. --> <profile>default</profile> <!-- Quota for user. --> <quota>default</quota> </username> </users>
- 用修改的配置文件重新启动clickhouse-server
/usr/bin/clickhouse-server --config-file=/etc/clickhouse-server/config.xml
- 使用OpenLDAP中的用户username与其对应的密码登录ClickHouse
/usr/bin/clickhouse-client --port 7000 --user username --password %TGB6yhn
方案二
开启ClickHouse RBAC功能,用SQL命令创建使用LDAP服务器进行认证的用户,并在/etc/clickhouse-server/config.xml配置相应的LDAP服务配置。此方案适合从LDAP服务器中批量向ClickHouse中导入用户。
-
修改/etc/clickhouse-server/config.xml文件在<ldap_servers>标签内配置ldap_server的信息(与方案一中涉及内容相同)
采用明文数据传输方式
<ldap_servers> <ldap_server_name> <host>localhost</host> <!-- LDAP server IP --> <port>389</port> <!-- LDAP server port --> <auth_dn_prefix>uid=</auth_dn_prefix> <!-- 管理员 组管理员 使用 cn= 普通用户使用 uid,此处有一些区别,根据实际情况选择 环境要求中举例中有提到 可参考 --> <auth_dn_suffix>,ou=Group,dc=node1,dc=com</auth_dn_suffix> <enable_tls>no</enable_tls> <!--明文传输 此处为 no --> <tls_require_cert>never</tls_require_cert> </ldap_server_name> </ldap_servers>
加密数据传输方式修改
<ldap_servers> <ldap_server_name> <host>localhost</host> <port>636</port> <auth_dn_prefix>uid=</auth_dn_prefix> <auth_dn_suffix>,ou=Group,dc=node1,dc=com</auth_dn_suffix> <enable_tls>yes</enable_tls> <!-- 加密传输 此处为 yes --> <tls_require_cert>allow</tls_require_cert> </ldap_server_name> </ldap_servers>
-
开启ClickHouse RBAC功能在 config.xml 中添加 access_control_path 配置项,默认可能已经配置,没有请添加。
<!-- config.xml --> <access_control_path>/var/lib/clickhouse/access/</access_control_path>
通过 SQL 形式创建的用户、角色等信息将以文件的形式被保存在这个目录。在添加完配置后需要重启服务,重启之后,在指定目录下会生成一系列存储文件:-rw-r-----. 1 clickhouse clickhouse 1 May 15 20:27 quotas.list -rw-r-----. 1 clickhouse clickhouse 1 May 15 20:27 roles.list -rw-r-----. 1 clickhouse clickhouse 1 May 15 20:27 row_policies.list -rw-r-----. 1 clickhouse clickhouse 1 May 15 20:27 settings_profiles.list -rw-r-----. 1 clickhouse clickhouse 1 May 15 20:39 users.list
在 users.xml 中为默认用户 default 添加 access_management 配置项<!-- user.xml --> <users> <!-- If user name was not specified, 'default' user is used. --> <default> <password></password> <access_management>1</access_management> ... </users>
至此配置项完成,重启clickhouse-server,让配置生效:
systemctl restart clickhouse-server
此时默认用户default,就开启了 SQL 驱动的访问控制和账户管理功能。default 作为默认用户,默认拥有所有的权限,我们应该将它当做 super admin 使用。所以一般我们会使用 default 用户创建另外一批 admin 用户,用于日常管理,例如:CREATE USER userName IDENTIFIED WITH PLAINTEXT_PASSWORD BY 'password';
使用默认提供的default账号登陆(default 作为默认用户,默认拥有所有的权限),新建root账号:clickhouse-client -m
登录成功后进行下列操作:-- 创建用户:用户名 root 密码 root Clickhouse> CREATE USER root IDENTIFIED WITH PLAINTEXT_PASSWORD BY 'root'; -- 授予root账号权限: Clickhouse> set allow_introspection_functions=1; Clickhouse> GRANT ALL ON *.* TO root WITH GRANT OPTION; -- 账号查询和确认: Clickhouse> show create user root; SHOW CREATE USER root ┌─CREATE USER root────────────────────────────────────┐ │ CREATE USER root IDENTIFIED WITH plaintext_password │ └─────────────────────────────────────────────────────┘
创建完管理员账户后,用管理员账户登录,进行相关配置,并限制default用户权限,直接将users.xml中<users>标签中<default>标签内容注释掉即可。# 使用root 用户登录ClickHouse clickhouse-client -u root --password root # 创建pro1用户,设置ldap_server 为config.xml中定义的'my_ldap_server' (该用户pro1为OpenLDAP中已有的用户名) Clickhouse> CREATE USER pro1 IDENTIFIED WITH ldap_server BY 'ldap_server_name';
退出root登录,使用用户pro1登录验证配置是否成功clickhouse-client -u pro1 --password %TGB6yhn
♦ config.xml中<ldap_server>配置参数详解:
hostLDAP服务器主机名或IP,必选参数,不能为空。portLDAP服务器端口,如果enable_tls设置为true,则默认为636,否则为389。auth_dn_prefix, auth_dn_suffix用于构造要绑定到的DN的前缀和后缀。实际上,生成的DN将被构造为auth_dn_prefix + escape(user_name) + auth_dn_suffix字符串。注意,这意味着auth_dn_suffix通常应将逗号“,”作为其第一个非空格字符。enable_tls触发使用LDAP服务器安全连接的标志。为纯文本(ldap://)协议指定“no”(不推荐)。为LDAP over SSL/TLS (ldaps://)协议指定“yes”(建议为默认值)。指定旧版StartTLS协议(纯文本(ldap://)协议,升级到TLS)的“starttls”。tls_minimum_protocol_versionSSL/TLS的最小协议版本。接受的值是: 'ssl2'、'ssl3'、'tls1.0'、'tls1.1'、'tls1.2'(默认值)。tls_require_certSSL/TLS对端证书校验行为。接受的值是: 'never'、'allow'、'try'、'require'(默认值)。tls_cert_file证书文件。tls_key_file证书密钥文件。tls_ca_cert_fileCA证书文件。tls_ca_cert_dirCA证书所在的目录。tls_cipher_suite允许加密套件。
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)