Big Data/Kafka

[Kafka] Configurable SASL callback handler

devidea 2019. 4. 18. 18:26
최근에 Kafka 인증 기술에 대해서 하나씩 공부를 하고 있다. 가장 기본이 되는 SASL/PLAIN에 대해서 이전 블로그 글을 통해 소개한 바 있다.

이번 글은 Kafka 2.0 버전에 추가된 SASL callback 기능을 알아보고자 한다. SASL callback이 인증과 관련하여 중요하다고 생각되는 것은 SASL/PLAIN에서 접근을 허용하는 사용자 정보의 관리에 장점이 있어서이다. SASL/PLAIN에서 소개했듯이 Broker의 jaas 파일에 사용자 정보를 관리하게 되면 Kafka 운영에 불편한 점이 많다. 이번에 소개할 SASL callback 기능을 사용하면 인증 로직을 custom하게 추가할 수 있어 Kafka Cluster 운영 상황에 맞는 인증 서비스를 할 수 있다.

KIP-86에 SASL callback에 대한 자세한 설명이 있다. 문서에서 Sample Callback Handler for SASL/PLAIN의 내용을 직접 해볼 예정이다.

문서에 보면 다음과 같은 질문을 볼 수 있다.
SASL/PLAIN 인증을 위해 외부 인증 서버를 사용해서 Kafka 안에 SASL을 구현해 넣을 수 있나요? (의역입니다..)

답변을 아주 간단히 요약하면 "AuthenticateCallbackHandler 인터페이스를 구현해서 패스워드 검증 로직을 구현할 수 있다" 이다. (너무 간단하다..)

그래서 Sample Callback Handler for SASL/PLAIN의 코드를 보면 AuthenticateCallbackHandler 인터페이스의 구현 예가 나와 있다.
필자는 예제의 내용에 password 인증 방법을 LDAP 인증을 넣으려고 한다.

일단 코드 부터 보자.


코드를 보면 Override된 handle 함수에서 username과 인증을 처리할 PlainAuthenticateCallback 을 얻을 수 있다.
추가로 구현할 코드는 PlainAuthenticateCallback 안에 넣는다. Callback을 통해 인증을 위한 user, password를 가져오기 때문에 해당 값으로 인정 성공 여부를 true/ false로 리턴만 해주면 된다. 

필자의 샘플은 authenticate 함수 안에서 LDAP을 위한 로직이 있을 뿐이다. 따라서 password 인증 부분을 원하는 방식 예를들면, DB 혹은 다른 인증 서버를 통해서 수행하도록 바꿔주면 된다.
LDAP으로 설명한 이유는 필자의 상황 + 관심 때문인데 LDAP 인증 로직과 관련해서는 다음 stackoverflow 내용을 참고했다.


관련 문서


반응형