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
보안 구현 전략과 운영 고려사항
단계적 구현 접근법
- 초기 단계: SASL/PLAIN으로 기본 인증 구현
- 중간 단계: SCRAM으로 업그레이드하여 보안 강화
- 고도화 단계: Kerberos 도입 검토 및 SSL/TLS 통합
운영 환경별 권장 구성
- 개발/테스트 환경: SASL/PLAIN + SSL
- QA 환경: SASL/SCRAM + SSL
- 운영 환경: SASL/GSSAPI + SSL
모니터링과 유지보수
보안 모니터링
- 인증 실패 로그 모니터링
- 비정상적인 접근 패턴 감지
- 인증서 만료 날짜 관리
정기적인 보안 점검
- 사용자 접근 권한 검토
- 비밀번호 정책 준수 여부 확인
- 보안 설정 최신화
결론 및 다음 작업
Kafka의 SASL 보안 메커니즘은 기업의 데이터 보안을 위한 핵심 요소입니다.
각 기업의 상황과 요구사항에 맞는 적절한 보안 메커니즘을 선택하고, 이를 단계적으로 구현하여 안정적인 메시징 시스템을 구축하는 것이 중요합니다. 특히 중요 데이터를 다루는 환경에서는 SASL/GSSAPI와 SSL/TLS의 조합을 통해 최고 수준의 보안을 확보하는 것이 권장됩니다.
저는 회사 내부에 구축된 kafka를 기반으로 인증/인가 기능을 도입할 예정이며, 먼저 SASL/SCRAM 을 적용할 생각입니다.
다음 포스팅에서 가능한 많은 부분을 공유하도록 하겠습니다 :)