CDP 에서는 krb5.conf 나 core-site.xml 을 직접 고치지 않고 Cloudera Manager 에서 관리한다. HDFS → Configuration 에서 auth_to_local 을 검색하면 "Additional Rules to Map Kerberos Principals to Short Names" 항목이 있고, 클러스터 레벨 Core Configuration(CM → 클러스터 → Core Configuration) 에서도 같은 키(hadoop.security.auth_to_local)를 둔다. Atlas 로그의 KerberosName auth_to_local rule mechanism not set 경고도 이 값이 비어 있을 때 난다.
RULE:[1:$1@$0](.*@EXAMPLE.COM)s/@.*//
RULE:[2:$1@$0](.*@EXAMPLE.COM)s/@.*//
DEFAULT
[1:$1@$0] 은 user@REALM 형식, [2:$1@$0] 은 service/host@REALM 형식에 적용된다. 적용 순서는 설정 저장 → Deploy Client Configuration → HDFS 재시작 → ZooKeeper · YARN · Hive · Impala · Kudu 순 재시작이다.
hadoop org.apache.hadoop.security.HadoopKerberosName "impala/host.example.com@EXAMPLE.COM" # impala 가 나와야 정상
"Kerberos Principal 을 약식 이름으로 매핑할 HDFS 규칙 사용" 옵션을 켜면 Impala 가 HDFS 의 규칙을 그대로 쓴다.
Kudu Master 의 gflagfile_role_safety_valve 에 --use_system_auth_to_local=true 를 넣으면 Kudu 도 위 규칙으로 principal 을 짧은 이름으로 바꾼다. 이때 규칙이 [1:...] 하나뿐이면 kudu/host@REALM 같은 2 컴포넌트 principal 이 매칭되지 않고 DEFAULT 로 떨어져 tserver 가 master 에 heartbeat 를 보낼 때 Unauthorized access ... username='iukxarmcpd' 처럼 엉뚱한 이름으로 거부된다.
RULE:[1:$1@$0](.*@EXAMPLE.COM)s/@.*//
RULE:[2:$1@$0](kudu@EXAMPLE.COM)s/.*/kudu/
RULE:[2:$1/$2@$0](.*@EXAMPLE.COM)s/@.*//
DEFAULT
2 컴포넌트 규칙을 추가하거나, 급하면 --use_system_auth_to_local=false 로 되돌린다. Ranger 감사에서 Kudu 접근이 impala 사용자로 찍히는 것은 Impala 가 Kudu 에 접근할 때 자기 서비스 principal 을 쓰기 때문이며, 실제 사용자 권한 검사는 Ranger 의 Kudu 정책이 아니라 Impala 쪽에서 이루어진다.
klist -kt /var/run/cloudera-scm-agent/process/*-kudu-KUDU_MASTER/kudu.keytab
hadoop org.apache.hadoop.security.HadoopKerberosName "kudu/host@EXAMPLE.COM"
id kudu; sssctl user-checks kudu
grep -A2 hadoop.security.auth_to_local /etc/hadoop/conf/core-site.xml
NameNode HA 를 나중에 구성했으면 CM 에서 Kerberos credential 을 다시 생성(Regenerate)해야 새 principal 이 keytab 에 들어간다.