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)