보안

보안 (Security)

이 섹션은 Apache Pinot 클러스터를 보호하는 방법을 다뤄요 — 인증(authentication), 권한 부여(authorization), 접근 제어 목록(ACL), TLS/mTLS 암호화, 시크릿(secret) 관리요.

출처: 문서

본문

보안이 중요한 이유 (Why security matters)

기본적으로 Pinot은 모든 보안이 비활성화된 상태(AllowAllAccessFactory)로 제공되어 빠르게 시작할 수 있어요. 어떤 클러스터든 개발 단계를 넘어 승격하기 전에는 최소한 인증과 전송 암호화를 활성화해야 해요.

보안 레이어 (Security layers)

Pinot 보안은 점진적으로 도입할 수 있는 세 가지 독립 레이어로 구성돼요:

레이어 보호 대상 주요 메커니즘
인증 (Authentication) 사용자와 서비스의 신원을 검증 HTTP Basic Auth(정적 구성 또는 ZooKeeper 관리)
권한 부여 / ACL 각 보안 주체(principal)가 무엇을 할 수 있는지 제어 테이블별·작업별 권한, 행 수준 보안(Row-Level Security, RLS)
전송 암호화 (TLS) 클라이언트, 브로커, 서버, 컨트롤러 사이의 전송 중 데이터 보호 단방향 또는 양방향(상호) TLS
감사 로깅 (Audit logging) 컨트롤러와 브로커 API에서 누가 언제 무엇을 접근했는지 기록 구성 가능한 URL 필터, 신원 해석, 요청/응답 포착이 있는 ndjson 감사 로그

인증 모델 (Authentication models)

Pinot은 두 가지 내장 인증 백엔드를 제공해요. 둘 다 HTTP Basic Auth를 사용하지만, 사용자 자격 증명을 저장·관리하는 방식이 달라요.

정적 Basic Auth (BasicAuthAccessControlFactory)

자격 증명과 권한이 각 컴포넌트의 properties 파일에 선언돼요. 변경하려면 구성 갱신과 롤링 재시작이 필요해요. 사용자 목록이 안정적인 소규모 클러스터에 가장 적합해요.

ZooKeeper 관리 Basic Auth (ZkBasicAuthAccessControlFactory)

자격 증명이 bcrypt 암호화와 함께 ZooKeeper에 저장돼요. Pinot 컨트롤러 UI를 통해 사용자를 만들고 수정할 수 있으며 핫 디플로이(hot deployment)가 가능해요 — 재시작이 필요 없어요. 동적 사용자 관리가 필요한 환경에 가장 적합해요.

두 백엔드 모두 다음을 지원해요:

  • 컨트롤러와 브로커에 대한 별도 사용자 정의
  • 테이블 레벨 및 작업 레벨(CREATE, READ, UPDATE, DELETE) ACL
  • 컴포넌트 간 인증용 서비스 토큰(server, minion, controller)

권한 부여와 행 수준 보안 (Authorization and Row-Level Security)

테이블 레벨 ACL 외에도, Pinot 1.4.0+는 **행 수준 보안(RLS)**을 지원해요. RLS는 보안 주체별로 추가 WHERE 절 조건을 주입해서, 다른 사용자가 각각 권한이 있는 행만 볼 수 있게 해요. 사용자별·테이블별로 구성되며 투명하게 동작해요 — 브로커가 실행 전에 쿼리를 다시 써요.

사용자 정의 권한 부여 로직을 구현하려면 AccessControlFactory 인터페이스를 구현하고 이를 controller.admin.access.control.factory.class(컨트롤러) 또는 pinot.broker.access.control.class(브로커)로 구성하세요.

TLS / mTLS

Pinot은 클라이언트-클러스터 연결과 클러스터 내부 연결 모두에 TLS를 지원해요. 무중단(zero-downtime) 마이그레이션 경로로 실행 중인 클러스터에 단계적으로 TLS를 추가할 수 있어요:

  1. 기존 HTTP 리스너 옆에 보조 HTTPS 리스너 추가
  2. 컴포넌트 간 이그레스(egress)가 HTTPS를 선호하도록 전환
  3. HTTP 리스너 비활성화

양방향 TLS(상호 TLS / mTLS)는 클라이언트 인증서 검증을 추가해서 신뢰된 컴포넌트와 클라이언트만 연결할 수 있게 보장해요.

시크릿 관리 (Secrets management)

일반 텍스트 구성 파일에 저장된 자격 증명은 프로덕션에서 위험이에요. Pinot은 **동적 환경 구성(Dynamic Environment Configuration)**을 지원해서 properties 파일에 하드코딩하는 대신 환경 변수나 외부 저장소(예: Kubernetes Secrets, HashiCorp Vault)에서 시크릿을 주입할 수 있어요. 자세한 내용은 Dynamic Environment Configuration 참조를 참고하세요.

사전 요구사항 (Prerequisites)

보안을 활성화하기 전에 확인하세요:

  • 모든 Pinot 컴포넌트(controller, broker, server, minion)가 Basic Auth용 0.8.0+ 또는 ZK 관리 인증용 0.10.0+ 버전이어야 해요.
  • TLS의 경우, 각 컴포넌트용 JKS 또는 PKCS12 키스토어/트러스트스토어가 생성되어 있어야 해요.
  • 프로덕션의 경우, 자격 증명 주입용 시크릿 관리 솔루션이 마련되어 있어야 해요.

프로덕션용 고도화 (Hardening for production)

엔드포인트 노출, mTLS, ZooKeeper 인증, 시크릿 관리, 전체 프로덕션 체크리스트를 다루는 단계별 안내는 Security Hardening Guide를 참고하세요.

하위 페이지 (Child pages)

페이지 설명
Security Hardening Guide 종단간 프로덕션 고도화: 엔드포인트 노출, mTLS, ZooKeeper 인증, 시크릿, 체크리스트
Access Control ACL 프레임워크, 사용자 정의 AccessControlFactory, 행 수준 보안(RLS)
Authentication overview Pinot의 HTTP Basic Auth 소개와 설정 가이드 링크
Basic Auth Access Control controller, broker, server, minion용 정적 Basic Auth의 단계별 설정
ZK Basic Auth Access Control 핫 디플로이와 bcrypt 암호화가 있는 ZooKeeper 관리 Basic Auth
Configuring TLS/SSL 리스너 구성, 무중단 TLS 마이그레이션, 양방향 TLS 설정
Audit Logging 구성 가능한 신원 해석, URL 필터링, ndjson 로그 출력이 있는 REST API 감사 추적

다음 단계 (Next step)

클러스터가 보호되면 문제를 조기에 감지하도록 관찰성(observability)을 설정하세요. Monitoring으로 계속하세요.

더 알아보기 (Learn more)