Ranger 사용
    • PDF

    Ranger 사용

    • PDF

    Article Summary

    VPC 환경에서 이용 가능합니다.

    Data Forest에서 Apache Ranger로 정책을 설정하여 자신의 리소스를 다른 사용자에게 공유하는 방법을 설명합니다. Ranger UI에 접속해서 사용할 수 있습니다.

    Ranger 접속

    1. Ranger UI에 접속해 주십시오. 임의의 Data Forest 앱 상세 정보 내 Quick links 부분에서 [접속정보 상세보기] 버튼을 클릭하여 Ranger UI 접속 주소를 확인할 수 있습니다.
    2. Username, Password에 Data Forest 계정 생성 시 지정한 사용자명과 패스워드를 입력하고 로그인해 주십시오.
      df-eco-ranger_01_vpc_ko
    3. Ranger 홈 화면에서 권한을 설정할 수 있는 컴포넌트를 확인할 수 있습니다.
      • HDFS, Hive에 대한 ACL을 설정할 수 있습니다. 이 설정은 'Policy'라는 단위로 이루어집니다.
        df-eco-ranger_02_vpc_ko
    참고

    YARN 큐에 대한 권한은 수정할 수 없습니다. YARN에 대한 ACL은 전용 큐 기능 도입 이후 제공될 예정입니다.

    HDFS ACL 설정

    HDFS ACL을 설정하는 방법은 다음과 같습니다.

    1. Apache Ranger 홈 화면에서 HDFS > df_hadoop_koya 또는 df_hadoop_tata를 클릭해 주십시오.
      • df_hadoop_koya: koya 네임스페이스 아래 파일들에 대한 ACL 관리
      • df_hadoop_tata: tata 네임스페이스 아래 파일에 대한 ACL 관리
    2. [Add New Policy] 버튼을 클릭해 주십시오.
      • example 사용자가 만든 디렉터리 및 파일 (/user/example/foo, /user/example/bar)에 대한 권한을 example2에게 추가합니다.
        df-eco-ranger_04_vpc_ko
    3. Policy를 설정해 주십시오.
      • Policy Name: Policy 이름 설정(이미 사용 중인 Policy 이름은 사용 불가)
      • Resource Path: ACL을 설정할 HDFS 경로 입력
        • Data Forest 사용자는 HDFS에서 홈 디렉터리hdfs:///user/$username경로에만 접근할 수 있고 홈 디렉터리 하위의 파일에 대해서만 ACL을 관리할 수 있음 (hdfs:///tmp 같은 경로는 사용 불가)
        • 앞에 hdfs:// scheme은 입력하지 않고 /user/$username으로 시작하는 경로 입력
        • 여러 개 입력 가능
        • 경로의 유효 여부를 확인하지 않으므로 정확하게 입력
        • 경로가 '/'로 끝나지 않도록 주의 필요 (예를 들어, /user/example/foo/로 경로를 입력하면 foo에는 접근할 수 없고, 하위에 존재하는 서브 디렉터리에만 접근 가능)
      • Select Group: 권한을 부여할 그룹 지정
        • 해당 그룹에 속한 모든 사용자에게 권한 부여
        • Data Forest에서 모든 사용자는 users 그룹에 속해 있음. 계정 생성 시 별도 그룹 지정 불가
      • Select User: 권한을 부여할 사용자 지정
      • Permission: 부여할 권한 선택. (권한: Excute, Read, Write)
        • 디렉터리일 경우, Execute 권한이 있어야 디렉터리 내 파일 리스트(ls 명령어)획득 가능
      • Delegate Admin
        • 사용자/그룹에 Delegate Admin을 체크하여 관리자 권한을 위임한 경우 그 사용자/ 그룹은 Policy 관리 가능. 불특정 다수에게 관리자 권한을 위임하지 않도록 주의 필요
      • Add Validity Period: 특정 기간 동안만 Policy가 적용되도록 설정 가능
        df-eco-ranger_05_vpc_ko
    4. [Add] 버튼을 클릭해 주십시오. Policy 생성이 완료되기까지 약 5분 정도 소요됩니다.
    5. 새로운 Policy가 생성되었는지 확인해 주십시오.
      df-eco-ranger_06_vpc_ko

    /user/example의 구조는 다음과 같습니다.
    퍼미션은 'drwx------'입니다. Policy를 추가하더라도 이 권한 자체는 변경되지 않습니다.

    $ hadoop fs -ls /user/example
    Found 9 items
    ...
    drwx------   - example services          0 2021-04-14 18:01 /user/example/bar
    drwx------   - example services          0 2021-04-14 18:01 /user/example/foo
    drwx------   - example services          0 2021-04-14 18:07 /user/example/foobar
    

    Policy에서 권한을 부여한 example2 계정으로 /user/example/foobar에 접근하려고 시도할 경우, foo, bar 에만 권한을 주었기 때문에 접근이 불가능한 것을 확인할 수 있습니다

    $ hadoop fs -ls /user/example/foobar
    s: Permission denied: user=example2, access=READ_EXECUTE, inode="/user/example/foobar":example:services:drwx------
    

    Policy에서 권한을 부여한 foo, bar에는 정상적으로 접근이 가능한 것을 확인할 수 있습니다.

    $ hadoop fs -ls /user/example/foo
    Found 1 items
    -rw-------   3 example services          0 2021-04-14 18:13 /user/example/foo/foo.txt
    $ hadoop fs -ls /user/example/bar
    Found 1 items
    -rw-------   3 example services          0 2021-04-14 18:14 /user/example/bar/bar.txt
    

    Read, Write, Execute 권한을 주었으므로 다음과 같이 파일을 복사할 수 있습니다.

    $ hadoop fs -copyToLocal /user/example/foo/foo.txt
    

    Hive ACL 설정

    Hive 데이터베이스와 테이블을 생성할 경우 소유자만 접근할 수 있습니다. 다른 사용자에게 접근할 수 있도록 하려면 Ranger를 통해 권한을 부여해야 합니다.

    Hive ACL을 설정하는 방법은 다음과 같습니다.

    1. Ranger 홈 화면에서 Hive > df_hive를 클릭해 주십시오.
    2. [Add New Policy] 버튼을 클릭해 주십시오.
    3. 정보를 입력해 주십시오.
      • example 사용자의 테이블 example__db_foo.bar_table에 대한 권한을 example2에게 부여하는 예시
        df-eco-ranger_08_vpc_ko
      • Policy Name: Policy 이름 설정. 이미 사용 중인 Policy 이름은 사용 불가
      • Database: ACL을 설정할 데이터베이스 입력. 여러 개를 입력할 수 있으며, 해당 데이터베이스의 존재 여부는 확인하지 않음
      • Table: ACL을 설정할 테이블 입력
        • 해당 테이블의 존재 여부는 확인하지 않음
        • *로 모든 테이블을 지정 가능
      • Hive Column: Data Forest는 컬럼 수준의 ACL을 지원하지 않음. * 입력
      • Select Group: 권한을 부여할 그룹 지정
        • 해당 그룹에 속한 모든 사용자에게 권한 부여
        • Data Forest에서 모든 사용자는 users 그룹에 속하며, 계정 생성 시 별도 그룹 생성은 지정 불가
      • Select User: 권한을 부여할 사용자 지정
      • Permission: 부여할 권한 선택
      • Delegate Admin: 사용자/그룹에 Delegate Admin을 체크하여 관리자 권한을 위임하면 그 사용자/그룹은 해당 Policy 관리 가능. 불특정 다수에게 관리자 권한을 위임하지 않도록 주의 필요
      • Add Validity Period: 권한의 적용 기간 설정 가능
    4. [Add] 버튼을 클릭해 주십시오. Policy 생성이 완료되기까지 약 5분 정도 소요됩니다.
    5. 새로운 Policy가 생성되었는지 확인해 주십시오.
      df-eco-ranger_09_vpc_ko

    HDFS ACL 적용

    Hive 테이블 데이터는 HDFS에 저장되어 있기 때문에, Hive ACL 설정 뿐만 아니라 HDFS ACL도 적용해주어야 합니다. HDFS ACL을 설정하지 않으면 조회 쿼리가 실패합니다.

    테이블 조회를 위한 HDFS ACL

    bar_table에만 접근 권한을 부여합니다. bar_table아래로는 모두 권한이 부여됩니다 (recursive).

    Service: df_hadoop_koya
    Resource Path: /user/example/warehouse/example__db_foo.db/bar_table   (recursive)
    Select User: example2
    Permissions: Read/Execute
    

    데이터베이스 사용을 위한 HDFS ACL

    example__db_foo을 사용하기 위한 권한입니다. 아래 모든 테이블에 권한을 주지 않을 것이므로 non-recursive로 설정합니다.

    Service: df_hadoop_koya
    Resource Path: /user/example/warehouse/example__db_foo.db   (non-recursive)
    Select User: example2
    Permissions: Read/Execute
    
    참고

    DB 또는 테이블이름에 와일드카드(*, ?)를 사용할 수 있습니다. example__db_*으로 적으면 example 유저가 생성한 모든 데이터베이스에 접근 가능합니다.

    'example2' 계정으로 example__db_foo.bar_table에 질의를 할 수 있습니다.

    권한 설정 전

    권한 에러가 반환됩니다.

    0: jdbc:hive2://zk1.kr.df.naverncp.com:2181,z> select * from example__db_foo.bar_table;
    Error: Error while compiling statement: FAILED: SemanticException Unable to fetch table bar_table. java.security.AccessControlException: Permission denied: user=example2, access=EXECUTE, inode="/user/example":example:services:drwx------
    
    0: jdbc:hive2://zk1.kr.df.naverncp.com:2181,z> use example__db_foo;
    Error: Error while compiling statement: FAILED: SemanticException MetaException(message:java.security.AccessControlException: Permission denied: user=example2, access=EXECUTE, inode="/user/example":example:services:drwx------
    

    권한 설정 후

    권한 설정 이후에 정상적으로 접근되는 것을 확인 할 수 있습니다.

    0: jdbc:hive2://zk1.kr.df.naverncp.com:2181,z> select * from example__db_foo.bar_table;
    INFO  : Compiling command(queryId=hive_20210415150318_9cd21ba3-9862-4310-9a53-69c5af0dd105): select * from example__db_foo.bar_table
    INFO  : Semantic Analysis Completed (retrial = false)
    INFO  : Returning Hive schema: Schema(fieldSchemas:[FieldSchema(name:bar_table.id, type:bigint, comment:null)], properties:null)
    INFO  : Completed compiling command(queryId=hive_20210415150318_9cd21ba3-9862-4310-9a53-69c5af0dd105); Time taken: 0.096 seconds
    INFO  : Executing command(queryId=hive_20210415150318_9cd21ba3-9862-4310-9a53-69c5af0dd105): select * from example__db_foo.bar_table
    INFO  : Completed executing command(queryId=hive_20210415150318_9cd21ba3-9862-4310-9a53-69c5af0dd105); Time taken: 0.001 seconds
    INFO  : OK
    +---------------+
    | bar_table.id  |
    +---------------+
    +---------------+
    No rows selected (0.122 seconds)
    0: jdbc:hive2://zk1.kr.df.naverncp.com:2181,z> use example__db_foo;
    INFO  : Compiling command(queryId=hive_20210415150322_ac4aa103-4ae3-483f-b388-43040cede0b5): use example__db_foo
    INFO  : Semantic Analysis Completed (retrial = false)
    INFO  : Returning Hive schema: Schema(fieldSchemas:null, properties:null)
    INFO  : Completed compiling command(queryId=hive_20210415150322_ac4aa103-4ae3-483f-b388-43040cede0b5); Time taken: 0.02 seconds
    INFO  : Executing command(queryId=hive_20210415150322_ac4aa103-4ae3-483f-b388-43040cede0b5): use example__db_foo
    INFO  : Starting task [Stage-0:DDL] in serial mode
    INFO  : Completed executing command(queryId=hive_20210415150322_ac4aa103-4ae3-483f-b388-43040cede0b5); Time taken: 0.01 seconds
    INFO  : OK
    No rows affected (0.039 seconds)
    0: jdbc:hive2://zk1.kr.df.naverncp.com:2181,z> select * from bar_table;
    INFO  : Compiling command(queryId=hive_20210415150324_448ce1be-b913-4396-8232-92f76feb40e5): select * from bar_table
    INFO  : Semantic Analysis Completed (retrial = false)
    INFO  : Returning Hive schema: Schema(fieldSchemas:[FieldSchema(name:bar_table.id, type:bigint, comment:null)], properties:null)
    INFO  : Completed compiling command(queryId=hive_20210415150324_448ce1be-b913-4396-8232-92f76feb40e5); Time taken: 0.096 seconds
    INFO  : Executing command(queryId=hive_20210415150324_448ce1be-b913-4396-8232-92f76feb40e5): select * from bar_table
    INFO  : Completed executing command(queryId=hive_20210415150324_448ce1be-b913-4396-8232-92f76feb40e5); Time taken: 0.001 seconds
    INFO  : OK
    +---------------+
    | bar_table.id  |
    +---------------+
    +---------------+
    

    이 문서가 도움이 되었습니까?

    What's Next
    Changing your password will log you out immediately. Use the new password to log back in.
    First name must have atleast 2 characters. Numbers and special characters are not allowed.
    Last name must have atleast 1 characters. Numbers and special characters are not allowed.
    Enter a valid email
    Enter a valid password
    Your profile has been successfully updated.