tech/database

[카프카] Simple Authentication and Security Layer(SASL)

daniel_lab 2024. 9. 18. 19:32

오늘은 카프카의 보안프로토콜에 사용되는 Simple Authentication and Security Layer(SASL)에 관하여 정리해보려 한다.

 

SASL 에 관하여 이야기하려면 카프카의 보안프로토콜에 대해 먼저 설명이 필요하다. 카프카는 2개의 보안관련 표준기술인 Transport Layer Security(TLS)와 Simple Authentication and Security Layer(SASL) 을 사용해서 4개의 보안프로토콜을 지원한다. 4개의 보안 프로토콜은 전송계층보안(SSL, PlainText 중 택1), 인증계층보안(SASL, SSL 택1) 을 조합하여 정의된다. 

 

SASL은 클라이언트와 서버 간의 인증을 위한 프레임워크다. 다양한 인증 메커니즘을 지원하며, 애플리케이션 프로토콜과 독립적으로 동작한다. 즉, 애플리케이션은 SASL을 통해 다양한 인증 방식을 유연하게 적용할 수 있다.

 

1. 카프카에서의 SASL 활용

카프카는 SASL을 통해 브로커와 클라이언트, 그리고 브로커 간의 통신에서 인증을 수행한다. 이를 통해 인증되지 않은 접근을 방지하고, 시스템의 안전성을 높인다.

 

2. 카프카에서 지원하는 SASL 메커니즘

카프카는 아래 SASL 매커니즘을 지원한다

  • PLAIN: 사용자명과 비밀번호를 평문으로 전송. TLS/SSL과 함께 사용해야 한다.
  • SCRAM (Salted Challenge Response Authentication Mechanism): 사용자명과 비밀번호를 해시하여 전송하는 방식으로, SCRAM-SHA-256과 SCRAM-SHA-512를 지원한다.
  • GSSAPI (Kerberos): 기업 환경에서 많이 사용하는 Kerberos를 이용한 인증 방식이다.
  • OAUTHBEARER: OAuth 2.0 토큰을 이용한 인증 방식으로, 토큰 기반의 인증이 필요할 때 사용한다.

3. SASL 설정 방법

  • 브로커 설정
  • server.properties 파일에서 다음과 같이 설정한다:
listeners=SASL_PLAINTEXT://:9092 
security.inter.broker.protocol=SASL_PLAINTEXT 
sasl.mechanism.inter.broker.protocol=PLAIN 
sasl.enabled.mechanisms=PLAIN

6. 예제

  • SCRAM-SHA-256을 사용하는 경우
  • 브로커와 클라이언트에서 sasl.mechanism을 SCRAM-SHA-256으로 설정하고, 사용자 정보를 Zookeeper나 카프카의 내장 사용자 관리 기능을 통해 저장한다.
  • GSSAPI(Kerberos)를 사용하는 경우
  • 브로커와 클라이언트가 모두 Kerberos 환경에서 동작해야 하며, sasl.mechanism을 GSSAPI로 설정한다. Kerberos 티켓을 얻기 위한 설정이 추가로 필요하다.

7. 고려사항

  • 암호화: SASL_PLAINTEXT는 데이터가 암호화되지 않으므로, 필요에 따라 TLS/SSL을 함께 사용하여 데이터를 암호화해야 한다.
  • 권한 부여: 인증 외에도 ACL(Access Control List)을 사용하여 사용자별 권한을 관리해야 한다.