Skip to Content
Data EngineeringApache Sentry 기반 Hive 권한 관리(RBAC) SQL 구문 정리
📊 Data Engineering2018년 7월 27일

Apache Sentry 기반 Hive 권한 관리(RBAC) SQL 구문 정리

#hive#sentry#security#sql#data-engineering#flamingo

대형 금융권이나 공공기관의 하둡(Hadoop) 클러스터에서 보안(Security)은 단순한 옵션이 아니라 필수적인 도입 요건입니다. 특히 Cloudera(CDH) 에코시스템을 채택한 고객사에서는 Hive와 Impala에 적재된 중요 데이터를 비인가자로부터 숨기기 위해 커버로스(Kerberos)와 함께 Apache Sentry라는 인가(Authorization) 모듈을 깐깐하게 적용하여 운영했습니다.

과거 당사의 빅데이터 솔루션 빅데이터 모니터링 플랫폼는, Hadoop 에코시스템에 흩어진 통계 데이터를 요약하여 대시보드 그래픽으로 쏴주기 위해 백업 배치용 Hive 테이블(flamingo_agg 등)을 조회해야만 했습니다. 하지만 Sentry가 활성화된 엔터프라이즈 환경에서는 플랫폼 서버의 서비스 계정(flamingo)이 아무런 권한 없이 쿼리를 날릴 경우 즉각 AuthorizationException이 발생하며 튕겨 나갔습니다.

시스템 설치 후반부에 클러스터 DB 관리자(DBA)에게 “플랫폼 데몬 계정에 이런 이러한 Sentry 롤(Role) 권한을 매핑해 주십시오”라는 스크립트를 공식 레포트 형태로 넘겨드려야 했는데, 그 당시 즐겨 썼던 Sentry SQL DCL(Data Control Language) 구문들을 정리했습니다.


Apache Sentry RBAC 구조의 핵심

Sentry는 사용자(User)에게 직접 테이블 권한을 주지 않습니다.

  1. Role(역할)을 생성하여 그 롤에 DB/Table 읽기/쓰기 권한을 부여하고,
  2. 그 Role을 Linux/LDAP의 Group(그룹)에 매핑하는 모델(Role Based Access Control)을 엄격히 따릅니다.

1. 롤(Role) 생성 및 상위 객체 권한 부여

관제 및 분석을 전담하는 서비스 계정이 묶여 있는 그룹(예: flamingo_grp 또는 analyst_grp)을 위한 Role을 만듭니다.

sql
-- 1. 롤(역할) 생성 CREATE ROLE analyst_role; -- 2. 전체 DB 접근: 실험용 DB(analyst1)에는 CRUD를 자유롭게 할 수 있도록 ALL 권한 부여 GRANT ALL ON DATABASE analyst1 TO ROLE analyst_role; -- 3. 읽기 전용 DB 접근: 플라밍고가 통계 메트릭만 읽어가야 하는 DB(jranalyst1)에는 SELECT만 부여 GRANT SELECT ON DATABASE jranalyst1 TO ROLE analyst_role; -- 4. HDFS 외부 테이블 데이터 경로 권한: 특정 폴더 영역까지 권한을 밀어넣기 GRANT ALL ON URI 'hdfs://ha-nn-uri/landing/analyst1' TO ROLE analyst_role;

2. 테이블 및 섬세한 컬럼(Column) 통제

보안에 아주 민감한 개인 신용 정보나 민감 테이블에 접근해야 할 때는, 테이블 전체가 아닌 특정 뷰어나 특정 컬럼만 찍어서 권한을 할당할 수 있습니다.

sql
-- 특정 계정을 위한 VIP 테이블 조회 권한 GRANT SELECT ON TABLE secure_db.vip_table TO ROLE analyst_role; -- 컬럼 단위 제어: vip_table에서 name과 email 컬럼만 SELECT 할 수 있게 제한 GRANT SELECT(name, email) ON TABLE secure_db.vip_table TO ROLE analyst_role;

3. 강력한 관리자(Admin) 권한 설정

만약 플랫폼가 관리자 레벨의 자동화 도구로 동작해야 해서, 하이브 자체의 구조를 변경할 필요가 있다면 서버 레벨의 마스터 권한을 세팅합니다.

sql
CREATE ROLE admin_role; GRANT ALL ON SERVER server1 TO ROLE admin_role;

4. 그룹(Group)에 롤 매핑하여 최종 인가 완료

만들어진 역할을 실제 Active Directory나 Linux PAM 계정의 그룹(Group)에 붙여주는 쿼리입니다. 이 명령어가 실행되는 순간, Sentry 정책이 새로고침되며 권한이 부여된 사용자들은 권한 에러 없이 정상적으로 Hive 쿼리를 실행할 수 있게 됩니다.

sql
-- 인프라 관리자 그룹(admin)에 어드민 롤 부여 GRANT ROLE admin_role TO GROUP admin; -- 플라밍고 서비스 데몬 그룹(flamingo)에 조회 전용 롤 부여 GRANT ROLE analyst_role TO GROUP flamingo;

보안이 삼엄한 폐쇄망 고객사에서 프로젝트 일정을 딜레이시키지 않으려면, 이와 같은 보안 해제 스크립트를 사전에 완벽하게 준비하여 인프라 담당자에게 리뷰(Review)를 받는 것이 솔루션 딜리버리 엔지니어의 핵심 역량이었습니다.

Last updated on