본문으로 건너뛰기
최종 수정: 에

플러그형 인증 및 권한 부여

요약 Apache Doris는 신원(누구인지)과 정책(무엇을 할 수 있는지)을 분리하므로, FE를 포크하지 않고도 양쪽 백엔드를 각각 교체할 수 있습니다. MySQL 핸드셰이크는 Authenticator를 호출하며, 사용할 구현은 authentication_type으로 선택합니다. 기본 제공 비밀번호 인증, LDAP 또는 Java SPI를 통해 검색된 플러그인을 사용할 수 있습니다. 권한 부여는 CatalogAccessController를 통해 처리하며, 사용할 구현은 access_controller_type으로 선택합니다. 기본 제공 RBAC 엔진이나 중앙 집중식 정책 관리를 위한 Apache Ranger를 사용할 수 있습니다. 설정을 지정하고 플러그인 jar를 배치한 뒤 다시 시작하면 됩니다.

Apache Doris 플러그형 인증 및 권한 부여: FE를 포크하지 않고 Doris의 신원 및 정책 백엔드를 교체하세요. 설정으로 LDAP, Kerberos, OIDC 또는 Ranger를 선택하고, 체인을 구성해 대체 인증 경로를 마련하세요.

Apache Doris에서 플러그형 인증 및 권한 부여를 사용하는 이유는 무엇인가요?​

Apache Doris의 플러그형 인증 및 권한 부여를 사용하면 기존 IAM 스택(LDAP, Kerberos, OIDC, Ranger)에서 웨어하우스의 신원과 정책을 관리할 수 있으므로, 플랫폼 팀이 별도의 사용자 목록을 유지할 필요가 없습니다. 대부분의 팀은 이미 IAM 스택을 갖춘 상태에서 Doris를 도입합니다. LDAP 디렉터리, Kerberos 영역, SSO용 OIDC 공급자, Hive 권한을 관리하는 Ranger 또는 Sentry 배포 환경이 이미 존재합니다. 웨어하우스가 이 모든 것을 활용하지 못하면 플랫폼 팀은 별도의 사용자 목록을 유지하고, 스크립트로 비밀번호를 동기화하며, 쿼리 기록의 사용자 신원이 나머지 레이크하우스와 다른 이유를 감사 담당자에게 설명해야 합니다. 동일한 신원 체계에 다중 Catalog 페더레이션과 데이터 계보를 결합하면 데이터 레이크 전반의 감사 추적을 일관되게 연결할 수 있습니다.

Apache Doris는 인증과 권한 부여를 모두 플러그인으로 확장할 수 있도록 설계되었습니다. 인증 백엔드는 Java SPI를 통해 자동으로 검색되며, 권한 부여 백엔드도 같은 방식으로 검색됩니다. 로컬 비밀번호 인증에서 LDAP로 전환하는 데는 설정 한 줄이면 됩니다. 기본 제공 RBAC에서 Ranger로 전환하는 데도 별도의 설정 한 줄이면 됩니다. 두 선택은 서로 독립적이므로, OIDC 플러그인으로 인증하고 Ranger로 권한을 부여하거나 LDAP로 인증하고 기본 제공 RBAC로 권한을 부여할 수 있습니다.

  • 별도의 Doris 사용자 목록 대신 데이터 플랫폼 전체에서 하나의 IdP를 사용합니다.
  • 이미 Hive, HDFS, Iceberg를 관리하는 Ranger에서 정책을 중앙 집중식으로 관리하고, Doris도 같은 서비스에 연결합니다.
  • FE 소스를 수정하지 않고 사용자 지정 인증(독자적인 토큰 형식, 테넌트를 구분하는 비밀번호 검증)을 구현합니다.

Apache Doris의 플러그형 인증 및 권한 부여란 무엇인가요?​

Apache Doris의 플러그형 인증 및 권한 부여는 FE에 나란히 마련된 두 개의 확장 지점입니다. 첫 번째는 Authenticator 인터페이스로, MySQL 핸드셰이크마다 한 번 호출되어 인증 패킷의 자격 증명을 UserIdentity로 변환합니다. 두 번째는 CatalogAccessController 인터페이스로, 쿼리마다 호출되어 해당 신원으로 Catalog, 데이터베이스, 테이블 또는 열에 접근할 수 있는지 확인합니다. 둘 다 java.util.ServiceLoader를 통해 로드되므로, 클래스패스에 서드파티 jar를 배치하면 자동으로 등록됩니다.

핵심 용어

  • authentication_type: 기본 인증 처리기를 선택하는 FE 설정입니다. 기본 제공 값은 default(별칭 password)와 ldap이며, 그 외의 문자열은 플러그인 이름으로 해석됩니다.
  • authentication_chain: 기본 인증 처리기가 인증을 거부한 뒤 순서대로 시도할 대체 인증 처리기를 쉼표로 구분한 목록입니다. LDAP 또는 OIDC로 일반 로그인을 처리하면서 비상 접근용 로컬 사용자를 유지할 때 유용합니다.
  • access_controller_type: 내부 Catalog의 권한 검사기를 선택하는 FE 설정입니다. default는 기본 제공 RBAC를 유지하고, ranger-doris는 모든 검사를 Ranger 플러그인에 위임합니다.
  • AuthenticatorFactory / AccessControllerFactory: META-INF/services에 등록되는 SPI 확장 지점입니다. 새 백엔드를 추가하려면 해당 인터페이스를 구현합니다.
  • 외부 Catalog 권한 검사기: 각 외부 Catalog(Hive, Iceberg)는 자체 컨트롤러를 선택할 수 있습니다. 따라서 내부 Catalog는 Doris RBAC를 사용하면서 Hive Catalog는 기존 Ranger Hive 정책에 권한 검사를 위임할 수 있습니다.

Apache Doris의 플러그형 인증 및 권한 부여는 어떻게 동작하나요?​

Apache Doris의 플러그형 인증 및 권한 부여는 서로 독립적인 두 SPI 체인을 실행합니다. 먼저 Authenticator가 MySQL 핸드셰이크를 처리해 UserIdentity를 생성하고, 이어서 Catalog별 CatalogAccessController가 행 필터와 열 마스킹을 포함해 모든 문을 평가합니다.

  1. 시작 시 인증 처리기를 선택합니다. AuthenticatorManager는 authentication_type을 읽고 값을 정규화한 뒤, ServiceLoader<AuthenticatorFactory>를 통해 해당 구현을 찾습니다. 기본 제공 팩터리(DefaultAuthenticatorFactory, LdapAuthenticatorFactory)는 FE jar에 포함되며, 사용자 지정 팩터리는 fe/plugins/에 배치합니다. 일치하는 레거시 팩터리가 없으면 관리자는 AuthenticationPluginAuthenticator를 사용하며, 이 구현은 OIDC, OAuth2, JWT를 처리합니다.
  2. 연결을 인증합니다. 클라이언트가 MySQL 연결을 열면 선택된 인증 처리기가 핸드셰이크를 검사합니다. 네이티브 비밀번호 인증은 스크램블된 해시를 비교하고, LDAP는 디렉터리에 바인드하며, OIDC는 JWT를 검증하고 클레임을 추출합니다. 성공하면 UserIdentity를 반환하고, 실패하면 유형이 지정된 실패 사유를 반환합니다.
  3. 실패하면 체인을 시도합니다. authentication_chain이 설정되어 있으면 관리자는 나열된 인증 처리기를 순서대로 실행합니다. 흔히 사용하는 구성은 authentication_type = ldap와 authentication_chain = default를 함께 설정하는 것으로, LDAP에 연결할 수 없어도 관리자가 로컬 비밀번호로 접근할 수 있습니다.
  4. 권한 검사기에 처리를 넘깁니다. 신원이 세션에 연결되면 모든 문이 AccessControllerManager를 거칩니다. 내부 Catalog는 access_controller_type으로 선택한 구현을 사용합니다. 외부 Catalog는 Catalog 속성인 access_controller.class로 선택한 구현을 사용하므로, 단일 클러스터에서 내부 Catalog에는 Doris RBAC를, Hive Catalog에는 Ranger를 함께 사용할 수 있습니다.
  5. 행 및 열 정책을 평가합니다. 같은 컨트롤러가 열 마스킹과 행 필터링을 위한 확장 지점도 제공합니다. 기본 제공 RBAC는 CREATE ROW POLICY로 저장된 정책을 읽습니다. Ranger 컨트롤러는 Ranger 플러그인의 evalRowFilterPolicies와 evalDataMaskPolicy를 호출하므로, 동일한 Hive 마스킹 규칙이 Doris 쿼리에도 적용됩니다.

빠른 시작​

# fe.conf: enable LDAP for everyone, keep local passwords as fallback
authentication_type = ldap
authentication_chain = default
access_controller_type = ranger-doris
-- Roles in Doris match LDAP group names; Ranger holds the actual grants
CREATE ROLE doris_analyst;
CREATE ROLE doris_etl;

-- Local break-glass account that survives LDAP / Ranger outages
CREATE USER 'breakglass'@'127.0.0.1' IDENTIFIED BY 'rotate-me';
GRANT 'admin' TO 'breakglass'@'127.0.0.1';

예상 결과

mysql> SELECT current_user(), user();
+---------------------+----------------------+
| current_user() | user() |
+---------------------+----------------------+
| jdoe@'%' | jdoe@'10.0.4.21' |
+---------------------+----------------------+

jdoe는 LDAP 비밀번호로 로그인하고 LDAP 그룹 매핑을 통해 doris_analyst 역할을 부여받았습니다. 이후의 모든 SELECT는 doris 서비스에 연결된 Ranger 정책에 따라 검사됩니다.

Apache Doris의 플러그형 인증 및 권한 부여는 언제 사용해야 하나요?​

기존 IdP 또는 정책 서비스가 웨어하우스의 신원을 관리하고, FE는 자격 증명과 정책 판단 결과를 받아 처리하도록 구성하려면 Apache Doris의 플러그형 인증 및 권한 부여를 사용하세요.

적합한 경우

  • 이미 IdP(LDAP, AD, OIDC, Kerberos KDC)를 운영하고 있으며, 별도의 사용자 목록을 유지하는 대신 Doris에서도 이를 공유하려는 기업.
  • 이미 Hive, HDFS 또는 Iceberg에 Ranger를 사용하고 있으며, Doris가 관리하는 테이블에도 같은 정책을 적용하려는 레이크하우스 배포 환경. Ranger 권한 부여를 참조하세요.
  • 사용자 지정 AuthenticatorFactory를 통해 각 테넌트가 자체 신원 공급자를 사용하는 멀티테넌트 SaaS.
  • Doris에서 TLS 사용을 강제하면서 BI 도구의 SSO를 위해 평문 또는 토큰 기반 핸드셰이크(OIDC, JWT)가 필요한 팀.

적합하지 않은 경우

  • LDAP, KDC 또는 Ranger Admin에 연결할 수 없는 망 분리 클러스터. 플러그인이 계속 재시도하며 쿼리에 왕복 통신 비용이 발생합니다. 기본 제공 RBAC와 로컬 계정을 사용하세요.
  • 쿼리마다 수행하는 Ranger 정책 조회가 지연 시간에 영향을 미칠 만큼 응답 속도가 중요한 짧은 쿼리. Ranger는 정책을 로컬에 캐시하므로 캐시에 적중할 때의 처리 비용은 작지만, 정책을 새로 고친 직후의 첫 요청에는 비용이 발생합니다.
  • Doris가 아직 기본 제공 팩터리를 제공하지 않는 백엔드. MySQL 핸드셰이크 자체에 대한 Kerberos / GSSAPI 인증은 기본으로 제공되지 않습니다. Ranger Admin 서버에는 Kerberos 인증을 적용할 수 있지만, FE와 클라이언트 사이의 구간에는 OIDC 토큰 또는 LDAP 바인드가 필요합니다. 필요한 경우 사용자 지정 AuthenticatorFactory를 작성하세요.
  • 같은 내부 Catalog에서 Ranger와 GRANT 문을 함께 사용하는 경우. access_controller_type = ranger-doris가 활성화되면 기본 제공 RBAC는 더 이상 변경을 받아들이지 않습니다. 권한 관리의 기준을 하나로 정해 사용하세요.

관련 문서​

  • 인증 및 권한 부여 개요: User Identity, 역할, 연결에 어떤 사용자가 적용되는지 결정하는 우선순위 규칙을 포함한 전체 개념 모델.
  • 기본 제공 인증: 비밀번호 정책, 만료, 잠금 및 validate_password_policy의 비밀번호 강도 규칙.
  • LDAP 인증: ldap.conf 참조, 그룹과 역할 간 매핑, LDAPS 설정 및 MySQL과 JDBC 클라이언트의 평문 인증 플러그인 설정 절차.
  • Ranger 권한 부여: Doris Ranger 플러그인 설치, Catalog/데이터베이스/테이블/열에 대한 정책 예시 및 행 수준 필터와 마스킹 처리 흐름.
  • 보안 개요: 감사 로그, SSL 전송, UDF 지침을 포함한 전반적인 보안 내용.
  • 다중 Catalog: Hive, Iceberg 및 기타 외부 소스의 Catalog별 접근 컨트롤러에 Ranger 방식의 권한 부여를 연결하는 방법.