Big Data/Kafka

[Kafka] Kerberos 인증 #1

devidea 2020. 2. 3. 11:27

이번 글에서는 Kafka의 인증 방식 중 Kerberos를 적용하는 방법을 정리하고자 한다.

Kerberos는 Hadoop에서도 많이 사용하는 기술이기에 개념을 이해하는 것도 중요하다.

그리고 Kafka에서는 Kerberos 인증을 어떻게 설정하는지도 실습해보자.

 

처음에는 하나의 글로 Kerberos 서버준비 + Kafka 연동까지 하려고 했으나 내용이 길어져 2개의 글로 나누어서 정리를 하고자 한다.

 

참고로 Kafka 인증에 대해 썼던 다른 글도 있으니 참고하면 좋다.

 

1. Kerberos

Kerberos는 티켓을 기반으로 동작하는 암호화 프로토콜로서 클라이언트/ 서버 사이의 인증을 제공하도록 설계되었다.

대칭키 암호기법을 사용하며 윈도우 서버 운영체제의 기본 인증방법으로 활용되고 있다. (LDAP)

 

동작방식을 이해하기 위해서 Kerberos의 주요 개념에 대해서 먼저 정리해보자. 간단히 정의만 내리지만 동작방식을 설명할 때 이해할 수 있다.

 

Kerberos 서버군에는 AS(Authentication Server), TGS(Ticket Granting Server)가 있다. 각 서버의 역할을 간략화 하면 다음과 같다.

  • AS : 실질적 인증 수행
  • TGS : 티켓 부여

 

그리고 추가로 기억해야 할 요소로 SS(Service Server), Ticket, Principals이 있다.

  • SS : 서비스가 구현된 Server. 인증 처리가 필요한 서비스
  • Ticket : 사용자에 대한 인증 확인을 위한 토큰. 다른 SS와 통신 시 패스워드 재입력을 필요하지 않게 함.
  • Principals : 인증을 위해 Kerberos 프로토콜을 사용하는 모든 개체

그럼 Kerberos의 동작방식을 살펴보자.

아래 그림은 Kerberos의 구성 서버들과 Client의 통신 관계를 간략히 표현했다.

그림 1. Kerberos Protocol

인증 단계는 크게 3단계로 나눌 수 있다. (괄호안의 번호는 각 단계에 포함되는 위 그림의 통신)

  1. AS에서 사용자 확인 (1,2)
  2. TGS에서 티켓 발급 (3,4)
  3. SS가 티켓 확인 후 서비스 제공 (5,6)

각 단계에서 주고 받는 메세지의 내용은 다음 블로그에 정리가 잘 되어 있으니 추가로 읽어보면 도움이 된다.

 

Kerberos Protocol을 공부하면서 주의 깊었던 내용 몇 가지이다.

AS, TGS 서버에서 처리 결과로서 Client에 제공하는 암호화 값들을 모두 비밀키를 사용했다. 그리고 메세지 확인을 위해서 timestamp를 활용했다.

서버들 간의 메세지 확인을 위해서 비밀키를 공유해야 하고 서버 시간의 차이가 나지 않도록 관리하는 점이 중요했다.

 

인증 프로토콜의 장/단점을 분석하는 것은 해당 글의 목적에서 확장되므로 여기까지만 설명한다.

 

그럼 이런 Kerberos를 Kafka에 적용하는 것을 테스트하기 위해서 필자는 Kerberos 서버를 로컬에 Docker로 설치했다.

 

2. Kerberos 설치

Kerberos는 다음 github을 참고해서 docker image를 만들고 실행했다.

 

Kerberos를 docker로 실행된 내용을 확인해 보자.

그림 2. Docker로 Kerberos 실행

Kerberos 서버는 EXAMPLE.COM 도메인으로 실행되었다.

그리고 Kerberos docker에 들어가서 keytab 파일을 생성한다.

keytab 파일은 Broker 서버, Client 사용을 구분하여 2개를 생성했다.

 

keytab 파일은 principal name, encryption key를 포함하고 있다.

Kerberos Client가 될 Kafka는 인증 설정에 keytab를 명시하게 된다.

 

여기까지 진행하면 Kafka 연동을 위해 Kerberos 서버 및 keytab까지 준비를 마쳤다.

다음글에서는 Kafka에서 설정하고 console producer로 인증을 거쳐 데이터를 넣어보자.

 

 

관련 문서

반응형