Cloudera CDH/CDP 및 Hadoop EcoSystem, Semantic IoT등의 개발/운영 기술을 정리합니다. gooper@gooper.com로 문의 주세요.
<<사전 준비>>
1. ranger role 설정(AD의 GROUPS에 등록및 USERS의 각 사용자에 group을 매핑해줌)
* rl_gooperdb_all
- gooperdb및 HDFS /DATA/GOOPERDB에 대한 모든 권한
- /tmp/zone2에 대한 all(이 설정은 안해도 됨)권한
- Encryption zone인 /tmp/zone2에 대한 생성, 조회 권한을 가짐(Get Get Keys Get Metadata Generate EEK Decrypt EEK)
* rl_gooperdb_sel
- gooperdb및 /DATA/GOOPERDB에 대한 select 권한(이 설정은 안해도 됨)
- /tmp/zone2에 대한 read(이 설정은 안해도 됨)
- Encryption zone인 /tmp/zone2에 대한 조회 권한을 가짐(Decrypt EEK)
2. 사용자 계정및 매핑 그룹현황(AD의 USERS에 등록)
user1 : rl_gooperdb_all, gooperdb.zone_table2를 create한 계정임
user2 : rl_gooperdb_sel
3. /tmp/zone2을 Encryption zone으로 생성한다.
<<테스트>>
1. 테스트1 (user2로 encryption zone인/tmp/zone2및 gooperdb.zone_table에 대한 권한이 전혀없는 상태에서 Hue에서 다음을 수행함)
select * from gooperdb.zone_table;
-->AuthorizationException: User 'user2' does not have privileges to execute 'SELECT' on: gooperdb.zone_table
insert into gooperdb.zone_table(nm) values ('user2가 입력함');
-->AuthorizationException: User 'user2' does not have privileges to execute 'INSERT' on: gooperdb.zone_table
invalidate metadata gooperdb.zone_table;
show grant user `user2` on table gooperdb.zone_table;
AD에서 Users에 Groups을 빼도 권한이 살아있는경우가 있는데.. 이때는 Hue의 사용자관리에서 Add/Sync LDAP user클릭후 해당 user명을 입력하면
AD로 부터의 최신 현황을 update하면서 권한이 빠진다.
--> Done. 0 results.
create table gooperdb.zone_table2(nm string) location '/tmp/zone2';
-->AuthorizationException: User 'user2' does not have privileges to execute 'CREATE' on: gooperdb
/tmp/zone2/sec_test_file.txt접근시
-->
Cannot access: /tmp/zone2/sec_test_file.txt.
500 Server Error: Internal Server Error for url: http://bdapnamt02.gooper.com:14000/webhdfs/v1/tmp/zone2/sec_test_file.txt?length=3&op=OPEN&user.name=hue&offset=0&doas=user2 {"RemoteException":{"message":"User:user2 not allowed to do 'DECRYPT_EEK' on 'pidi_key'","exception":"AuthorizationException","javaClassName":"org.apache.hadoop.security.authorize.AuthorizationException"}} (error 500)
2. 테스트2(user2로 encryption zone인/tmp/zone2에 decryption권한및 gooperdb.zone_table에 대한 select 권한이 있는 상태에서 Hue에서 다음을 수행함)
select * from gooperdb.zone_table;
-->성공
insert into gooperdb.zone_table(nm) values ('user2가 입력함');
-->AuthorizationException: User 'user2' does not have privileges to execute 'INSERT' on: gooperdb.zone_table
invalidate metadata gooperdb.zone_table;
show grant user `user2` on table gooperdb.zone_table;
AD에서 Users에 Groups을 빼도 권한이 살아있는경우가 있는데.. 이때는 Hue의 사용자관리에서 Add/Sync LDAP user클릭후 해당 user명을 입력하면
AD로 부터의 최신 현황을 update하면서 권한이 빠진다.
--> GROUP user2 gooperdb * * select false NULL
create table gooperdb.zone_table2(nm string) location '/tmp/zone2';
-->AuthorizationException: User 'user2' does not have privileges to execute 'CREATE' on: gooperdb
/tmp/zone2접근시
-->Cannot access: /tmp/zone2.
/tmp/zone2/sec_test_file.txt접근시
-->Cannot access: /tmp/zone2/sec_test_file.txt.
3. 테스트3(user1로 encryption zone인/tmp/zone2에 생성권한및 gooperdb에 대한 all 권한이 있는 상태에서 Hue에서 다음을 수행함)
select * from gooperdb.zone_table;
-->성공
insert into gooperdb.zone_table(nm) values ('user1가 입력함2');
-->성공
show grant user `user1` on table gooperdb.zone_table;
AD에서 Users에 Groups을 빼도 권한이 살아있는경우가 있는데.. 이때는 Hue의 사용자관리에서 Add/Sync LDAP user클릭후 해당 user명을 입력하면
AD로 부터의 최신 현황을 update하면서 권한이 빠진다.
-->
principal_type principal_name database table column uri udf privilege grant_option create_time
GROUP user1 gooperdb * * all false NULL
/tmp/zone2/table2폴더 생성 --> 성공
create table gooperdb.zone_table2(nm string) location '/tmp/zone2/table2';
-->성공
insert into gooperdb.zone_table2(nm) values ('user1가 gooperdb.zone_table2을 생성 후 입력함2');
-->성공
select * from gooperdb.zone_table2;
-->성공
/tmp/zone2접근시
-->성공
/tmp/zone2/table2접근및 파일 읽기
-->성공