본문 바로가기
카테고리 없음

kafka SASL(Simple Authentication and Security Layer) - 1

by techdebt 2025. 2. 1.
반응형

kafka SASL

SASL 메커니즘의 종류와 특징

SASL/PLAIN

가장 기본적인 인증 방식인 SASL/PLAIN은 구현이 간단하지만 보안적 측면에서 주의가 필요합니다.

사용자 이름과 비밀번호를 평문으로 전송하기 때문에, 반드시 SSL/TLS와 함께 사용해야 안전성을 보장할 수 있습니다.

# 서버 설정 (server.properties)
listeners=SASL_PLAINTEXT://localhost:9092
security.protocol=SASL_PLAINTEXT
sasl.mechanism=PLAIN
sasl.enabled.mechanisms=PLAIN

# JAAS 설정 파일 (kafka_server_jaas.conf)
KafkaServer {
    org.apache.kafka.common.security.plain.PlainLoginModule required
    username="admin"
    password="admin-secret"
    user_admin="admin-secret"
    user_alice="alice-secret";
};

SASL/GSSAPI (Kerberos)

대규모 엔터프라이즈 환경에서 선호되는 Kerberos 인증은 중앙화된 인증 서버를 통해 강력한 보안을 제공합니다. 특히 금융권이나 대기업에서 많이 채택하고 있는 방식입니다.

# 서버 설정
listeners=SASL_PLAINTEXT://localhost:9092
security.protocol=SASL_PLAINTEXT
sasl.mechanism=GSSAPI
sasl.enabled.mechanisms=GSSAPI
sasl.kerberos.service.name=kafka

# JAAS 설정
KafkaServer {
    com.sun.security.auth.module.Krb5LoginModule required
    useKeyTab=true
    storeKey=true
    keyTab="/etc/security/keytabs/kafka.service.keytab"
    principal="kafka/kafka.example.com@EXAMPLE.COM";
};

 

 

클라이언트 구성과 보안 강화

클라이언트 설정

Java 클라이언트에서 SASL을 구성하는 방법은 다음과 같습니다:

Properties props = new Properties();
props.put("bootstrap.servers", "localhost:9092");
props.put("security.protocol", "SASL_PLAINTEXT");
props.put("sasl.mechanism", "PLAIN");
props.put("sasl.jaas.config", 
    "org.apache.kafka.common.security.plain.PlainLoginModule required " +
    "username=\"alice\" " +
    "password=\"alice-secret\";"
);

 

SSL/TLS와의 통합

실제 운영 환경에서는 SASL과 SSL/TLS를 결합하여 사용하는 것이 best practice입니다:

# SSL/TLS와 SASL 통합 설정
listeners=SASL_SSL://localhost:9093
security.protocol=SASL_SSL
ssl.keystore.location=/path/to/kafka.server.keystore.jks
ssl.keystore.password=keystore-password
ssl.key.password=key-password
sasl.mechanism=SCRAM-SHA-512

보안 구현 전략과 운영 고려사항

단계적 구현 접근법

  1. 초기 단계: SASL/PLAIN으로 기본 인증 구현
  2. 중간 단계: SCRAM으로 업그레이드하여 보안 강화
  3. 고도화 단계: Kerberos 도입 검토 및 SSL/TLS 통합

운영 환경별 권장 구성

- 개발/테스트 환경: SASL/PLAIN + SSL

- QA 환경: SASL/SCRAM + SSL

- 운영 환경: SASL/GSSAPI + SSL

모니터링과 유지보수

보안 모니터링

- 인증 실패 로그 모니터링

- 비정상적인 접근 패턴 감지

- 인증서 만료 날짜 관리

정기적인 보안 점검

- 사용자 접근 권한 검토

- 비밀번호 정책 준수 여부 확인

- 보안 설정 최신화

결론 및 다음 작업

Kafka의 SASL 보안 메커니즘은 기업의 데이터 보안을 위한 핵심 요소입니다.

각 기업의 상황과 요구사항에 맞는 적절한 보안 메커니즘을 선택하고, 이를 단계적으로 구현하여 안정적인 메시징 시스템을 구축하는 것이 중요합니다. 특히 중요 데이터를 다루는 환경에서는 SASL/GSSAPI와 SSL/TLS의 조합을 통해 최고 수준의 보안을 확보하는 것이 권장됩니다. 

저는 회사 내부에 구축된 kafka를 기반으로 인증/인가 기능을 도입할 예정이며, 먼저 SASL/SCRAM 을 적용할 생각입니다.

다음 포스팅에서 가능한 많은 부분을 공유하도록 하겠습니다 :)