[Kafka] Kerberos 인증 #2
지난 글에 이어서 Kafka Kerberos 인증 설정과 Client (Producer) 테스트에 대한 내용을 설명한다.
바로 시작해 보자.
1. Kafka Broker 설정
Kafak Broker는 2가지 설정을 수정해야 한다. 인증정보를 적는 JAAS 파일을 추가하고 서버 설정 (server.properties)에서 일부 항목을 추가/수정해야 한다.
JAAS 파일의 내용을 먼저 보자.
설정에서 주의깊게 볼 부분은 principal이다. 여기에 지난 글에서 만들었던 Broker 용도 Keytab 파일의 경로를 넣어준다.
JAAS 파일의 역할은 시작할 Broker에게 Kerberos principal의 정보를 제공해 주는데 있다.
두 번째는 server.properties에서 수정 사항이다.
listeners에 2개의 포트를 사용했다. 9092는 기존처럼 인증이 없이 사용하고, 9094로 접근할 때 SASL_PLAINTEXT로 인증을 타게 된다.
여기서 PLAINTEXT의 의미는 SSL를 사용하지 않는다는 것이다. 평문으로 전달하지 않으려면 인증서 설치를 하고 SASL_SSL로 해야 한다.
필자는 일단 Kerberos 연동 확인의 목적이었으니 SSL는 배제했다.
sasl.mechanism.inter.broker.protocol는 Broker 내부에서의 통신을 GSSAPI (Kerberos)를 사용한다는 설정이다.
sasl.enabled.mechanisms이 어떤 SASL 인증을 사용할지 리스트를 적는데 default 값이 GSSAPI이다.
마지막으로 sasl.kerberos.service.name는 이름 그래로 Kerberos 서비스 이름을 의미하는데 주의해서 설정해야 한다.
Broker 설정용 principal의 이름이 kafka/로 시작하는데는 이유가 있어서였다. principal 앞에 서비스 이름이 붙는다.
그리고 kerberos.service.name은 client 설정 때에도 사용하니 기억해 두자.
설정이 끝났으니 Kafka를 기동시켜 보자.
먼저 zookeeper를 띄운다. (설정 변동이 없으니 추가 설명은 제외)
./zookeeper-server-start.sh -daemon ../config/zookeeper.properties
그리고 Broker를 띄울 때 KAFKA_OPTS을 추가해줘야 한다.
-Djava.security.auth.login.config 설정인데 앞서 설정한 JAAS 파일의 경로를 넣으면 된다.
KAFKA_OPTS="-Djava.security.auth.login.config=JAAS_파일" ~/kafka/bin/kafka-server-start.sh ~/kafka/config/server.properties
Broker를 띄우고 난 다음에 로그를 살펴보면 다음과 같이 SASL_PLAINTEXT가 EndPoint에 추가됨을 볼 수 있다.
2. Producer
Broker를 띄웠으니 이제 Kerberos로 인증을 해서 데이터를 전송해 보자.
Client도 인증을 위해 JAAS 파일이 필요하다.
아래와 같이 설정하면 되는데 Broker에서 설정한 파일 대비 2가지는 조심해서 넣자.
KafkaServer -> KafkaClient
serviceName="kafka" : 앞서 kerberos.service.name에서 설정한 "kafka"를 넣으면 된다.
그리고 추가로 producer 설정을 위한 파일을 하나 만든다.
설정값은 아래와 같이 Broker와 통신하고자 하는 protocol을 정의한다.
bootstrap.servers=localhost:9094
security.protocol=SASL_PLAINTEXT
이제 데이터를 넣어보자. KAFKA_OPTS를 Broker와 마찬가지로 설정해서 console-producer를 띄운다.
KAFKA_OPTS="-Djava.security.auth.login.config=JAAS_파일" ~/kafka/bin/kafka-console-producer.sh --broker-list localhost:9094 --topic test --producer.config ~/kafka/config/producer_sasl.properties
인증이 성공하면 데이터를 입력할 수 있겠지만 인증이 실패하면 아래와 같이 오류가 발생한다.
Broker에 접근 할 수 없다는 오류이다.
2개의 글에 걸쳐서 Kafka Kerberos 인증 설정에 대해서 설명했다.
Kerberos 설정이 되어 있는 Kafka를 테스트할 때 유용했음 좋겠다.
관련 문서