メインコンテンツまでスキップ
メインコンテンツまでスキップ

ClickHouseを使用してLDAPによる認証とロールマッピングを構成する

Not supported in ClickHouse Cloud
注記

このページは ClickHouse Cloud には適用されません。ここに記載されている機能は ClickHouse Cloud サービスでは利用できません。詳細については ClickHouse の Cloud Compatibility ガイドをご覧ください。

ClickHouseは、ユーザーがClickHouseデータベースに認証するためにLDAPを使用するように構成できます。このガイドでは、公開ディレクトリに対して認証を行うLDAPシステムとの統合の単純な例を提供します。

1. ClickHouseでのLDAP接続設定の構成

  1. この公共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
...
  1. 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>
注記

<test_ldap_server>タグは、特定のLDAPサーバーを識別するための任意のラベルです。

上記で使用される基本設定は次のとおりです:

パラメータ説明
hostLDAPサーバーのホスト名またはIPldap.forumsys.com
portLDAPサーバーのディレクトリポート389
bind_dnユーザーへのテンプレートパスuid={user_name},dc=example,dc=com
enable_tlsセキュアLDAPを使用するかどうかno
tls_require_cert接続に証明書が必要かどうかnever
注記

この例では、公開サーバーが389を使用し、セキュアポートを使用していないため、デモ目的でTLSを無効にします。

注記

LDAP設定の詳細については、LDAPドキュメントページを参照してください。

  1. <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>(&amp;(objectClass=groupOfUniqueNames)(uniqueMember={bind_dn}))</search_filter>
             <attribute>cn</attribute>
          </role_mapping>
    </ldap>
</user_directories>

上記で使用される基本設定は次のとおりです:

パラメータ説明
server前のldap_serversセクションで定義されたラベルtest_ldap_server
rolesClickHouseでユーザーがマッピングされるロールの名前scientists_role
base_dnユーザーのグループを検索するためのベースパスdc=example,dc=com
search_filterユーザーをマッピングするために選択するグループを特定するLDAP検索フィルタ(&(objectClass=groupOfUniqueNames)(uniqueMember={bind_dn}))
attributeどの属性名から値を返すべきかcn
  1. 設定を適用するためにClickHouseサーバーを再起動します。

2. ClickHouseデータベースのロールと権限を構成する

注記

このセクションの手順は、ClickHouseでSQLアクセスコントロールとアカウント管理が有効になっていることを前提とします。これを有効にするには、SQL Users and Rolesガイドを参照してください。

  1. config.xmlファイルのロールマッピングセクションで使用されるのと同じ名前のロールをClickHouseで作成します。
CREATE ROLE scientists_role;
  1. ロールに必要な権限を付与します。次のステートメントは、LDAPを通じて認証できる任意のユーザーに管理権限を付与します:
GRANT ALL ON *.* TO scientists_role;

3. LDAP設定をテストする

  1. 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 :)
注記

ステップ1でldapsearchコマンドを使用して、ディレクトリ内のすべてのユーザーを表示します。すべてのユーザーのパスワードはpasswordです。

  1. ユーザーが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サーバーに認証させ、ロールにマッピングする基本について説明しました。また、LDAPで認証される個別ユーザーをClickHouseで構成するオプションもありますが、ロールマッピングを自動化することなしにそれを行うことも可能です。LDAPモジュールは、Active Directoryに接続するためにも使用できます。