커버로스 기반으로 HBase 인증 환경을 구성한 뒤에, 클라이언트에게 접근 권한을 통제하기 위한 권한 규칙을 정의해야 합니다. 현재 버전에서 HBase는 테이블, 컬럼 및 cell에 대한 권한 규칙을 적용할 수 있습니다. Cell에 대한 권한기반의 허가 기능은 베타기능이기 때문에 주의하여 사용되어야 합니다.
HBase의 권한 관리 기능를 사용하기 위해서는 Kerberos를 활용한 인증 환경이 사전에 구성되어 있어야 합니다.
1) Understanding HBase Access Levels
HBase 접근 수준(Access Level)은 다음과 같은 권한을 서로 독립적으로 부여가능하며, 주어진 범위내에서 다양한 유형의 작업 수행을 허용합니다.
- Read (R) : 주여진 범위내의 데이터를 Read 할 수 있는 권한
- Write (W): 주여진 범위내에 데이터를 Write 할 수 있는 권한
- Execute (X): 주어진 범위내의 Coprocessor 엔드포인트(endpoint)를 Execute(실행)할 수 있는 권한
- Create (C) : 주어진 범위내에서 테이블을 생성하거나 테이블을 삭제(Drop: 생성 권한이 없더다로 삭제 권한만 따로 부여 가능)할 수 있는 권한
- Admin (A): 주어진 범위 내에서 클러스터내의 Balancing 작업하거나 Region을 할당하는것과 같은 클러스터 오퍼레이션을 실행 할 수 있는 권한.
적용 가능한 범위는 다음과 같습니다:
- Superuser: Superuser는 HBase내의 모든 리소스에 대해 사용가능한 모든 오퍼레이션을 실행할 수 있습니다. 클러스터에서 HBase를 실행하는 사용자가 superuser이며, HMaster의 hbase-site.xml 구성 정보 파일에서 hbase.superuser 속성에 할당된 모든 사용자를 의미합니다.
- Global: 클러스터의 모든 테이블에 대한 오퍼레이션을 허용하기 위해 Global 범위에 부여된 권한.
- Namespace: 지정된 namespace 내의 모든 테이블에 적용되는 namespace 범위에 부여된 권한.
- Table: 지정된 테이블 내의 데이터나 메타데이터에 적용되는 테이블 범위에 부여된 권한.
- ColumnFamily: ColumnFamily 내의 cell에 적용되는 ColumnFamily 범위에 부여된 권한.
- Cell: Cell 범위에 부여된 권한. 이를 활용하여 데이터에 함께 다양한 정책 구현이 가능합니다. 특정 Cell에 대한 ACL을 변경하기 위해서는 write an updated cell with new ACL to the precise coordinates of the original. 다중 버전의 스키마를 가지고 있는 경우 모든 버전의 ACL을 변경하기 위해서는 모든 버전에 관련된 새로운 Cell이 필요합니다. The application has complete control over policy evolution. The exception is append and increment processing. Appends and increments can carry an ACL in the operation. If one is included in the operation, then it will be applied to the result of the append or increment. Otherwise, the ACL of the existing cell being appended to or incremented is preserved.
- Superusers: 운영 환경에서는 HBase 사용자만이 superuser 접근 권한을 가져야 하며, 개발 환경에서는 클러스터를 빠르게 제어하고 관리하도록 관리자가 superuser 접근 권한을 가져야 합니다. 그러나, 개발 환경에서 이러한 관리자의 올바른 역할은 superuser라기 보다는 Global Admin이여야 합니다.
Global Admins: Global Admin은 HBase내의 모든 테이블에 대한 접근 권한을 가지며 테이블에 대한 모든 작업을 수행할 수 있습니다. 일반적인 운영 환경에서는 관리자가 테이블 내의 데이터에 대한 Read / Write 권한을 부여 받을 필요가 없습니다.
Admin 권한을 부여받은 Global Admin은 balancing, Region 할당 및 회수, 명시적인 Major Compaction 호출과 같은 클러스터-수준의 오페레이션을 수행할 수 있습니다. 이 권한은 운영자 역할에 적합합니다.
Create 권한을 부여받은 Global Admin은 HBase내의 테이블을 생성하거나 드롭할 수 있으며, 이 권한은 DBA 역할에 적합합니다.
- Namespace Admin - Create 권한을 가지는 Namespace Admin은 해당 네임스페이스내의 테이블을 생성하거나 삭제할 수 있고, 스냅샷을 사용하여 데이터를 백업하거나 복구할 수 있습니다. Admin 권한을 가지는 NameSpace Admin은 네임스페이스내의 테이블에 대한 스플릿(Split)이나 메이저 컴팩션(Major Compaction)과 같은 오퍼레이션을 실행할 수 있습니다. CDH 5.4 이전 버전에서는 Global Admin만이 네임스페이스를 생성할 수 있었지만, 5.4 이후 버전에서는 네임스페이스 생성 권한을 가지는 모든 사용자가 네임스페이스를 생성할 수 있습니다.
- Table Admins - Table Admin은 해당 테이블에 대해서만 관리 오퍼레이션을 실행할 수 있습니다. Create 권한을 가지는 Table Admin은 스냅샷을 통해 해당 테이블에 대해서만 백업하거나 복원할 수 있습니다. Admin 권한을 가지는 Table Admin은 해당 테이블에 대해서만 스플릿(Split)이나 메이저 컴팩션(Major Compaction)과 같은 오퍼레이션을 수행할 수 있습니다.
- Users - 사용자는 데이터를 쓰거나 읽기나 쓰기/읽기을 할 수 있습니다. 또한, Executable 권한이 부여된 경우, coprocessor 엔드포인트를 실행할 수도 있습니다.
2) Enable HBase Authorization
HBase 권한은 AccessController Coprocessor라는 Coprocessors 프레임워크입니다.
Enable HBase Authorization Using Cloudera Manager
- Clusters 메뉴에서 HBase 클러스터를 선택한 뒤, "Configuration" 탭을 클릭.
- HBase Secure Authorization 을 검색 후, 선택.
HBase Service Advanced Configuration Snippet (Safety Valve) for hbase-site.xml에서, "hbase.security.exec.permission.checks"의 옵션 값을 true로 설정. 이 옵션 값을 설정하지 않으면, 모든 사용자는 엔드포인트 coprocessor를 실행할 수 있습니다. 또한, HBase Secure Authorization for backward compatibility가 enable 된 경우, 이 옶션의 값은 false로 설정됩니다.
<property> <name>hbase.security.exec.permission.checks</name> <value>true</value> </property>
- (선택사항) HBase Coprocessor Master Classes 및 HBase Coprocessor Region Classes를 검색하여 구성.
3) Configure Access Control Lists for Authorization
Now that HBase has the security coprocessor enabled, you can set ACLs using the HBase shell. 일반적으로 HBase 쉘을 사용하여 ACL을 설정합니다.
HBase는 다음과 같이 명령어 기반으로 ACL을 제어하며, 그룹명은 접두어로 @ 심폴이 필요합니다.
hbase> grant <user> <permissions> [ @<namespace> [ <table>[ <column family>[ <column qualifier> ] ] ] ] # grants permissions hbase> revoke <user> <permissions> [ @<namespace> [ <table> [ <column family> [ <column qualifier> ] ] ] # revokes permissions hbase> user_permission <table> # displays existing permissions
위의 명령 구문에서 <>는 필수항목을 의미하며, []는 선택 옵션이며, Permission 변수는 "RWCA" 문자중의 하나 이상의 조합으로 구성되어야 합니다.
- R: 주어진 범위내에서 Get, Scan 또는 Exists을 수행하는데 필요한 읽기 권한(read permission)을 의미합니다.
- W: 주어진 범위내에서 Put, Delete, LockRow, UnlockRow, IncrementColumnValue, CheckAndDelete, CheckAndPut, Flush나 Compact을 수행하는데 필요한 쓰기 권한(Write Permission)을 의미합니다.
- X: 주어진 범위내에서 Coprocessor 엔드포인트를 실행하는데 필요한 실행 권한(Execute Permission)을 의미합니다.
- C: 주어진 범위내에서 Create, Alter나 Drop을 수행하는데 필요한 생성 권한(Create Permission)을 의미합니다.
- A: 주어진 범위내에서 Enable, Disable, Snapshot, Restore, Clone, Split, MajorCompact, Grant, Revoke와 Shutdown을 실행하는데 필요한 관리 권한(Admin Permission)을 의미합니다.
접근 통제 명령어 예시
grant 'user1', 'RWC' grant 'user2', 'RW', 'tableA' grant 'user3', 'C', '@my_namespace'
'Big DATA' 카테고리의 다른 글
CDP 7.1.4+ - Hive-Kafka 통합 (0) | 2021.04.27 |
---|---|
Sqoop: Oracle JDBC Driver - Connection reset 에러 (2) | 2017.04.11 |
Apache Kudu 소개 (0) | 2017.03.17 |