Impala 는 사용자 계정과 비밀번호를 자체적으로 보관하지 않는다. CREATE USER · ALTER USER ... SET PASSWORD 같은 구문은 존재하지 않으며, 실행하면 구문 오류가 난다. 인증은 외부에 맡기고 Impala 는 인증된 신원만 받아서 권한을 판정한다.
| 계층 | 담당 |
|---|---|
| 인증(누구인가) | Kerberos 또는 LDAP. 둘 다 없으면 클라이언트가 보낸 사용자 이름을 그대로 신뢰 |
| 권한(무엇을 할 수 있는가) | Ranger 정책(구버전은 Sentry) |
| 전송 보호 | TLS |
impalad 기동 플래그로 켠다.
--enable_ldap_auth=true
--ldap_uri=ldaps://ldap.example.com:636
--ldap_bind_pattern=uid=#UID,ou=users,dc=example,dc=com
--ldap_passwords_in_clear_ok=false
비밀번호는 LDAP 디렉터리가 갖고 있으므로 변경도 그쪽에서 한다. Impala 에서 바꾸는 방법은 없다. 접속은 다음과 같다.
impala-shell -i impalad-host:21050 -l -u <user> --ldap_password_cmd='cat /path/to/secret'
--ldap_password_cmd 로 외부 명령의 출력을 비밀번호로 쓰면 명령행 이력에 값이 남지 않는다.
LDAP 을 쓸 때는 TLS 를 반드시 함께 켠다. 평문 연결에서 비밀번호를 보내는 것을 허용하는 플래그가 있지만 운영에서 쓸 이유가 없다.
--principal=impala/_HOST@REALM
--keytab_file=/etc/security/keytabs/impala.keytab
클라이언트는 티켓을 먼저 얻는다.
kinit user@REALM
impala-shell -i impalad-host:21050 -k
Kerberos 와 LDAP 을 함께 켜면 클라이언트가 둘 중 하나를 선택해 인증한다. 사람은 Kerberos, BI 도구는 LDAP 으로 나누는 구성이 흔하다.
권한은 SQL 로 준다. 정책 저장소가 Ranger 인 환경에서는 GRANT 문이 Ranger 정책으로 반영된다.
GRANT SELECT ON DATABASE sales TO ROLE analyst;
GRANT ROLE analyst TO GROUP analytics_team;
SHOW GRANT USER `alice`;
Ranger 웹 UI 에서 직접 정책을 만드는 방법도 있고, 실제 운영에서는 UI 쪽을 주 경로로 쓰는 경우가 많다. 어느 쪽을 정본으로 할지 먼저 정한다.
impala-shell -u 는 인증이 켜진 상태에서만 의미가 있다. 인증이 꺼져 있으면 아무 이름이나 통과한다.