Hive 권한 부여
Hive 권한 부여 (Authorization)
소개 (Introduction)
이 문서는 사용자가 특정 작업을 수행할 권한이 있는지 **검증하는 권한 부여(Authorization)**에 관한 것이며, 사용자의 신원을 확인하는 **인증(Authentication)**에 대한 것이 아니라는 점에 유의하세요. Hive 커맨드 라인 같은 도구에 대한 강력한 인증은 Kerberos 사용을 통해 제공돼요. HiveServer2 사용자에게는 추가 인증 옵션도 있습니다.
출처: 문서
본문
Hive 권한 부여 옵션 (Hive Authorization Options)
서로 다른 사용 사례를 충족하기 위해 세 가지 Hive 권한 부여 모드를 사용할 수 있어요.
사용 사례 (Use Cases)
권한 부여를 Hive의 두 가지 주요 사용 사례로 생각해 보는 것이 유용해요.
- Hive를 테이블 저장 계층으로 사용: Hive의 HCatalog API 사용자(Apache Pig, MapReduce, 일부 MPP 데이터베이스 - Cloudera Impala, Facebook Presto, Spark SQL 등)를 위한 사용 사례예요. 이 경우 Hive는 저장소(일반적으로 HDFS)의 파일에 대한 테이블 추상화와 메타데이터를 제공합니다. 이 사용자들은 HDFS와 metastore 서버(메타데이터 접근 API 제공)에 직접 접근해요. HDFS 접근은 HDFS 권한을 통해 권한 부여됩니다. 메타데이터 접근은 Hive 구성을 사용해 권한 부여해야 해요.
- Hive를 SQL 쿼리 엔진으로 사용: Hive의 가장 흔한 사용 사례 중 하나예요. SQL 사용자와 BI 도구의 'Hive 관점'입니다. 이 사용 사례에는 다음 두 가지 하위 범주가 있어요.
- Hive 커맨드 라인 사용자: 이 사용자들은 HDFS와 Hive metastore에 직접 접근하므로 사용 사례 1과 유사해요. 참고, Hive CLI 사용은 곧 Beeline을 대신해 공식적으로 폐기될 예정입니다.
- ODBC/JDBC 및 기타 HiveServer2 API 사용자(Beeline CLI가 예): 이 사용자들은 모든 데이터/메타데이터 접근이 HiveServer2를 통해 이루어져요. HDFS나 metastore에 직접 접근하지 않습니다.
권한 부여 모드 개요 (Overview of Authorization Modes)
1. Metastore 서버의 저장 기반 권한 부여 (Storage Based Authorization in the Metastore Server)
사용 사례 1과 2a에서 사용자들은 데이터에 직접 접근해요. Hive 구성은 데이터 접근을 제어하지 않습니다. HDFS 권한이 테이블 저장소 접근의 하나의 truth source로 작동해요. Metastore Server의 저장 기반 권한 부여를 활성화하면, 이 단일 truth source를 사용해 일관된 데이터·메타데이터 권한 정책을 가질 수 있어요. 데이터베이스, 테이블, 파티션 같은 메타데이터 객체에 대한 메타데이터 접근을 제어하기 위해, 파일 시스템의 해당 디렉터리에 대한 권한이 있는지 확인합니다. 쿼리가 최종 사용자로 실행되도록 보장해(HiveServer2 구성에서 hive.server2.enable.doAs 옵션이 "true"여야 함 - 기본값) HiveServer2를 통한 접근(위 사례 2b)도 보호할 수 있어요.
HDFS ACL(Hadoop 2.4 이상에서 사용 가능)을 사용하면 파일 시스템 접근 제어에 유연성이 커지고, 결과적으로 저장 기반 권한 부여에서도 더 유연해져요. 이 기능은 Hive 0.14(HIVE-7583)부터 사용할 수 있습니다.
접근 제한에 저장 기반 권한 부여를 의존할 때도, 아래 나열된 보안 옵션 2 또는 3 중 하나를 활성화하거나 FallbackHiveAuthorizer를 사용해 HiveServer2 인스턴스 내 작업을 보호해야 합니다.
폴백 권한 부여자 (Fall Back Authorizer)
Fall Back Authorizer를 사용하려면 Hive 2.3.4 또는 3.1.1 이상이 필요해요.
Admin needs to specify the following entries in
hiveserver2-site.xml:
<property>
<name>hive.security.authorization.enabled</name>
<value>true</value>
</property>
<property>
<name>hive.security.authorization.manager</name>
<value>org.apache.hadoop.hive.ql.security.authorization.plugin.fallback.FallbackHiveAuthorizerFactory</value>
</property>
FallbackHiveAuthorizerFactory는 위에서 언급한 위협을 완화하기 위해 다음을 수행해요.
- admin을 제외한 SQL 문에서 로컬 파일 위치를 금지
- whitelist에 있는 선택된 파라미터만 "set" 허용
- admin을 제외한 dfs 명령 금지
- "ADD JAR" 문 금지
- "COMPILE" 문 금지
- "TRANSFORM" 문 금지
2. HiveServer2의 SQL 표준 기반 권한 부여 (SQL Standards Based Authorization in HiveServer2)
저장 기반 권한 부여는 데이터베이스·테이블·파티션 수준에서 접근 제어를 제공할 수 있지만, 파일 시스템의 접근 제어가 디렉터리·파일 수준이므로 컬럼·뷰 같은 더 세밀한 수준의 권한 부여는 제어할 수 없어요. 세밀한 접근 제어의 전제 조건은 사용자가 필요로 하는(또는 접근 권한이 있는) 컬럼·행만 제공할 수 있는 데이터 서버입니다. 파일 시스템 접근의 경우 사용자에게 전체 파일이 제공됩니다. HiveServer2는 이 조건을 충족하는데, SQL을 통해 행·컬럼을 이해하는 API가 있어 사용자의 SQL 쿼리가 요청한 컬럼·행만 제공할 수 있기 때문이에요.
SQL 표준 기반 권한 부여(Hive 0.13.0, HIVE-5837에서 도입)는 세밀한 접근 제어를 활성화하는 데 사용할 수 있어요. SQL 표준 권한 부여에 기반하며 익숙한 grant/revoke 문으로 접근을 제어합니다. HiveServer2 구성을 통해 활성화해야 해요.
사용 사례 2a(Hive 커맨드 라인)에서는 SQL 표준 기반 권한 부여가 비활성화된다는 점을 참고하세요. 이는 사용자가 HDFS에 직접 접근하므로 SQL 표준 기반 권한 부여 검사를 쉽게 우회하거나 아예 비활성화할 수 있기 때문에, Hive 커맨드 라인에 Hive의 접근 제어 정책을 사용한 안전한 접근 제어가 불가능하기 때문입니다. 비활성화함으로써 사용자에게 잘못된 보안 감각을 주지 않게 합니다.
3. Apache Ranger & Sentry를 사용한 권한 부여 (Authorization using Apache Ranger & Sentry)
Apache Ranger와 Apache Sentry는 Hive가 제공하는 플러그인을 사용해 권한 부여를 하는 아파치 프로젝트입니다.
정책은 해당 프로젝트 아래의 저장소에서 관리됩니다.
그것들을 사용하면 고급 기능도 얻을 수 있어요. 예를 들어 Ranger로 웹 인터페이스에서 정책을 보고 관리하고, 감사(audit) 정보를 보고, 런타임 속성에 기반한 동적 행·컬럼 수준 접근 제어(컬럼 마스킹 포함)를 할 수 있어요.
4. 옛 기본 Hive 권한 부여 (Legacy Mode)
Hive Old Default Authorization(Hive 2.0.0 이전 기본값)은 이전 버전의 Hive에서 사용 가능했던 권한 부여 모드예요. 하지만 이 모드는 완전한 접근 제어 모델을 갖추지 못해 많은 보안 공백을 남깁니다. 예를 들어 사용자가 권한을 부여하는 데 필요한 권한이 정의되어 있지 않아, 어떤 사용자든 자신에게 테이블이나 데이터베이스에 대한 접근 권한을 부여할 수 있어요.
이 모델은 grant/revoke 문 기반 접근 제어를 제공한다는 점에서 SQL 표준 기반 권한 부여 모드와 유사해요. 하지만 접근 제어 정책이 SQL 표준 기반 권한 부여와 달라 호환되지 않습니다. 이 모드는 Hive 커맨드 라인 사용자에게도 지원됩니다. 다만 위 SQL 표준 기반 권한 부여에서 언급한 이유로, Hive 커맨드 라인에 안전한 권한 부여 모드는 아닙니다.
여러 사용 사례의 권한 부여 요구 해결 (Addressing Authorization Needs of Multiple Use Cases)
저장 기반 권한 부여는 위에서 설명한 모든 사용 사례를 해결할 수 있는 간단한 방법을 제공해요. 하지만 SQL 사용자에게 더 세밀한 접근 제어가 필요하다면, HiveServer2에서 SQL 표준 기반 권한 부여 모드도 활성화할 수 있습니다.
즉, metastore API 호출(Hive metastore에서)에 대해서는 저장 기반 권한 부여를, HiveServer2에서는 SQL 표준 기반 권한 부여를 동시에 활성화할 수 있어요.
권한 부여 설명 (Explain Authorization)
버전 0.14 — EXPLAIN AUTHORIZATION
Hive 0.14.0부터 HiveQL 명령인 EXPLAIN AUTHORIZATION은 쿼리를 실행하는 데 권한 부여가 필요한 모든 엔티티와 권한 부여 실패를 보여줘요.
더 알아보기 (Learn more)
Hive 권한 부여 모드에 대한 자세한 내용은 다음을 참고하세요.
- Metastore Server의 저장 기반 권한 부여 & HCatalog Authorization
- SQL Standard Based Hive Authorization
- Hive deprecated authorization mode / Legacy Mode 및 설계 문서, Security
더 알아보기 (Learn more)
Hive의 권한 부여 모드는 크게 (1) 저장(파일 시스템) 기반, (2) SQL 표준 기반(HiveServer2에서 grant/revoke), (3) Ranger/Sentry 연동, (4) 레거시 모드로 나뉘어요. Hive CLI는 HDFS 직접 접근이 가능해 SQL 표준 기반 권한 부여를 쓸 수 없고, HiveServer2 사용자에게 세밀한 컬럼·행 수준 제어가 필요하면 SQL 표준 기반 권한 부여를 활성화하는 것이 일반적인 구성입니다.