운영 중인 클러스터에 보안 기능 적용하기

운영 중인 클러스터에 보안 기능 적용하기

이미 가동 중인 카프카 클러스터에 보안을 입히는 건 사실 한 번에 되는 게 아니에요. 브로커를 단계적으로 재시작(bounce)하면서 포트를 하나씩 열고 닫는 방식으로 진행해야 해요. 이 페이지에서는 그 단계들을 실제 예시와 함께 정리해드릴게요.

출처: 문서

본문

앞에서 다룬 지원 프로토콜 중 하나 이상을 통해 운영 중인 클러스터를 보호할 수 있어요. 이것은 단계적으로 진행해요:

  1. 클러스터 노드를 점진적으로 바운스(bounce)하여 추가 보안 포트를 연다.
  2. 클라이언트를 PLAINTEXT 포트 대신 보안 포트를 사용하도록 재시작한다 (클라이언트-브로커 연결을 보호하는 경우).
  3. 필요한 경우 브로커-to-브로커 보안을 활성화하기 위해 클러스터를 다시 점진적으로 바운스한다.
  4. 마지막으로 점진적 바운스를 통해 PLAINTEXT 포트를 닫는다.

SSL과 SASL을 구성하는 구체적인 단계는 7.3 및 7.4 섹션에 설명되어 있어요. 원하는 프로토콜에 대해 보안을 활성화하려면 이 단계를 따라가면 돼요.

보안 구현을 통해 브로커-클라이언트 통신과 브로커-브로커 통신에 서로 다른 프로토콜을 구성할 수 있어요. 이것들은 별도의 바운스에서 활성화해야 해요. 브로커 및/또는 클라이언트가 계속 통신할 수 있도록 바운스하는 내내 PLAINTEXT 포트는 열어두어야 해요.

점진적 바운스를 수행할 때는 SIGTERM을 통해 브로커를 정상적으로(cleanly) 중지하세요. 또한 다음 노드로 넘어가기 전에 재시작된 복제본이 ISR 목록으로 돌아올 때까지 기다리는 것도 좋은 습관이에요.

예를 들어, 브로커-클라이언트와 브로커-브로커 통신을 모두 SSL로 암호화하고 싶다고 해볼게요. 첫 번째 점진적 바운스에서 각 노드에 SSL 포트가 열려요:

listeners=PLAINTEXT://broker1:9091,SSL://broker1:9092

그런 다음 클라이언트를 재시작하면서, 새로 열린 보안 포트를 가리키도록 구성을 변경해요:

bootstrap.servers = [broker1:9092,...]
security.protocol = SSL
...etc

두 번째 점진적 서버 바운스에서 Kafka가 브로커-브로커 프로토콜로 SSL을 사용하도록 지시해요 (이것은 같은 SSL 포트를 사용할 거예요):

listeners=PLAINTEXT://broker1:9091,SSL://broker1:9092
security.inter.broker.protocol=SSL

마지막 바운스에서 PLAINTEXT 포트를 닫아 클러스터를 보호해요:

listeners=SSL://broker1:9092
security.inter.broker.protocol=SSL

대안으로, 브로커-브로커와 브로커-클라이언트 통신에 서로 다른 프로토콜을 사용할 수 있도록 여러 포트를 여는 것을 선택할 수도 있어요. 전체적으로 SSL 암호화(즉 브로커-브로커 및 브로커-클라이언트 통신 모두)를 사용하고 싶지만, 브로커-클라이언트 연결에 SASL 인증도 추가하고 싶다고 해볼게요. 첫 번째 바운스에서 두 개의 추가 포트를 열어 이를 달성해요:

listeners=PLAINTEXT://broker1:9091,SSL://broker1:9092,SASL_SSL://broker1:9093

그런 다음 클라이언트를 재시작하면서 새로 열린 SASL & SSL 보안 포트를 가리키도록 구성을 변경해요:

bootstrap.servers = [broker1:9093,...]
security.protocol = SASL_SSL
...etc

두 번째 서버 바운스에서 이전에 9092 포트에 열어둔 SSL 포트를 통해 암호화된 브로커-브로커 통신을 사용하도록 클러스터를 전환해요:

listeners=PLAINTEXT://broker1:9091,SSL://broker1:9092,SASL_SSL://broker1:9093
security.inter.broker.protocol=SSL

마지막 바운스는 PLAINTEXT 포트를 닫아 클러스터를 보호해요:

listeners=SSL://broker1:9092,SASL_SSL://broker1:9093
security.inter.broker.protocol=SSL

더 알아보기

  • 리스너 구성 — listeners, 보안 프로토콜 맵 등의 기본 구성을 봐요.
  • 보안 개요 — 카프카가 지원하는 보안 조치를 전체적으로 정리해둔 문서예요.
  • SSL과 SASL 각각의 상세 설정은 인증/암호화 관련 문서들을 참고해요.