ClickHouseをLDAPで認証とロールマッピングに使用する設定
このページはClickHouse Cloudには適用されません。ここで文書化されている機能は、ClickHouse Cloudサービスでは利用できません。 詳細は、ClickHouseのCloud Compatibilityガイドをご覧ください。
ClickHouseはLDAPを使用してClickHouseデータベースユーザーを認証するように設定できます。このガイドは、公開ディレクトリに認証するLDAPシステムとClickHouseを統合する簡単な例を示します。
1. ClickHouseでのLDAP接続設定の構成
この公開LDAPサーバーへの接続をテストします:
$ ldapsearch -x -b dc=example,dc=com -H ldap://ldap.forumsys.com
応答は次のようになります:
# extended LDIF
#
# LDAPv3
# base <dc=example,dc=com> with scope subtree
# filter: (objectclass=*)
# requesting: ALL
#
# example.com
dn: dc=example,dc=com
objectClass: top
objectClass: dcObject
objectClass: organization
o: example.com
dc: example
...config.xml
ファイルを編集し、LDAPを構成するために以下を追加します:<ldap_servers>
<test_ldap_server>
<host>ldap.forumsys.com</host>
<port>389</port>
<bind_dn>uid={user_name},dc=example,dc=com</bind_dn>
<enable_tls>no</enable_tls>
<tls_require_cert>never</tls_require_cert>
</test_ldap_server>
</ldap_servers>Note<test_ldap_server>
タグは特定のLDAPサーバーを識別するための任意のラベルです。上記で使用される基本設定は次の通りです:
パラメータ 説明 例 host LDAPサーバーのホスト名またはIP ldap.forumsys.com port LDAPサーバーのディレクトリポート 389 bind_dn ユーザーへのテンプレートパス uid={user_name},dc=example,dc=com enable_tls 安全なLDAPを使用するかどうか no tls_require_cert 接続に証明書を必要とするかどうか never Noteこの例では、公開サーバーが389を使用し、安全なポートを使用しないため、デモ用にTLSを無効にしています。
NoteLDAP設定の詳細については、LDAPドキュメントページを参照してください。
<user_directories>
セクションに<ldap>
セクションを追加して、ユーザーロールマッピングを構成します。このセクションでは、ユーザーが認証されたときにどのロールを受け取るかが定義されます。この基本的な例では、LDAPへの認証に成功したユーザーは、ClickHouseで後ほど定義されるscientists_role
を受け取ります。このセクションは次のようになります:<user_directories>
<users_xml>
<path>users.xml</path>
</users_xml>
<local_directory>
<path>/var/lib/clickhouse/access/</path>
</local_directory>
<ldap>
<server>test_ldap_server</server>
<roles>
<scientists_role />
</roles>
<role_mapping>
<base_dn>dc=example,dc=com</base_dn>
<search_filter>(&(objectClass=groupOfUniqueNames)(uniqueMember={bind_dn}))</search_filter>
<attribute>cn</attribute>
</role_mapping>
</ldap>
</user_directories>上記で使用されている基本設定は次の通りです:
パラメータ 説明 例 server 前のldap_serversセクションで定義されたラベル test_ldap_server roles ユーザーがマッピングされるClickHouseで定義されたロール名 scientists_role base_dn グループを検索するベースパス dc=example,dc=com search_filter ユーザーをマッピングするために選択すべきグループを識別するldap検索フィルター (&(objectClass=groupOfUniqueNames)(uniqueMember={bind_dn})) attribute 戻されるべき値がある属性名 cn 設定を適用するためにClickHouseサーバーを再起動します。
2. ClickHouseデータベースのロールと権限を構成
このセクションの手順は、ClickHouseでSQLアクセス制御とアカウント管理が有効になっていることを前提としています。有効化するには、SQLユーザーとロールガイドを参照してください。
config.xml
ファイルのロールマッピングセクションで使用されているのと同じ名前でClickHouseにロールを作成しますCREATE ROLE scientists_role;
必要な特権をロールに付与します。次のステートメントは、LDAPを通して認証された任意のユーザーに管理者特権を付与します:
GRANT ALL ON *.* TO scientists_role;
3. LDAP設定のテスト
ClickHouseクライアントを使用してログインします
$ clickhouse-client --user einstein --password password
ClickHouse client version 22.2.2.1.
Connecting to localhost:9000 as user einstein.
Connected to ClickHouse server version 22.2.2 revision 54455.
chnode1 :)Noteステップ1の
ldapsearch
コマンドを使用して、ディレクトリ内のすべてのユーザーを表示し、すべてのユーザーのパスワードはpassword
です。ユーザーが
scientists_role
ロールに正しくマッピングされ、管理者権限を持っていることをテストしますSHOW DATABASES
Query id: 93b785ff-1482-4eda-95b0-b2d68b2c5e0f
┌─name───────────────┐
│ INFORMATION_SCHEMA │
│ db1_mysql │
│ db2 │
│ db3 │
│ db4_mysql │
│ db5_merge │
│ default │
│ information_schema │
│ system │
└────────────────────┘
9 rows in set. Elapsed: 0.004 sec.
サマリー
この記事では、ClickHouseをLDAPサーバーに認証させ、ロールにマッピングする基本を示しました。ClickHouse内で個々のユーザーを構成し、自動ロールマッピングを構成せずにLDAPで認証するオプションもあります。LDAPモジュールはActive Directoryへの接続にも使用できます。