Hive에서 권한 상속
Hive에서 권한 상속 (Permission Inheritance in Hive)
이 문서는 Hive 데이터를 나타내는 파일의 속성(권한, 그룹, 확장 ACL)이 어떻게 결정되는지 설명해요. hive.warehouse.subdir.inherit.perms 플래그를 켜면 웨어하우스의 새 디렉토리/파일이 부모 디렉토리의 보안 속성을 자동으로 상속받도록 할 수 있답니다. (단, 이 기능은 Hive 3.0.0에서 제거됐어요.)
출처: 문서
본문
이 문서는 Hive 데이터를 나타내는 파일의 속성(권한, 그룹, 확장 ACL)이 어떻게 결정되는지 설명해요.
HDFS 배경 (HDFS Background)
- 파일이나 디렉토리가 생성되면, 그 소유자(owner)는 클라이언트 프로세스의 사용자 정체성이고, 그룹은 부모로부터 상속돼요(BSD 규칙). 권한은 기본 umask에서 취해져요. 확장 ACL(Extended ACL)은 명시적으로 설정하지 않는 한 부모로부터 취해져요.
목표 (Goals)
매 작업 후에 세밀한 파일 보안 속성을 설정해야 하는 부담을 줄이기 위해, 사용자는 다음 Hive 웨어하우스 파일/디렉토리가 부모 디렉토리로부터 보안 속성을 자동 상속 받기를 원할 수 있어요:
- 새 데이터베이스/테이블/파티션/버킷으로 생성된 디렉토리
- load/insert로 테이블에 추가된 파일
- 내보내기/가져오기된 테이블 디렉토리 (내보낸 테이블이 새 부모에서 권한을 상속받는지 여부에 별도의 플래그가 필요한지 여부는 미해결)
무엇이 상속되나요:
- 기본 파일 권한
- 그룹 (새 디렉토리에 대해 HDFS가 이미 수행)
- 확장 ACL (새 디렉토리에 대해 HDFS가 이미 수행)
이 확장 ACL의 상속은 문자 그대로(literal)이며, 모든 확장 ACL은 defaultGroup에 대한 ACL을 포함해 그대로 하위에 복사돼요.
개선 여지가 있는 부분은 defaultGroup에 대한 HDFS 의미론을 따르는 것인데, 그 내용은 다음과 같아요:
"새 파일이나 하위 디렉토리가 생성되면, 부모의 default ACL을 자신의 access ACL에 자동으로 복사한다. 새 하위 디렉토리는 또한 자신의 default ACL에도 복사한다. 이렇게 해서 default ACL은 새 하위 디렉토리가 생성될 때 파일 시스템 트리의 임의로 깊은 레벨까지 복사된다." (https://hadoop.apache.org/docs/current/hadoop-project-dist/hadoop-hdfs/HdfsPermissionsGuide.html#ACLs_Access_Control_Lists)
관련 HIVE-11481.
동작 (Behavior)
- Hive에서 "hive.warehouse.subdir.inherit.perms" 플래그가 활성화되면, Hive는 다음 모든 상속을 수행하려고 해요.
- 데이터베이스 디렉토리는 웨어하우스 디렉토리에서 상속.
- 테이블 디렉토리는 데이터베이스 디렉토리에서, 또는 기본 데이터베이스의 일부라면 웨어하우스 디렉토리에서 상속.
- 외부 테이블 디렉토리는 부모 디렉토리에서 상속.
- 파티션 디렉토리는 테이블 디렉토리에서 상속. (Hive 1.1.0 기준.)
- 데이터 파일은 테이블 또는 파티션 디렉토리에서 상속.
- Hive가 상속하지 못해도 작업은 실패하지 않아요. 보안 속성 상속이 언제 일어나는지에 대한 경험 법칙은 다음과 같아요:
- chmod를 실행하려면 사용자가 파일의 소유자이거나 수퍼유저여야 해요.
- chgrp를 실행하려면 사용자가 파일의 소유자이거나 수퍼유저여야 해요.
- 따라서 Hive가 실행되는 사용자(impersonation의 경우 'hive' 또는 로그인한 사용자)는 보안 속성이 변경될 파일의 수퍼유저 또는 소유자여야 해요.
버전 정보 (Version Information)
이 기능의 대부분은 Hive 0.14부터 추가됐어요.
자세한 내용은 umbrella JIRA HIVE-6892를 참고해요.
hive.warehouse.subdir.inherit.perms는 Hive 3.0.0에서 제거됐어요. 이 기능은 Hive에서 더 이상 필요하지 않게 됐는데, 전통적인 권한 모델이 크게 Ranger와 Sentry 같은 외부 보안 시스템으로 대체됐기 때문이에요. 외부 보안 시스템을 사용하고 싶지 않다면 Hive에 포함된 SQLStdAuth를 선택할 수 있어요.
더 알아보기 (Learn more)
- Hive SQL standard based authorization 문서에서 권한 부여 모델을 볼 수 있어요.
- Configuration Properties에서 관련 설정을 확인할 수 있어요.