Zookeeper에 Kerberos 보안설정 하는 방법.



가정

* zookeeper 경로 = /home/zookeeper

* 설정파일 경로   = /home/zookeeper/conf/zoo.cfg

* 호스트명은 server01 ~ server03

* realm은 REALM.COM




1. Zookeeper Server


principal, keytab 파일

// kadmin

[root@server01]# kadmin


// principal 추가

kadmin: addprinc -randkey zookeeper/server01@REALM.COM

// keytab 생성

kadmin: xst -k zookeeper.keytab zookeeper/server01@REALM.COM


kadmin: quit


keytab 설정

// zookeeper.keytab 파일 이동

[root@server01]# mv zookeeper.keytab /home/zookeeper/conf


// 읽기 전용 권한조정

[root@server01]# chmod 400 /home/zookeeper/conf/zookeeper.keytab



/home/zookeeper/conf/zoo.cfg 파일에 설정 추가

authProvider.1=org.apache.zookeeper.server.auth.SASLAuthenticationProvider

jaasLoginRenew=3600000



/home/zookeeper/conf/jaas.conf 설정 (파일이 없으면 만들자)

Server {

  com.sun.security.auth.module.Krb5LoginModule required

  useKeyTab=true

  keyTab="/home/zookeeper/conf/zookeeper.keytab"

  storeKey=true

  useTicketCache=false

  principal="zookeeper/server01@REALM.COM";

};



/home/zookeeper/conf/java.env 설정 (파일이 없으면 만들자)

export JVMFLAGS="-Djava.security.auth.login.config=/home/zookeeper/conf/jaas.conf"



server02, server03 도 동일하게 pricipal 추가하고 설정파일을 세팅.






2. Zookeeper Client


principal, keytab

// kadmin

[root@server01]# kadmin


// principal 추가

kadmin: addprinc -randkey zkcli@REALM.COM

// keytab 생성

// -norandkey 옵션이 없는 Kerberos일 경우 빼고 생성

kadmin: xst -norandkey -k zkcli.keytab zkcli@REALM.COM

kadmin: quit



keytab 설정

// zkcli.keytab 파일 이동

[root@server01]# mv zkcli.keytab /home/zookeeper/conf


// 읽기 전용 권한조정

[root@server01]# chmod 400 /home/zookeeper/conf/zkcli.keytab



/home/zookeeper/conf/jaas.conf 파일에 Client 설정 추가

Client {

  com.sun.security.auth.module.Krb5LoginModule required

  useKeyTab=true

  keyTab="/home/zookeeper/conf/zkcli.keytab"

  storeKey=true

  useTicketCache=false

  principal="zkcli@REALM.COM";

};



server02, server03에 keytab 파일 복사

[root@server01]# scp /home/zookeeper/conf/zkcli.keytab root@server02:/home/zookeeper/conf

[root@server01]# scp /home/zookeeper/conf/zkcli.keytab root@server03:/home/zookeeper/conf



server02, server03 서버들의 jaas.conf 파일에도 Client 설정 추가








3. 확인


// 전체 Zookeeper 재시작

[root@server01]# /home/zookeeper/bin/zkServer.sh restart

[root@server02]# /home/zookeeper/bin/zkServer.sh restart

[root@server03]# /home/zookeeper/bin/zkServer.sh restart


// 접속 

[root@server01]# /home/zookeeper/bin/zkCli.sh -server server01:2181


// zookeeper.out 파일에 보면 아래와 같은 인증관련 로그 확인 가능

2015-04-20 15:25:07,908 [myid:1] - INFO  [NIOServerCxn.Factory:0.0.0.0/0.0.0.0:2181:SaslServerCallbackHandler@118] - Successfully authenticated client: authenticationID=zkcli@REALM.COM;  authorizationID=zkcli@REALM.COM.

2015-04-20 15:25:07,917 [myid:1] - INFO  [NIOServerCxn.Factory:0.0.0.0/0.0.0.0:2181:SaslServerCallbackHandler@134] - Setting authorizedID: zkcli@REALM.COM

2015-04-20 15:25:07,917 [myid:1] - INFO  [NIOServerCxn.Factory:0.0.0.0/0.0.0.0:2181:ZooKeeperServer@964] - adding SASL authorization for authorizationID: zkcli@REALM.COM











Posted by bloodguy
,