목차
카프카는 보통 기업 내부의 시스템으로 활용하기 때문에 대부분 사내 보안에 대해서는 큰 신경을 쓰지 않는다.
rabbitMQ 같은 오픈소스에서는 자체적으로 기본 보안 기능이 포함된 경우도 있지만, 카프카는 최초 설치 과정에서 보안이 설정되지 않는다. 때문에 어떤 클라이언트든 카프카와 동일한 네트워크에 위치하거나 카프카와 통신만 가능하다면 자유롭게 연결이 가능하다.
권한과 관련된 부분도 문제가 될 수 있다. 카프카에 연결된 클라이언트들은 모든 권한을 가지고 있기에, 토픽에 메시지를 전송하고 토픽의 메시지를 가져오는 것이 자유롭다. 일반적인 상황이라면 문제가 없지만, 서비스 담당자의 실수로 다른 서비스에서 사용하는 토픽으로 메시지를 보낼 수도 있으며 그로 인해 다른 서비스의 데이터 정합성에 문제가 생길 수도 있다.
또, 클라이언트와 카프카의 통신이 암호화 되어있지 않기 때문에 악의적인 목적을 가진 사용자가 통신에 끼어들어 모든 패킷을 가로챌수도 있다.
1. 카프카 보안의 세 가지 요소
•
암호화 (Encryption)
보안 강화를 위해 인증과 권한 설정을 모두 적용했는데, 누군가가 악의적인 목적으로 ID/PW를 중간에서 가로채서 서버와 클라이언트 사이에 흐르는 모든 데이터를 유출할 수 있다. 결국 인증과 권한을 설정함에 대한 의미가 없어진다. 따라서 통신을 암호화하여 패킷을 가로채더라도 데이터를 읽을 수 없게 해야한다.
•
인증 (Authentication)
카프카 클라이언트들이 카프카로 접근할 때 안전하다고 확인된 클라이언트만 접근할 수 있도록 설정하는 부분이다. 로그인에 비유 가능.
•
권한 (Authorization)
권한을 설정한다는 것은 인증을 받은 A라는 클라이언트가 B라는 토픽으로만 메시지를 보내고 가져갈 수 있게 허락된다는 뜻이다.
이제 이 세 가지 보안 요소를 적용하기 위해 필요한 기능은 무엇이며, 어떤 역할을 하는지 살펴보자
암호화(SSL)
암호화 통신을 설정하기 위해 일반적으로 SSL을 사용한다.
SSL(Secure Socket Layer)은 서버와 서버 사이 또는 서버와 클라이언트 사이에서 통신 보안을 적용하기 위한 표준 암호 규약이다. SSL은 인증 기관(CA, Certificate Authority)으로부터 인증서를 발급받은 후, 인증서를 이용한 public key, private key 방식으로 서버와 클라이언트가 암호화와 복호화를 하면서 통신한다.
암호화와 복호화를 위해 서버와 클라이언트는 미리 지정된 키를 주고받아야 하는데, 이때 사용하는 키의 방식으로 대칭 키 방식과 비대칭 키 방식이 있다. 대칭 키 방식은 하나의 세션 키를 가지고 서버와 클라이언트가 통신하는 방식이며, 계산 속도가 빠르고 효율적이다.