LDAP

LDAP (LDAP)

LDAP 서버를 사용해 ClickHouse 사용자를 인증할 수 있어요. 이를 위한 두 가지 다른 접근 방식이 있습니다: 기존 사용자를 위한 외부 인증기로 사용하거나, 외부 사용자 디렉터리로 사용하는 것입니다.

출처: 문서

본문

이 페이지는 ClickHouse Cloud에는 적용되지 않아요. 여기서 설명하는 기능은 ClickHouse Cloud 서비스에서는 사용할 수 없습니다.

ClickHouse Cloud Compatibility 가이드를 함께 참고해 주세요.

LDAP 서버를 사용해 ClickHouse 사용자를 인증할 수 있습니다. 이를 위한 두 가지 다른 접근 방식이 있습니다:

  • 기존 사용자(users.xml 또는 로컬 접근 제어 경로에 정의된)를 위한 외부 인증기로 LDAP 사용.
  • 외부 사용자 디렉터리로 LDAP을 사용하고, 로컬에 정의되지 않은 사용자가 LDAP 서버에 존재하면 인증을 허용.

두 접근 방식 모두, 설정의 다른 부분이 참조할 수 있도록 ClickHouse 설정에 내부적으로 이름이 붙은 LDAP 서버가 정의되어 있어야 합니다.

LDAP 서버 정의 (LDAP server definition)

LDAP 서버를 정의하려면 config.xmlldap_servers 섹션을 추가해야 합니다.

예시

<clickhouse>
    <!- ... -->
    <ldap_servers>
        <!- Typical LDAP server. -->
        <my_ldap_server>
            <host>localhost</host>
            <port>636</port>
            <bind_dn>uid={user_name},ou=users,dc=example,dc=com</bind_dn>
            <verification_cooldown>300</verification_cooldown>
            <follow_referrals>false</follow_referrals>
            <enable_tls>yes</enable_tls>
            <tls_minimum_protocol_version>tls1.2</tls_minimum_protocol_version>
            <tls_require_cert>demand</tls_require_cert>
            <tls_cert_file>/path/to/tls_cert_file</tls_cert_file>
            <tls_key_file>/path/to/tls_key_file</tls_key_file>
            <tls_ca_cert_file>/path/to/tls_ca_cert_file</tls_ca_cert_file>
            <tls_ca_cert_dir>/path/to/tls_ca_cert_dir</tls_ca_cert_dir>
            <tls_cipher_suite>ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:AES256-GCM-SHA384</tls_cipher_suite>
        </my_ldap_server>

        <!- Typical Active Directory with configured user DN detection for further role mapping. -->
        <my_ad_server>
            <host>localhost</host>
            <port>389</port>
            <bind_dn>EXAMPLE\{user_name}</bind_dn>
            <user_dn_detection>
                <base_dn>CN=Users,DC=example,DC=com</base_dn>
                <search_filter>(&amp;(objectClass=user)(sAMAccountName={user_name}))</search_filter>
            </user_dn_detection>
            <enable_tls>no</enable_tls>
        </my_ad_server>
    </ldap_servers>
</clickhouse>

ldap_servers 섹션 안에 서로 다른 이름으로 여러 LDAP 서버를 정의할 수 있다는 점을 기억하세요.

파라미터

파라미터 기본값 설명
host LDAP 서버 호스트명 또는 IP. 이 파라미터는 필수이며 비어 있을 수 없습니다.
port 636 / 389 LDAP 서버 포트. enable_tlsyes이면 636, 그렇지 않으면 389가 기본값입니다.
bind_dn 바인딩할 DN을 구성하는 데 사용되는 템플릿. 인증 시도마다 템플릿의 모든 {user_name} 부분 문자열이 실제 사용자 이름으로 대체되어 결과 DN이 구성됩니다.
auth_dn_prefix 더 이상 사용되지 않음. bind_dn의 대안. bind_dn과 함께 사용할 수 없습니다. 지정하면 바인드 DN이 auth_dn_prefix + {user_name} + auth_dn_suffix로 구성됩니다. 예를 들어 auth_dn_prefixuid=로, auth_dn_suffix,ou=users,dc=example,dc=com으로 설정하는 것은 bind_dnuid={user_name},ou=users,dc=example,dc=com으로 설정하는 것과 같습니다.
auth_dn_suffix 더 이상 사용되지 않음. auth_dn_prefix 참고.
verification_cooldown 0 성공적인 바인드 시도 후의 시간(초)으로, 이 기간 동안은 LDAP 서버에 접촉하지 않고 사용자가 모든 연속 요청에 대해 성공적으로 인증된 것으로 간주합니다. 0을 지정하면 캐싱을 비활성화하고 매 인증 요청마다 LDAP 서버에 접촉하도록 강제합니다.
follow_referrals false LDAP 클라이언트 라이브러리가 서버가 반환한 LDAP referral을 자동으로 추적하도록 허용하는 플래그. 주로 높은 수준의 base DN(예: DC=example,DC=com)에서의 하위 트리 검색이 referral/검색 참조(예: DC=DomainDnsZones,...)를 반환할 수 있는 Microsoft Active Directory 환경에서 관련됩니다. 명시적으로 파티션 간 검색이 필요할 때만 true로 설정하세요.
enable_tls yes LDAP 서버에 대한 보안 연결 사용을 트리거하는 플래그. 일반 텍스트 ldap:// 프로토콜은 no(권장되지 않음), LDAP over SSL/TLS ldaps:// 프로토콜은 yes(권장), 레거시 StartTLS 프로토콜(일반 텍스트 ldap:// 프로토콜을 TLS로 업그레이드)은 starttls로 지정합니다.
tls_minimum_protocol_version tls1.2 SSL/TLS의 최소 프로토콜 버전. 허용 값: ssl2, ssl3, tls1.0, tls1.1, tls1.2.
tls_require_cert demand 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 허용된 cipher suite (OpenSSL 표기).
search_limit 256 이 서버 정의가 수행하는 LDAP 검색 쿼리(사용자 DN 감지와 역할 매핑용)가 반환할 수 있는 최대 항목 수.

user_dn_detection 하위 파라미터

바인드된 사용자의 실제 사용자 DN을 감지하기 위한 LDAP 검색 파라미터가 있는 섹션. 주로 서버가 Active Directory일 때 추가 역할 매핑을 위한 검색 필터에서 사용됩니다. 결과 사용자 DN은 {user_dn} 부분 문자열이 허용되는 모든 곳에서 대체할 때 사용됩니다. 기본적으로 사용자 DN은 바인드 DN과 같게 설정되지만, 검색이 수행되면 실제 감지된 사용자 DN 값으로 업데이트됩니다.

파라미터 기본값 설명
base_dn LDAP 검색의 base DN을 구성하는 데 사용되는 템플릿. LDAP 검색 중 템플릿의 모든 {user_name}{bind_dn} 부분 문자열이 실제 사용자 이름과 바인드 DN으로 대체되어 결과 DN이 구성됩니다.
scope subtree LDAP 검색의 범위. 허용 값: base, one_level, children, subtree.
search_filter LDAP 검색의 검색 필터를 구성하는 데 사용되는 템플릿. LDAP 검색 중 템플릿의 모든 {user_name}, {bind_dn}, {base_dn} 부분 문자열이 실제 사용자 이름, 바인드 DN, base DN으로 대체되어 결과 필터가 구성됩니다. XML에서 특수 문자는 올바르게 이스케이프해야 합니다.

LDAP 외부 인증기 (LDAP external authenticator)

원격 LDAP 서버를 로컬에 정의된 사용자(users.xml이나 로컬 접근 제어 경로에 정의된)의 비밀번호를 검증하는 방법으로 사용할 수 있습니다. 이를 위해 사용자 정의에서 password나 유사한 섹션 대신 앞서 정의한 LDAP 서버 이름을 지정하세요.

각 로그인 시도에서 ClickHouse는 제공된 자격 증명으로 LDAP 서버 정의bind_dn 파라미터가 정의한 지정 DN에 "바인드"하려고 시도하며, 성공하면 사용자가 인증된 것으로 간주됩니다. 이는 종종 "simple bind" 방법이라고 합니다.

예시

<clickhouse>
    <!- ... -->
    <users>
        <!- ... -->
        <my_user>
            <!- ... -->
            <ldap>
                <server>my_ldap_server</server>
            </ldap>
        </my_user>
    </users>
</clickhouse>

사용자 my_usermy_ldap_server를 참조한다는 점을 기억하세요. 이 LDAP 서버는 앞서 설명한 대로 메인 config.xml 파일에 구성되어 있어야 합니다.

SQL 기반 접근 제어 및 계정 관리가 활성화되면, LDAP 서버가 인증하는 사용자도 CREATE USER 문으로 만들 수 있습니다.

쿼리

CREATE USER my_user IDENTIFIED WITH ldap SERVER 'my_ldap_server';

LDAP 외부 사용자 디렉터리 (LDAP external user directory)

로컬에 정의된 사용자에 더해, 원격 LDAP 서버를 사용자 정의의 출처로 사용할 수 있습니다. 이를 위해 config.xml 파일의 users_directories 섹션 안의 ldap 섹션에 앞서 정의한 LDAP 서버 이름(LDAP Server Definition 참고)을 지정하세요.

각 로그인 시도에서 ClickHouse는 로컬에서 사용자 정의를 찾아 평소처럼 인증하려고 합니다. 사용자가 정의되어 있지 않으면 ClickHouse는 그 정의가 외부 LDAP 디렉터리에 존재한다고 가정하고, 제공된 자격 증명으로 LDAP 서버의 지정 DN에 "바인드"하려고 시도합니다. 성공하면 사용자가 존재하고 인증된 것으로 간주됩니다. 사용자는 roles 섹션에 지정된 목록의 역할을 할당받습니다. 추가로, role_mapping 섹션도 구성되어 있으면 LDAP "검색"을 수행하고 결과를 변환해 역할 이름으로 취급한 다음 사용자에게 할당할 수 있습니다. 이 모든 것은 SQL 기반 접근 제어 및 계정 관리가 활성화되고 역할이 CREATE ROLE 문으로 생성되었음을 전제합니다.

예시 config.xml에 들어가는 내용입니다.

<clickhouse>
    <!- ... -->
    <user_directories>
        <!- Typical LDAP server. -->
        <ldap>
            <server>my_ldap_server</server>
            <roles>
                <my_local_role1 />
                <my_local_role2 />
            </roles>
            <role_mapping>
                <base_dn>ou=groups,dc=example,dc=com</base_dn>
                <scope>subtree</scope>
                <search_filter>(&amp;(objectClass=groupOfNames)(member={bind_dn}))</search_filter>
                <attribute>cn</attribute>
                <prefix>clickhouse_</prefix>
            </role_mapping>
        </ldap>

        <!- Typical Active Directory with role mapping that relies on the detected user DN. -->
        <ldap>
            <server>my_ad_server</server>
            <role_mapping>
                <base_dn>CN=Users,DC=example,DC=com</base_dn>
                <attribute>CN</attribute>
                <scope>subtree</scope>
                <search_filter>(&amp;(objectClass=group)(member={user_dn}))</search_filter>
                <prefix>clickhouse_</prefix>
            </role_mapping>
        </ldap>
    </user_directories>
</clickhouse>

user_directories 섹션 안의 ldap 섹션에서 참조하는 my_ldap_serverconfig.xml에 구성된 앞서 정의된 LDAP 서버여야 합니다(LDAP Server Definition 참고).

파라미터

파라미터 기본값 설명
server ldap_servers 설정 섹션에서 정의된 LDAP 서버 이름 중 하나. 이 파라미터는 필수이며 비어 있을 수 없습니다.
roles LDAP 서버에서 가져온 각 사용자에게 할당될 로컬에 정의된 역할의 목록이 있는 섹션. 여기나 역할 매핑 중(아래)에 역할이 지정되지 않으면 사용자는 인증 후 어떤 작업도 수행할 수 없습니다.

role_mapping 하위 파라미터

LDAP 검색 파라미터와 매핑 규칙이 있는 섹션. 사용자가 인증하면, LDAP에 바인드된 상태에서 로그인한 사용자의 이름으로 search_filter를 사용해 LDAP 검색이 수행됩니다. 그 검색 중에 발견된 각 항목에 대해 지정된 속성의 값이 추출됩니다. 지정된 접두사를 가진 각 속성 값에 대해 접두사가 제거되고, 값의 나머지 부분이 ClickHouse에 정의된 로컬 역할의 이름이 됩니다. 이 역할은 CREATE ROLE 문으로 미리 생성되어 있어야 합니다. 같은 ldap 섹션 안에 여러 role_mapping 섹션을 정의할 수 있습니다. 모두 적용됩니다.

파라미터 기본값 설명
base_dn LDAP 검색의 base DN을 구성하는 데 사용되는 템플릿. LDAP 검색마다 템플릿의 모든 {user_name}, {bind_dn}, {user_dn} 부분 문자열이 실제 사용자 이름, 바인드 DN, 사용자 DN으로 대체되어 결과 DN이 구성됩니다.
scope subtree LDAP 검색의 범위. 허용 값: base, one_level, children, subtree.
search_filter LDAP 검색의 검색 필터를 구성하는 데 사용되는 템플릿. LDAP 검색마다 템플릿의 모든 {user_name}, {bind_dn}, {user_dn}, {base_dn} 부분 문자열이 실제 사용자 이름, 바인드 DN, 사용자 DN, base DN으로 대체되어 결과 필터가 구성됩니다. XML에서 특수 문자는 올바르게 이스케이프해야 합니다.
attribute cn LDAP 검색이 반환할 값이 있는 속성 이름.
prefix empty LDAP 검색이 반환한 원래 문자열 목록의 각 문자열 앞에 있을 것으로 예상되는 접두사. 접두사는 원래 문자열에서 제거되고 결과 문자열은 로컬 역할 이름으로 취급됩니다.

더 알아보기 (Learn more)