LDAP
このページは ClickHouse Cloud には適用されません。ここで文書化されている機能は、ClickHouse Cloud サービスでは利用できません。 詳細については、ClickHouse の Cloud Compatibility ガイドを参照してください。
LDAPサーバーは、ClickHouseユーザーの認証に使用できます。これを行うための2つの異なるアプローチがあります。
- 既存のユーザー(
users.xml
で定義されているものまたはローカルアクセス制御パスに定義されているもの)のためにLDAPを外部認証機構として使用する。 - LDAPを外部ユーザーディレクトリとして使用し、LDAPサーバーに存在する場合にはローカルに定義されていないユーザーの認証を許可する。
これらのアプローチの両方には、ClickHouse構成においてLDAPサーバーを内部名で定義する必要がありますので、ほかの構成部分から参照できるようにします。
LDAPサーバーの定義
LDAPサーバーを定義するには、config.xml
にldap_servers
セクションを追加します。
例
注意:ldap_servers
セクション内で複数のLDAPサーバーを異なる名前で定義できます。
パラメータ
host
— LDAPサーバーのホスト名またはIP。これは必須のパラメータであり、空にすることはできません。port
— LDAPサーバーのポート。enable_tls
がtrue
に設定されている場合はデフォルトで636
、そうでない場合は389
です。bind_dn
— バインド用にDNを構築するために使用されるテンプレート。- 結果のDNは、各認証試行中にテンプレートのすべての
{user_name}
部分文字列を実際のユーザー名に置き換えることによって構築されます。
- 結果のDNは、各認証試行中にテンプレートのすべての
user_dn_detection
— バウンドユーザーの実際のユーザーDNを検出するためのLDAP検索パラメータを持つセクション。- これは主にサーバーがActive Directoryの場合の役割マッピングのための検索フィルターで使用されます。結果のユーザーDNは、任意の位置で許可される
{user_dn}
部分文字列を置き換える際に使用されます。デフォルトでは、ユーザーDNはバインドDNと等しく設定されますが、検索が実行されると、実際に検出されたユーザーDNの値に更新されます。base_dn
— LDAP検索のためのベースDNを構築するために使用されるテンプレート。- 結果のDNは、LDAP検索中にテンプレートのすべての
{user_name}
と{bind_dn}
部分文字列を実際のユーザー名とバインドDNに置き換えることによって構築されます。
- 結果のDNは、LDAP検索中にテンプレートのすべての
scope
— LDAP検索のスコープ。- 許可された値は:
base
、one_level
、children
、subtree
(デフォルト)。
- 許可された値は:
search_filter
— LDAP検索のための検索フィルターを構築するために使用されるテンプレート。- 結果のフィルターは、LDAP検索中にテンプレートのすべての
{user_name}
、{bind_dn}
、および{base_dn}
部分文字列を実際のユーザー名、バインドDN、およびベースDNに置き換えることにより構築されます。 - 特殊文字は、XML内で適切にエスケープされる必要があります。
- 結果のフィルターは、LDAP検索中にテンプレートのすべての
- これは主にサーバーがActive Directoryの場合の役割マッピングのための検索フィルターで使用されます。結果のユーザーDNは、任意の位置で許可される
verification_cooldown
— 成功したバインド試行の後、LDAPサーバーに連絡せずにユーザーがすべての連続リクエストに対して成功裏に認証されていると見なされる時間(秒単位)の期間。- キャッシュを無効にし、各認証リクエストのためにLDAPサーバーに連絡することを強制するには、
0
(デフォルト)を指定します。
- キャッシュを無効にし、各認証リクエストのためにLDAPサーバーに連絡することを強制するには、
enable_tls
— LDAPサーバーへの安全な接続の使用をトリガーするフラグ。- プレーンテキストの
ldap://
プロトコル(推奨しません)にはno
を指定します。 - SSL/TLSのLDAP
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
、demand
(デフォルト)。
- 許可された値は:
tls_cert_file
— 証明書ファイルへのパス。tls_key_file
— 証明書キーファイルへのパス。tls_ca_cert_file
— CA証明書ファイルへのパス。tls_ca_cert_dir
— CA証明書を含むディレクトリへのパス。tls_cipher_suite
— 許可されている暗号スイート(OpenSSL表記で)。
LDAP外部認証機構
リモートLDAPサーバーを、ローカルに定義されたユーザー(users.xml
で定義されているものまたはローカルアクセス制御パスに定義されているもの)のパスワードを検証する方法として使用できます。これを実現するには、ユーザー定義のpassword
や類似のセクションの代わりに、事前に定義されたLDAPサーバー名を指定します。
各ログイン試行時に、ClickHouseはLDAPサーバーのLDAPサーバーの定義で定義されたbind_dn
パラメータによって指定されたDNに"バインド"しようとし、成功すればユーザーが認証されたと見なされます。これを「シンプルバインド」メソッドとも呼びます。
例
注意:ユーザーmy_user
がmy_ldap_server
を参照しています。このLDAPサーバーは、前述のようにメインのconfig.xml
ファイルに構成されている必要があります。
SQL駆動のアクセス制御およびアカウント管理が有効になっている場合、LDAPサーバーによって認証されたユーザーもCREATE USERステートメントを使用して作成できます。
クエリ:
LDAP外部ユーザーディレクトリ
ローカルに定義されたユーザーに加えて、リモートLDAPサーバーをユーーディフィニションのソースとして利用できます。これを実現するには、config.xml
ファイルのusers_directories
セクション内のldap
セクションに事前に定義されたLDAPサーバー名(LDAPサーバーの定義を参照)を指定します。
各ログイン試行時に、ClickHouseはローカルでユーザー定義を見つけて通常通り認証しようとします。ユーザーが定義されていない場合、ClickHouseは外部LDAPディレクトリに定義が存在すると仮定し、提供された資格情報を使用してLDAPサーバーの所定のDNに"バインド"しようとします。成功すれば、ユーザーは存在すると見なされ、認証されます。ユーザーはroles
セクションに指定されたリストから役割が割り当てられます。さらに、LDAPの"検索"を実行し、結果を変換して役割名として扱い、role_mapping
セクションも構成されている場合にはユーザーに割り当てることができます。これにはSQL駆動のアクセス制御およびアカウント管理が有効になっており、役割はCREATE ROLEステートメントを使って作成されることが前提です。
例
config.xml
に入ります。
user_directories
セクション内のldap
セクションで参照されているmy_ldap_server
は、config.xml
で構成された事前に定義されたLDAPサーバーである必要があることに注意してください(LDAPサーバーの定義を参照)。
パラメータ
server
— 上記のldap_servers
構成セクションに定義されたLDAPサーバー名の1つ。このパラメータは必須であり、空にすることはできません。roles
— LDAPサーバーから取得される各ユーザーに割り当てられるローカルに定義された役割のリストを持つセクション。- ここで役割が指定されていない場合、または役割マッピング中に割り当てられない場合、認証後にユーザーは何のアクションも実行できません。
role_mapping
— LDAP検索パラメータとマッピングルールを持つセクション。- ユーザーが認証されるとき、LDAPにバウンドしている間に、
search_filter
とログインユーザーの名前を使用してLDAP検索が実行されます。その検索中に見つかった各エントリに対して、指定された属性の値が抽出されます。指定された接頭辞を持つ各属性値に対して、接頭辞が元の文字列から削除され、残りの値がClickHouseで定義されたローカル役割の名前になります。ローカル役割は事前にCREATE ROLEステートメントによって作成されることが期待されています。 - 同じ
ldap
セクション内で複数のrole_mapping
セクションが定義されることができます。すべてが適用されます。base_dn
— LDAP検索のためのベースDNを構築するために使用されるテンプレート。- 結果のDNは、各LDAP検索中にテンプレートのすべての
{user_name}
、{bind_dn}
、および{user_dn}
部分文字列を実際のユーザー名、バインドDN、およびユーザーDNに置き換えることによって構築されます。
- 結果のDNは、各LDAP検索中にテンプレートのすべての
scope
— LDAP検索のスコープ。- 許可された値は:
base
、one_level
、children
、subtree
(デフォルト)。
- 許可された値は:
search_filter
— LDAP検索のための検索フィルターを構築するために使用されるテンプレート。- 結果のフィルターは、各LDAP検索中にテンプレートのすべての
{user_name}
、{bind_dn}
、{user_dn}
、および{base_dn}
部分文字列を実際のユーザー名、バインドDN、ユーザーDN、およびベースDNに置き換えることにより構築されます。 - 特殊文字は、XML内で適切にエスケープされる必要があります。
- 結果のフィルターは、各LDAP検索中にテンプレートのすべての
attribute
— LDAP検索によって返される値の属性名。デフォルトはcn
です。prefix
— LDAP検索によって返される元の文字列リストの各文字列の前にあると期待される接頭辞。接頭辞は元の文字列から削除され、結果の文字列はローカル役割名として扱われます。デフォルトでは空です。
- ユーザーが認証されるとき、LDAPにバウンドしている間に、