Skip to content

Commit 62c49b5

Browse files
authored
Merge pull request #18253 from saikatcse03/BAEL6420
BAEL-6420 Implement kafka with SASLAuthentication with GSSAPI
2 parents ce9c615 + f8ba0b6 commit 62c49b5

File tree

11 files changed

+191
-0
lines changed

11 files changed

+191
-0
lines changed
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
package com.baeldung.sasl;
2+
3+
import lombok.extern.slf4j.Slf4j;
4+
import org.apache.kafka.clients.consumer.ConsumerRecord;
5+
import org.springframework.kafka.annotation.KafkaListener;
6+
import org.springframework.stereotype.Component;
7+
8+
import java.util.ArrayList;
9+
import java.util.List;
10+
11+
@Component
12+
@Slf4j
13+
public class KafkaConsumer {
14+
15+
public static final String TOPIC = "test-topic";
16+
public final List<String> messages = new ArrayList<>();
17+
18+
@KafkaListener(topics = TOPIC)
19+
public void receive(ConsumerRecord<String, String> consumerRecord) {
20+
log.info("Received payload: '{}'", consumerRecord.toString());
21+
messages.add(consumerRecord.value());
22+
}
23+
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
package com.baeldung.sasl;
2+
3+
import org.springframework.boot.SpringApplication;
4+
import org.springframework.boot.autoconfigure.SpringBootApplication;
5+
6+
@SpringBootApplication
7+
public class KafkaSaslApplication {
8+
9+
public static void main(String[] args) {
10+
System.setProperty("spring.config.name", "application-sasl");
11+
SpringApplication.run(KafkaSaslApplication.class, args);
12+
}
13+
}
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
spring:
2+
kafka:
3+
bootstrap-servers: localhost:9092
4+
properties:
5+
sasl.mechanism: GSSAPI
6+
sasl.jaas.config: >
7+
com.sun.security.auth.module.Krb5LoginModule required
8+
useKeyTab=true
9+
storeKey=true
10+
keyTab="./src/test/resources/sasl/keytabs/client.keytab"
11+
principal="[email protected]"
12+
serviceName="kafka";
13+
security:
14+
protocol: "SASL_PLAINTEXT"
15+
consumer:
16+
group-id: test
17+
auto-offset-reset: earliest
18+
key-deserializer: org.apache.kafka.common.serialization.StringDeserializer
19+
value-deserializer: org.apache.kafka.common.serialization.StringDeserializer
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
package com.baeldung.sasl;
2+
3+
import org.junit.jupiter.api.Test;
4+
import org.junit.jupiter.api.extension.ExtendWith;
5+
import org.springframework.boot.test.context.SpringBootTest;
6+
import org.springframework.test.context.junit.jupiter.SpringExtension;
7+
8+
@ExtendWith(SpringExtension.class)
9+
@SpringBootTest(classes = KafkaSaslApplication.class)
10+
class SpringContextTest {
11+
12+
@Test
13+
void whenSpringContextIsBootstrapped_thenNoExceptions() {
14+
}
15+
}
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
# Use a minimal base image
2+
FROM debian:bullseye
3+
4+
RUN apt-get update && \
5+
apt-get install -y krb5-kdc krb5-admin-server krb5-user && \
6+
rm -rf /var/lib/apt/lists/*
7+
8+
COPY config/krb5.conf /etc/krb5.conf
9+
COPY setup_kdc.sh /setup_kdc.sh
10+
11+
RUN chmod +x /setup_kdc.sh
12+
13+
EXPOSE 88 749
14+
15+
CMD ["/setup_kdc.sh"]
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
KafkaServer {
2+
com.sun.security.auth.module.Krb5LoginModule required
3+
useKeyTab=true
4+
storeKey=true
5+
keyTab="/etc/kafka/keytabs/kafka.keytab"
6+
principal="kafka/[email protected]"
7+
serviceName="kafka";
8+
};
9+
10+
Client {
11+
com.sun.security.auth.module.Krb5LoginModule required
12+
useKeyTab=true
13+
storeKey=true
14+
keyTab="/etc/kafka/keytabs/client.keytab"
15+
principal="[email protected]"
16+
serviceName="kafka";
17+
};
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
[libdefaults]
2+
default_realm = BAELDUNG.COM
3+
dns_lookup_realm = false
4+
dns_lookup_kdc = false
5+
forwardable = true
6+
rdns = true
7+
8+
[realms]
9+
BAELDUNG.COM = {
10+
kdc = kdc
11+
admin_server = kdc
12+
}
13+
14+
[logging]
15+
default = FILE:/var/log/krb5libs.log
16+
kdc = FILE:/var/log/krb5kdc.log
17+
admin_server = FILE:/var/log/kadmind.log
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
Server {
2+
com.sun.security.auth.module.Krb5LoginModule required
3+
useKeyTab=true
4+
storeKey=true
5+
keyTab="/etc/kafka/keytabs/zookeeper.keytab"
6+
principal="zookeeper/[email protected]";
7+
};
Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
services:
2+
3+
kdc:
4+
build:
5+
context: .
6+
dockerfile: Dockerfile
7+
volumes:
8+
- ./config:/etc/krb5kdc
9+
- ./keytabs:/etc/krb5kdc/keytabs
10+
- ./config/krb5.conf:/etc/krb5.conf
11+
ports:
12+
- "88:88/udp"
13+
14+
zookeeper:
15+
image: confluentinc/cp-zookeeper:latest
16+
container_name: zookeeper
17+
hostname: localhost
18+
environment:
19+
ZOOKEEPER_CLIENT_PORT: 2181
20+
ZOOKEEPER_TICK_TIME: 2000
21+
KAFKA_OPTS: "-Djava.security.auth.login.config=/etc/kafka/zookeeper_jaas.conf"
22+
volumes:
23+
- ./config/zookeeper_jaas.conf:/etc/kafka/zookeeper_jaas.conf
24+
- ./keytabs:/etc/kafka/keytabs
25+
- ./config/krb5.conf:/etc/krb5.conf
26+
ports:
27+
- "2181:2181"
28+
29+
kafka:
30+
image: confluentinc/cp-kafka:latest
31+
container_name: kafka
32+
environment:
33+
KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
34+
KAFKA_SASL_MECHANISM_INTER_BROKER_PROTOCOL: GSSAPI
35+
KAFKA_SASL_ENABLED_MECHANISMS: GSSAPI
36+
KAFKA_LISTENERS: SASL_PLAINTEXT://:9092
37+
KAFKA_ADVERTISED_LISTENERS: SASL_PLAINTEXT://localhost:9092
38+
KAFKA_INTER_BROKER_LISTENER_NAME: SASL_PLAINTEXT
39+
KAFKA_OPTS: "-Djava.security.auth.login.config=/etc/kafka/kafka_server_jaas.conf"
40+
KAFKA_AUTO_CREATE_TOPICS_ENABLE: "true"
41+
KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1
42+
volumes:
43+
- ./config/kafka_server_jaas.conf:/etc/kafka/kafka_server_jaas.conf
44+
- ./keytabs:/etc/kafka/keytabs
45+
- ./config/krb5.conf:/etc/krb5.conf
46+
depends_on:
47+
- zookeeper
48+
- kdc
49+
ports:
50+
- 9092:9092

0 commit comments

Comments
 (0)