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

LDAP

Not supported in ClickHouse Cloud
注記

このページは ClickHouse Cloud には適用されません。ここで文書化されている機能は、ClickHouse Cloud サービスでは利用できません。 詳細については、ClickHouse の Cloud Compatibility ガイドを参照してください。

LDAPサーバーは、ClickHouseユーザーの認証に使用できます。これを行うための2つの異なるアプローチがあります。

  • 既存のユーザー(users.xmlで定義されているものまたはローカルアクセス制御パスに定義されているもの)のためにLDAPを外部認証機構として使用する。
  • LDAPを外部ユーザーディレクトリとして使用し、LDAPサーバーに存在する場合にはローカルに定義されていないユーザーの認証を許可する。

これらのアプローチの両方には、ClickHouse構成においてLDAPサーバーを内部名で定義する必要がありますので、ほかの構成部分から参照できるようにします。

LDAPサーバーの定義

LDAPサーバーを定義するには、config.xmlldap_serversセクションを追加します。

注意:ldap_serversセクション内で複数のLDAPサーバーを異なる名前で定義できます。

パラメータ

  • host — LDAPサーバーのホスト名またはIP。これは必須のパラメータであり、空にすることはできません。
  • port — LDAPサーバーのポート。enable_tlstrueに設定されている場合はデフォルトで636、そうでない場合は389です。
  • bind_dn — バインド用にDNを構築するために使用されるテンプレート。
    • 結果のDNは、各認証試行中にテンプレートのすべての{user_name}部分文字列を実際のユーザー名に置き換えることによって構築されます。
  • user_dn_detection — バウンドユーザーの実際のユーザーDNを検出するためのLDAP検索パラメータを持つセクション。
    • これは主にサーバーがActive Directoryの場合の役割マッピングのための検索フィルターで使用されます。結果のユーザーDNは、任意の位置で許可される{user_dn}部分文字列を置き換える際に使用されます。デフォルトでは、ユーザーDNはバインドDNと等しく設定されますが、検索が実行されると、実際に検出されたユーザーDNの値に更新されます。
      • base_dn — LDAP検索のためのベースDNを構築するために使用されるテンプレート。
        • 結果のDNは、LDAP検索中にテンプレートのすべての{user_name}{bind_dn}部分文字列を実際のユーザー名とバインドDNに置き換えることによって構築されます。
      • scope — LDAP検索のスコープ。
        • 許可された値は:baseone_levelchildrensubtree(デフォルト)。
      • search_filter — LDAP検索のための検索フィルターを構築するために使用されるテンプレート。
        • 結果のフィルターは、LDAP検索中にテンプレートのすべての{user_name}{bind_dn}、および{base_dn}部分文字列を実際のユーザー名、バインドDN、およびベースDNに置き換えることにより構築されます。
        • 特殊文字は、XML内で適切にエスケープされる必要があります。
  • verification_cooldown — 成功したバインド試行の後、LDAPサーバーに連絡せずにユーザーがすべての連続リクエストに対して成功裏に認証されていると見なされる時間(秒単位)の期間。
    • キャッシュを無効にし、各認証リクエストのためにLDAPサーバーに連絡することを強制するには、0(デフォルト)を指定します。
  • enable_tls — LDAPサーバーへの安全な接続の使用をトリガーするフラグ。
    • プレーンテキストのldap://プロトコル(推奨しません)にはnoを指定します。
    • SSL/TLSのLDAP ldaps://プロトコル(推奨、デフォルト)にはyesを指定します。
    • 従来のStartTLSプロトコル(プレーンテキストのldap://プロトコル、TLSにアップグレード)にはstarttlsを指定します。
  • tls_minimum_protocol_version — SSL/TLSの最小プロトコルバージョン。
    • 許可された値は:ssl2ssl3tls1.0tls1.1tls1.2(デフォルト)。
  • tls_require_cert — SSL/TLSピア証明書の検証動作。
    • 許可された値は:neverallowtrydemand(デフォルト)。
  • 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_usermy_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に置き換えることによって構築されます。
      • scope — LDAP検索のスコープ。
        • 許可された値は:baseone_levelchildrensubtree(デフォルト)。
      • search_filter — LDAP検索のための検索フィルターを構築するために使用されるテンプレート。
        • 結果のフィルターは、各LDAP検索中にテンプレートのすべての{user_name}{bind_dn}{user_dn}、および{base_dn}部分文字列を実際のユーザー名、バインドDN、ユーザーDN、およびベースDNに置き換えることにより構築されます。
        • 特殊文字は、XML内で適切にエスケープされる必要があります。
      • attribute — LDAP検索によって返される値の属性名。デフォルトはcnです。
      • prefix — LDAP検索によって返される元の文字列リストの各文字列の前にあると期待される接頭辞。接頭辞は元の文字列から削除され、結果の文字列はローカル役割名として扱われます。デフォルトでは空です。