[java] 자바로 카프카에서 발생하는 인증 및 권한 부여 처리하기

카프카는 대규모의 분산 시스템에 사용되는 실시간 데이터 스트리밍 플랫폼입니다. 데이터를 안정적이고 확장 가능하게 처리하기 위해 보안 메커니즘을 제공합니다. 이 글에서는 자바를 사용하여 카프카에서 발생하는 인증 및 권한 부여를 처리하는 방법에 대해 살펴보겠습니다.

1. 카프카 인증 설정

카프카는 일반적으로 SSL/TLS, SASL (Simple Authentication and Security Layer), OAuth 등 다양한 인증 메커니즘을 지원합니다. 각 메커니즘에는 별도의 설정이 필요하며, 여기서는 SASL_PLAIN 인증 메커니즘을 예로 들어 설명하겠습니다.

먼저, 카프카 브로커의 server.properties 파일을 열고 다음과 같이 설정합니다.

listeners=SASL_PLAINTEXT://localhost:9092
security.inter.broker.protocol=SASL_PLAINTEXT
sasl.mechanism.inter.broker.protocol=PLAIN
sasl.enabled.mechanisms=PLAIN

위 설정을 통해 브로커는 SASL_PLAINTEXT 프로토콜을 통해 클라이언트의 연결을 받아들이고, PLAIN 메커니즘을 사용하여 인증을 처리합니다.

2. 자바로 카프카에 연결하기

자바 애플리케이션에서 카프카에 연결하려면 카프카 클라이언트 라이브러리를 사용해야 합니다. Maven을 사용하는 경우, pom.xml 파일에 다음 내용을 추가하여 카프카 클라이언트 라이브러리를 가져옵니다.

<dependency>
    <groupId>org.apache.kafka</groupId>
    <artifactId>kafka-clients</artifactId>
    <version>2.8.0</version>
</dependency>

다음은 자바 코드를 통해 카프카에 연결하는 예제입니다.

import org.apache.kafka.clients.producer.*;
import org.apache.kafka.common.security.auth.SecurityProtocol;
import org.apache.kafka.common.security.plain.PlainLoginModule;
import java.util.Properties;

public class KafkaExample {
    public static void main(String[] args) {
        Properties props = new Properties();
        props.put("bootstrap.servers", "localhost:9092");
        props.put("security.protocol", SecurityProtocol.SASL_PLAINTEXT.name());
        props.put("sasl.mechanism", PlainLoginModule.PLAIN_MECHANISM);
        props.put("sasl.jaas.config", "org.apache.kafka.common.security.plain.PlainLoginModule required " +
                "username=\"my-username\" " +
                "password=\"my-password\";");
 
        Producer<String, String> producer = new KafkaProducer<>(props);
        // 카프카에 데이터를 전송하는 로직을 구현합니다.
        // ...
        
        producer.close();
    }
}

위 코드에서 my-usernamemy-password는 카프카 브로커에 등록된 사용자의 인증 정보입니다. 필요에 따라 사용자 이름과 비밀번호를 적절하게 설정해야 합니다.

3. 권한 부여 설정

카프카는 소비자와 생산자에 대한 권한을 관리할 수 있습니다. 이를 위해 kafka-acls 도구를 사용하여 ACL(Access Control List)을 설정해야 합니다.

예를 들어, 다음 명령을 사용하여 my-user에게 my-topic에 대한 읽기/쓰기 권한을 부여할 수 있습니다.

bin/kafka-acls.sh --authorizer-properties zookeeper.connect=localhost:2181 --add --allow-principal User:"my-user" --operation Read --operation Write --topic my-topic

위 명령에서 my-user는 카프카에 등록된 사용자의 이름이며, my-topic은 권한을 부여할 토픽의 이름입니다.

결론

이제 자바를 사용하여 카프카에서 발생하는 인증 및 권한 부여를 처리하는 방법을 알아보았습니다. 카프카의 다양한 보안 메커니즘에 대해 더 자세히 알고 싶다면 공식 문서를 참조해보세요.