Impala 는 각 impalad 가 같은 포트에서 Kerberos 와 LDAP 요청을 모두 받는다. Kerberos 가 켜진 클러스터에 LDAP 을 추가해도 한쪽을 끌 필요가 없다. LDAP 으로 인증되는 것은 클라이언트와 Impala 사이뿐이고, impalad · statestored · catalogd 간 내부 통신은 Kerberos 를 유지해야 한다.
| 인증 | impala-shell |
|---|---|
| Kerberos | impala-shell -k |
| LDAP(AD) | impala-shell -l -u <user> --ssl --ca_cert=<ca.pem> |
Cloudera Manager → Impala → Configuration 에서 ldap 으로 검색한다.
| CM 필드 | 플래그 | 값 |
|---|---|---|
| Enable LDAP Authentication | --enable_ldap_auth |
체크 |
| LDAP URL | --ldap_uri |
ldap://ad.example.com:389 |
| Active Directory Domain | --ldap_domain |
example.com — 짧은 이름 hong 을 hong@example.com(UPN) 으로 변환 |
Active Directory Domain · LDAP BaseDN · LDAP Pattern(--ldap_bind_pattern="cn=#UID,ou=Users,dc=example,dc=com") 은 상호 배타적이라 둘 이상 지정하면 Impala 가 기동하지 않는다. AD 는 --ldap_domain 하나만 쓴다.
LDAP 서버 구간을 TLS 로 보호할 수 없으면 --ldap_passwords_in_clear_ok=false(기본) 상태에서 impalad 가 기동에 실패한다. 이 플래그는 검색 필드에 없으므로 "Impala Daemon Command Line Argument Advanced Configuration Snippet (Safety Valve)" 에 넣는다.
--ldap_passwords_in_clear_ok=true
Save Changes → Impala 재시작. 클라이언트도 평문 전송을 명시적으로 허용해야 한다.
impala-shell -i <impalad-host> -l -u hong --auth_creds_ok_in_clear
LDAP 서버 구간이 평문이더라도 클라이언트 ↔ Impala 구간은 --ssl_server_certificate / --ssl_private_key 로 TLS 를 적용해 노출 구간을 좁힌다. TLS 가 가능한 환경은 ldaps://(636) 또는 --ldap_tls(StartTLS) + --ldap_ca_certificate(.PEM) 을 쓴다.
NLB 는 L4 TCP 로드밸런서라 TLS 를 종료하지 않고 통과시킨다. Kerberos 는 접속 대상 호스트가 실제 처리 호스트와 같은지 검증하므로 NLB 에서 TLS 를 종료하면 인증서 · principal 불일치가 난다. NLB 는 반드시 TCP 패스스루로 두고 ACM 인증서를 붙이지 않는다.
impala-nlb.example.com:21050 형식으로 입력 후 Impala 재시작.impala/<nlb-fqdn>@REALM principal 과 keytab 생성. CM 이 --principal=impala/<proxy_host>@REALM, --be_principal=impala/<actual_host>@REALM, 병합 keytab 을 impalad 옵션에 넣어 준다.SAN 을 못 바꿀 때의 우회는 JDBC 에서 CAIssuedCertNamesMismatch=1 로 불일치를 무시하는 것인데 보안상 권장되지 않는다.
jdbc:impala://<NLB_FQDN>:21050/default;AuthMech=1;KrbHostFQDN=<NLB_FQDN>;KrbServiceName=impala;KrbRealm=<REALM>;ssl=1;CAIssuedCertNamesMismatch=1;sslTrustStore=<truststore.jks>
truststore 에는 Auto-TLS 루트 CA(cm-auto-global_cacerts.pem 을 JKS 로 변환) 를 넣는다. 장시간 쿼리가 끊기지 않도록 target group 의 stickiness(source IP) 를 켜며, Hue 를 쓰면 특히 중요하다. 진단 시 Impala 2.12 이상은 impala-shell -b/--kerberos_host_fqdn 으로 개별 데몬에 직접 붙을 수 있다.
CDV 의 Impala 커넥션은 LDAP(username/password) 또는 Kerberos(GSSAPI) 중 하나를 고른다. Kerberos 연결 값은 CM 의 Impala 설정에서 가져온다. 호스트는 impalad 또는 LB, 포트는 hs2_http_port(예 28000) 또는 21050, auth_mechanism GSSAPI, use_http_transport=true, http_path=cliservice, use_ssl 은 client_services_ssl_enabled 값, kerberos_service_name=impala. CDV 호스트에 /etc/krb5.conf 와 keytab 을 먼저 준비해야 하고, CDV 기동 후 자격증명을 넣었다면 재시작한다.