ClickHouse开启ldap认证简介

举报
JQL_N 发表于 2021/01/29 22:53:12 2021/01/29
【摘要】 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.xmlusers.xml文件,进行新增用户,配置ldap认证。可用于配置默认用户和管理员用户使用。

  注:config.xml中<ldap_server>配置参数详解在文末有详细解释。


  1. 修改/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>
  2. /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>
  3. 用修改的配置文件重新启动clickhouse-server
    /usr/bin/clickhouse-server --config-file=/etc/clickhouse-server/config.xml
  4. 使用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中导入用户。


  1. 修改/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>
  2. 开启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>配置参数详解:


    host
      LDAP服务器主机名或IP,必选参数,不能为空。
    port
      LDAP服务器端口,如果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_version
      SSL/TLS的最小协议版本。
      接受的值是: 'ssl2'、'ssl3'、'tls1.0'、'tls1.1'、'tls1.2'(默认值)。
    tls_require_cert
      SSL/TLS对端证书校验行为。
      接受的值是: 'never'、'allow'、'try'、'require'(默认值)。
    tls_cert_file
      证书文件。
    tls_key_file
      证书密钥文件。
    tls_ca_cert_file
      CA证书文件。
    tls_ca_cert_dir
      CA证书所在的目录。
    tls_cipher_suite
      允许加密套件。





【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

举报
请填写举报理由
0/200