6.3. 인증
Kafka 클러스터에 대한 클라이언트 연결을 인증하기 위해 다음 옵션을 사용할 수 있습니다.
- TLS 클라이언트 인증
- 암호화된 연결에서 X.509 인증서를 사용하는 TLS(Transport Layer Security)
- Kafka SASL
- 지원되는 인증 메커니즘을 사용하는 Kafka SASL(Simple Authentication and Security Layer)
- OAuth 2.0
- OAuth 2.0 토큰 기반 인증
SASL 인증은 일반 암호화되지 않은 연결 및 TLS 연결에 대한 다양한 메커니즘을 지원합니다.
-
PLAIN
- 사용자 이름 및 암호를 기반으로 하는 인증입니다. -
SCRAM-SHA-256
및SCRAM-SHA-512
- SCRAM(Salted Challenge Response Authentication Mechanism)을 사용한 인증입니다. -
GSSAPI
- Kerberos 서버에 대한 인증입니다.
PLAIN
메커니즘은 암호화되지 않은 형식으로 네트워크를 통해 사용자 이름과 암호를 보냅니다. TLS 암호화와 함께만 사용해야 합니다.
6.3.1. TLS 클라이언트 인증 활성화
Kafka 브로커에서 TLS 클라이언트 인증을 활성화하여 이미 TLS 암호화를 사용하는 Kafka 노드 연결에 대한 보안을 강화합니다.
ssl.client.auth
속성을 사용하여 다음 값 중 하나로 TLS 인증을 설정합니다.
-
none
- TLS 클라이언트 인증이 꺼져 있습니다(기본값) -
요청
됨 - 선택적 TLS 클라이언트 인증 -
필수
- 클라이언트는 TLS 클라이언트 인증서를 사용하여 인증해야 합니다.
클라이언트가 TLS 클라이언트 인증을 사용하여 인증하면 인증된 주체 이름이 클라이언트 인증서에서 고유 이름에서 파생됩니다. 예를 들어 고유 이름이 CN=someuser
인 인증서가 있는 사용자는 CN=someuser,OU=Unknown,O=Unknown,L=Unknown,ST=Unknown,C=Unknown
을 사용하여 인증됩니다. 이 주체 이름은 인증된 사용자 또는 엔티티에 대한 고유 식별자를 제공합니다. TLS 클라이언트 인증을 사용하지 않고 SASL이 비활성화된 경우 주 이름은 기본적으로 ANONYMOUS
입니다.
사전 요구 사항
- Apache Kafka의 스트림 은 각 호스트에 설치되고 구성 파일을 사용할 수 있습니다.
- TLS 암호화가 활성화되어 있습니다.
프로세스
- 사용자 인증서에 서명하는 데 사용되는 CA(Certification Authority)의 공개 키가 포함된 JKS(Java 키 저장소) 신뢰 저장소를 준비합니다.
다음과 같이 모든 클러스터 노드에서 Kafka 구성 속성 파일을 편집합니다.
-
ssl.truststore.location
속성을 사용하여 JKS 신뢰 저장소의 경로를 지정합니다. -
신뢰 저장소가 암호로 보호되는 경우
ssl.truststore.password
속성을 사용하여 암호를 설정합니다. ssl.client.auth
속성을required
로 설정합니다.TLS 클라이언트 인증 구성
ssl.truststore.location=/path/to/truststore.jks ssl.truststore.password=123456 ssl.client.auth=required
ssl.truststore.location=/path/to/truststore.jks ssl.truststore.password=123456 ssl.client.auth=required
Copy to Clipboard Copied!
-
- Kafka 브로커를 시작합니다.
6.3.2. SASL PLAIN 클라이언트 인증 활성화
Kafka에서 SASL PLAIN 인증을 활성화하여 Kafka 노드 연결에 대한 보안을 강화합니다.
SASL 인증은 KafkaServer
JAAS 컨텍스트를 사용하는 JAAS(Java Authentication and Authorization Service)를 통해 활성화됩니다. 전용 파일에서 또는 Kafka 구성에서 직접 JAAS 구성을 정의할 수 있습니다.
전용 파일의 권장 위치는 /opt/kafka/config/jaas.conf
입니다. kafka
사용자가 파일을 읽을 수 있는지 확인합니다. 모든 Kafka 노드에서 JAAS 구성 파일을 동기화 상태로 유지합니다.
사전 요구 사항
- Apache Kafka의 스트림 은 각 호스트에 설치되고 구성 파일을 사용할 수 있습니다.
프로세스
/opt/kafka/config/jaas.conf
JAAS 구성 파일을 편집하거나 생성하여PlainLoginModule
을 활성화하고 허용된 사용자 이름과 암호를 지정합니다.이 파일이 모든 Kafka 브로커에서 동일한지 확인합니다.
JAAS 구성
KafkaServer { org.apache.kafka.common.security.plain.PlainLoginModule required user_admin="123456" user_user1="123456" user_user2="123456"; };
KafkaServer { org.apache.kafka.common.security.plain.PlainLoginModule required user_admin="123456" user_user1="123456" user_user2="123456"; };
Copy to Clipboard Copied! 다음과 같이 모든 클러스터 노드에서 Kafka 구성 속성 파일을 편집합니다.
-
listener.security.protocol.map
속성을 사용하여 특정 리스너에서 SASL PLAIN 인증을 활성화합니다.SASL_PLAINTEXT
또는SASL_SSL
을 지정합니다. sasl.enabled.mechanisms
속성을PLAIN
으로 설정합니다.SASL 일반 구성
listeners=INSECURE://:9092,AUTHENTICATED://:9093,REPLICATION://:9094 listener.security.protocol.map=INSECURE:PLAINTEXT,AUTHENTICATED:SASL_PLAINTEXT,REPLICATION:PLAINTEXT sasl.enabled.mechanisms=PLAIN
listeners=INSECURE://:9092,AUTHENTICATED://:9093,REPLICATION://:9094 listener.security.protocol.map=INSECURE:PLAINTEXT,AUTHENTICATED:SASL_PLAINTEXT,REPLICATION:PLAINTEXT sasl.enabled.mechanisms=PLAIN
Copy to Clipboard Copied!
-
(re)
KAFKA_OPTS
환경 변수를 사용하여 Kafka 브로커를 시작하여 JAAS 구성을 Kafka 브로커에 전달합니다.su - kafka export KAFKA_OPTS="-Djava.security.auth.login.config=/opt/kafka/config/jaas.conf"; /opt/kafka/bin/kafka-server-start.sh -daemon /opt/kafka/config/server.properties
su - kafka export KAFKA_OPTS="-Djava.security.auth.login.config=/opt/kafka/config/jaas.conf"; /opt/kafka/bin/kafka-server-start.sh -daemon /opt/kafka/config/server.properties
Copy to Clipboard Copied!
6.3.3. SASL SCRAM 클라이언트 인증 활성화
Kafka에서 SASL SCRAM 인증을 활성화하여 Kafka 노드 연결에 대한 보안을 강화합니다.
SASL 인증은 KafkaServer
JAAS 컨텍스트를 사용하는 JAAS(Java Authentication and Authorization Service)를 통해 활성화됩니다. 전용 파일에서 또는 Kafka 구성에서 직접 JAAS 구성을 정의할 수 있습니다.
전용 파일의 권장 위치는 /opt/kafka/config/jaas.conf
입니다. kafka
사용자가 파일을 읽을 수 있는지 확인합니다. 모든 Kafka 노드에서 JAAS 구성 파일을 동기화 상태로 유지합니다.
사전 요구 사항
- Apache Kafka의 스트림 은 각 호스트에 설치되고 구성 파일을 사용할 수 있습니다.
프로세스
/opt/kafka/config/jaas.conf
JAAS 구성 파일을 편집하거나 생성하여ScramLoginModule
을 활성화합니다.이 파일이 모든 Kafka 브로커에서 동일한지 확인합니다.
JAAS 구성
KafkaServer { org.apache.kafka.common.security.scram.ScramLoginModule required; };
KafkaServer { org.apache.kafka.common.security.scram.ScramLoginModule required; };
Copy to Clipboard Copied! 다음과 같이 모든 클러스터 노드에서 Kafka 구성 속성 파일을 편집합니다.
-
listener.security.protocol.map
속성을 사용하여 특정 리스너에서 SASL SCRAM 인증을 활성화합니다.SASL_PLAINTEXT
또는SASL_SSL
을 지정합니다. sasl.enabled.mechanisms
옵션을SCRAM-SHA-256
또는SCRAM-SHA-512
로 설정합니다.예를 들면 다음과 같습니다.
listeners=INSECURE://:9092,AUTHENTICATED://:9093,REPLICATION://:9094 listener.security.protocol.map=INSECURE:PLAINTEXT,AUTHENTICATED:SASL_PLAINTEXT,REPLICATION:PLAINTEXT sasl.enabled.mechanisms=SCRAM-SHA-512
listeners=INSECURE://:9092,AUTHENTICATED://:9093,REPLICATION://:9094 listener.security.protocol.map=INSECURE:PLAINTEXT,AUTHENTICATED:SASL_PLAINTEXT,REPLICATION:PLAINTEXT sasl.enabled.mechanisms=SCRAM-SHA-512
Copy to Clipboard Copied!
-
(re)
KAFKA_OPTS
환경 변수를 사용하여 Kafka 브로커를 시작하여 JAAS 구성을 Kafka 브로커에 전달합니다.su - kafka export KAFKA_OPTS="-Djava.security.auth.login.config=/opt/kafka/config/jaas.conf"; /opt/kafka/bin/kafka-server-start.sh -daemon /opt/kafka/config/server.properties
su - kafka export KAFKA_OPTS="-Djava.security.auth.login.config=/opt/kafka/config/jaas.conf"; /opt/kafka/bin/kafka-server-start.sh -daemon /opt/kafka/config/server.properties
Copy to Clipboard Copied!
6.3.4. 여러 SASL 메커니즘 활성화
SASL 인증을 사용하는 경우 둘 이상의 메커니즘을 활성화할 수 있습니다. Kafka는 둘 이상의 SASL 메커니즘을 동시에 사용할 수 있습니다. 여러 메커니즘이 활성화되면 클라이언트가 사용하는 메커니즘을 선택할 수 있습니다.
둘 이상의 메커니즘을 사용하려면 각 메커니즘에 필요한 구성을 설정합니다. 동일한 컨텍스트에 다른 KafkaServer
JAAS 구성을 추가하고 sasl.mechanism.inter.broker.protocol
속성을 사용하여 Kafka 구성에서 하나 이상의 메커니즘을 쉼표로 구분된 목록으로 활성화할 수 있습니다.
두 개 이상의 SASL 메커니즘에 대한 JAAS 구성
KafkaServer { org.apache.kafka.common.security.plain.PlainLoginModule required user_admin="123456" user_user1="123456" user_user2="123456"; com.sun.security.auth.module.Krb5LoginModule required useKeyTab=true storeKey=true keyTab="/etc/security/keytabs/kafka_server.keytab" principal="kafka/kafka1.hostname.com@EXAMPLE.COM"; org.apache.kafka.common.security.scram.ScramLoginModule required; };
KafkaServer {
org.apache.kafka.common.security.plain.PlainLoginModule required
user_admin="123456"
user_user1="123456"
user_user2="123456";
com.sun.security.auth.module.Krb5LoginModule required
useKeyTab=true
storeKey=true
keyTab="/etc/security/keytabs/kafka_server.keytab"
principal="kafka/kafka1.hostname.com@EXAMPLE.COM";
org.apache.kafka.common.security.scram.ScramLoginModule required;
};
SASL 메커니즘 활성화
sasl.enabled.mechanisms=PLAIN,SCRAM-SHA-256,SCRAM-SHA-512
sasl.enabled.mechanisms=PLAIN,SCRAM-SHA-256,SCRAM-SHA-512
6.3.5. broker 인증을 위한 SASL 활성화
Kafka 노드 간에 SASL SCRAM 인증을 활성화하여 브루커 간 연결에 대한 보안을 강화합니다. Kafka 클러스터에 대한 클라이언트 연결에 SASL 인증을 사용할 뿐만 아니라broker 간 인증에 SASL을 사용할 수도 있습니다. 클라이언트 연결에 대한 SASL과 달리 상호 통신에 대한 하나의 메커니즘만 선택할 수 있습니다.
사전 요구 사항
- Zookeeper 는 각 호스트에 설치되고 구성 파일을 사용할 수 있습니다.
SCRAM 메커니즘을 사용하는 경우 Kafka 클러스터에 SCRAM 자격 증명을 등록합니다.
Kafka 클러스터의 모든 노드의 경우 비브로커 SASL SCRAM 사용자를 Zoo Cryostat에 추가합니다. 이렇게 하면 Kafka 클러스터가 실행되기 전에 인증에 대한 인증 정보가 부트스트랩을 위해 업데이트됩니다.
broker SASL SCRAM 사용자 등록
bin/kafka-configs.sh \ --zookeeper localhost:2181 \ --alter \ --add-config 'SCRAM-SHA-512=[password=changeit]' \ --entity-type users \ --entity-name kafka
bin/kafka-configs.sh \ --zookeeper localhost:2181 \ --alter \ --add-config 'SCRAM-SHA-512=[password=changeit]' \ --entity-type users \ --entity-name kafka
Copy to Clipboard Copied!
프로세스
sasl.mechanism.inter.broker.protocol
속성을 사용하여 Kafka 구성에서 inter-broker SASL 메커니즘을 지정합니다.broker SASL 메커니즘
sasl.mechanism.inter.broker.protocol=SCRAM-SHA-512
sasl.mechanism.inter.broker.protocol=SCRAM-SHA-512
Copy to Clipboard Copied! (선택 사항) SCRAM 메커니즘을 사용하는 경우 SCRAM 사용자를 추가하여 Kafka 클러스터에서 SCRAM 자격 증명을 등록합니다.
이렇게 하면 Kafka 클러스터가 실행되기 전에 인증에 대한 인증 정보가 부트스트랩을 위해 업데이트됩니다.
username
및 password 필드를 사용하여KafkaServer
JAAS 컨텍스트에서broker 간 통신의 사용자 이름과암호를
지정합니다.broker JAAS 컨텍스트
KafkaServer { org.apache.kafka.common.security.plain.ScramLoginModule required username="admin" password="123456" # ... };
KafkaServer { org.apache.kafka.common.security.plain.ScramLoginModule required username="admin" password="123456" # ... };
Copy to Clipboard Copied!
6.3.6. SASL SCRAM 사용자 추가
이 절차에서는 Kafka의 SASL SCRAM을 사용하여 인증에 대한 새 사용자를 등록하는 단계를 간략하게 설명합니다. SASL SCRAM 인증은 클라이언트 연결의 보안을 향상시킵니다.
사전 요구 사항
- Apache Kafka의 스트림 은 각 호스트에 설치되고 구성 파일을 사용할 수 있습니다.
- SASL SCRAM 인증이 활성화됩니다.
프로세스
kafka-configs.sh
도구를 사용하여 새 SASL SCRAM 사용자를 추가합니다./opt/kafka/kafka-configs.sh \ --bootstrap-server <broker_host>:<port> \ --alter \ --add-config 'SCRAM-SHA-512=[password=<password>]' \ --entity-type users --entity-name <username>
/opt/kafka/kafka-configs.sh \ --bootstrap-server <broker_host>:<port> \ --alter \ --add-config 'SCRAM-SHA-512=[password=<password>]' \ --entity-type users --entity-name <username>
Copy to Clipboard Copied! 예를 들면 다음과 같습니다.
/opt/kafka/kafka-configs.sh \ --bootstrap-server localhost:9092 \ --alter \ --add-config 'SCRAM-SHA-512=[password=123456]' \ --entity-type users \ --entity-name user1
/opt/kafka/kafka-configs.sh \ --bootstrap-server localhost:9092 \ --alter \ --add-config 'SCRAM-SHA-512=[password=123456]' \ --entity-type users \ --entity-name user1
Copy to Clipboard Copied!
6.3.7. SASL SCRAM 사용자 삭제
이 절차에서는 Kafka의 SASL SCRAM을 사용하여 인증에 등록된 사용자를 제거하는 단계를 간략하게 설명합니다.
사전 요구 사항
- Apache Kafka의 스트림 은 각 호스트에 설치되고 구성 파일을 사용할 수 있습니다.
- SASL SCRAM 인증이 활성화됩니다.
프로세스
kafka-configs.sh
도구를 사용하여 SASL SCRAM 사용자를 삭제합니다./opt/kafka/bin/kafka-configs.sh \ --bootstrap-server <broker_host>:<port> \ --alter \ --delete-config 'SCRAM-SHA-512' \ --entity-type users \ --entity-name <username>
/opt/kafka/bin/kafka-configs.sh \ --bootstrap-server <broker_host>:<port> \ --alter \ --delete-config 'SCRAM-SHA-512' \ --entity-type users \ --entity-name <username>
Copy to Clipboard Copied! 예를 들면 다음과 같습니다.
/opt/kafka/bin/kafka-configs.sh \ --bootstrap-server localhost:9092 \ --alter \ --delete-config 'SCRAM-SHA-512' \ --entity-type users \ --entity-name user1
/opt/kafka/bin/kafka-configs.sh \ --bootstrap-server localhost:9092 \ --alter \ --delete-config 'SCRAM-SHA-512' \ --entity-type users \ --entity-name user1
Copy to Clipboard Copied!
6.3.8. Kerberos(GSSAPI) 인증 활성화
Apache Kafka용 스트림은 Kafka 클러스터에 대한 보안 SSO(Single Sign-On) 액세스를 위해 Kerberos(GSSAPI) 인증 프로토콜 사용을 지원합니다. GSSAPI는 Kerberos 기능을 위한 API 래퍼로, 기본 구현 변경 사항에서 애플리케이션을 격리합니다.
Kerberos는 대칭 암호화 및 신뢰할 수 있는 타사인 KDC(Kerberos Key Distribution Centre)를 사용하여 클라이언트와 서버가 서로 인증할 수 있는 네트워크 인증 시스템입니다.
다음 절차에서는 Kafka 클라이언트가 Kerberos(GSSAPI) 인증을 사용하여 Kafka 및 Zoo Cryostat에 액세스할 수 있도록 Apache Kafka용 Streams를 구성하는 방법을 보여줍니다.
이 절차에서는 Kerberos krb5 리소스 서버가 Red Hat Enterprise Linux 호스트에 설정되어 있다고 가정합니다.
이 절차에서는 예제를 사용하여 다음을 구성하는 방법을 보여줍니다.
- 서비스 주체
- Kerberos 로그인을 사용하는 Kafka 브로커
- Kerberos 로그인을 사용하는 Zookeeper
- Kerberos 인증을 사용하여 Kafka에 액세스할 수 있는 생산자 및 소비자 클라이언트
지침은 생산자 및 소비자 클라이언트에 대한 추가 구성으로 단일 호스트에 단일 Zoo Cryostat 및 Kafka 설치에 대해 설정된 Kerberos를 설명합니다.
사전 요구 사항
Kerberos 자격 증명을 인증하고 인증하도록 Kafka 및 Zoo Cryostat를 구성하려면 다음이 필요합니다.
- Kerberos 서버에 액세스
- 각 Kafka 브로커 호스트의 Kerberos 클라이언트
Kerberos 서버 설정 단계에 대한 자세한 내용 및 브로커 호스트에 클라이언트를 보려면 RHEL 설정 구성의 예제 Kerberos 를 참조하십시오.
인증을 위한 서비스 주체 추가
Kerberos 서버에서 Zoo Cryostat, Kafka 브로커 및 Kafka 생산자 및 소비자 클라이언트에 대한 서비스 주체(사용자)를 생성합니다.
서비스 주체는 SERVICE-NAME/FULLY-QUALIFIED-HOST-NAME@DOMAIN-REALM 양식을 사용해야 합니다.
Kerberos KDC를 통해 주 키를 저장하는 keytab과 서비스 주체를 생성합니다.
Kerberos 주체의 도메인 이름이 대문자인지 확인합니다.
예를 들면 다음과 같습니다.
-
zookeeper/node1.example.redhat.com@EXAMPLE.REDHAT.COM
-
kafka/node1.example.redhat.com@EXAMPLE.REDHAT.COM
-
producer1/node1.example.redhat.com@EXAMPLE.REDHAT.COM
consumer1/node1.example.redhat.com@EXAMPLE.REDHAT.COM
Zoo Cryostat 서비스 주체는 Kafka
config/server.properties
파일의zookeeper.connect
구성과 동일한 호스트 이름을 사용해야 합니다.zookeeper.connect=node1.example.redhat.com:2181
zookeeper.connect=node1.example.redhat.com:2181
Copy to Clipboard Copied! 호스트 이름이 동일하지 않으면 localhost 가 사용되고 인증이 실패합니다.
-
호스트에 디렉터리를 만들고 keytab 파일을 추가합니다.
예를 들면 다음과 같습니다.
/opt/kafka/krb5/zookeeper-node1.keytab /opt/kafka/krb5/kafka-node1.keytab /opt/kafka/krb5/kafka-producer1.keytab /opt/kafka/krb5/kafka-consumer1.keytab
/opt/kafka/krb5/zookeeper-node1.keytab /opt/kafka/krb5/kafka-node1.keytab /opt/kafka/krb5/kafka-producer1.keytab /opt/kafka/krb5/kafka-consumer1.keytab
Copy to Clipboard Copied! kafka
사용자가 디렉터리에 액세스할 수 있는지 확인합니다.chown kafka:kafka -R /opt/kafka/krb5
chown kafka:kafka -R /opt/kafka/krb5
Copy to Clipboard Copied!
Kerberos 로그인을 사용하도록 Zoo Cryostat 구성
Zookeeper를 위해 이전에 생성된 사용자 주체 및 키탭을 사용하여 인증에 Kerberos KDC(Key Distribution Center)를 사용하도록 Zoo Cryostat를 구성합니다
.
opt/kafka/config/jaas.conf
파일을 생성하거나 수정하여 Zoo Cryostat 클라이언트 및 서버 작업을 지원합니다.Client { com.sun.security.auth.module.Krb5LoginModule required debug=true useKeyTab=true storeKey=true useTicketCache=false keyTab="/opt/kafka/krb5/zookeeper-node1.keytab" principal="zookeeper/node1.example.redhat.com@EXAMPLE.REDHAT.COM"; }; Server { com.sun.security.auth.module.Krb5LoginModule required debug=true useKeyTab=true storeKey=true useTicketCache=false keyTab="/opt/kafka/krb5/zookeeper-node1.keytab" principal="zookeeper/node1.example.redhat.com@EXAMPLE.REDHAT.COM"; }; QuorumServer { com.sun.security.auth.module.Krb5LoginModule required debug=true useKeyTab=true storeKey=true keyTab="/opt/kafka/krb5/zookeeper-node1.keytab" principal="zookeeper/node1.example.redhat.com@EXAMPLE.REDHAT.COM"; }; QuorumLearner { com.sun.security.auth.module.Krb5LoginModule required debug=true useKeyTab=true storeKey=true keyTab="/opt/kafka/krb5/zookeeper-node1.keytab" principal="zookeeper/node1.example.redhat.com@EXAMPLE.REDHAT.COM"; };
Client { com.sun.security.auth.module.Krb5LoginModule required debug=true useKeyTab=true
1 storeKey=true
2 useTicketCache=false
3 keyTab="/opt/kafka/krb5/zookeeper-node1.keytab"
4 principal="zookeeper/node1.example.redhat.com@EXAMPLE.REDHAT.COM";
5 }; Server { com.sun.security.auth.module.Krb5LoginModule required debug=true useKeyTab=true storeKey=true useTicketCache=false keyTab="/opt/kafka/krb5/zookeeper-node1.keytab" principal="zookeeper/node1.example.redhat.com@EXAMPLE.REDHAT.COM"; }; QuorumServer { com.sun.security.auth.module.Krb5LoginModule required debug=true useKeyTab=true storeKey=true keyTab="/opt/kafka/krb5/zookeeper-node1.keytab" principal="zookeeper/node1.example.redhat.com@EXAMPLE.REDHAT.COM"; }; QuorumLearner { com.sun.security.auth.module.Krb5LoginModule required debug=true useKeyTab=true storeKey=true keyTab="/opt/kafka/krb5/zookeeper-node1.keytab" principal="zookeeper/node1.example.redhat.com@EXAMPLE.REDHAT.COM"; };
Copy to Clipboard Copied! - 1
- 키탭에서 기본 키를 가져오려면
true
로 설정합니다. - 2
- 기본 키를 저장하려면
true
로 설정합니다. - 3
- 티켓 캐시에서 티켓 부여 티켓(TGT)을 받으려면
true
로 설정합니다. - 4
keyTab
속성은 Kerberos KDC에서 복사한 키탭 파일의 위치를 가리킵니다. 위치와 파일은kafka
사용자가 읽을 수 있어야 합니다.- 5
principal
속성은SERVICE-NAME/FULLY-QUALIFIED-HOST-NAME@DOMAIN-NAME
형식을 따르는 KDC 호스트에서 생성된 정규화된 주체 이름과 일치하도록 구성됩니다.
업데이트된 JAAS 구성을 사용하도록
opt/kafka/config/zookeeper.properties
를 편집합니다....
# ... requireClientAuthScheme=sasl jaasLoginRenew=3600000
1 kerberos.removeHostFromPrincipal=false
2 kerberos.removeRealmFromPrincipal=false
3 quorum.auth.enableSasl=true
4 quorum.auth.learnerRequireSasl=true
5 quorum.auth.serverRequireSasl=true quorum.auth.learner.loginContext=QuorumLearner
6 quorum.auth.server.loginContext=QuorumServer quorum.auth.kerberos.servicePrincipal=zookeeper/_HOST
7 quorum.cnxn.threads.size=20
Copy to Clipboard Copied! - 1
- 로그인 갱신 빈도를 밀리초 단위로 제어하며 티켓 갱신 간격에 맞게 조정할 수 있습니다. 기본값은 1시간입니다.
- 2
- 호스트 이름이 로그인 주체 이름의 일부로 사용되는지 여부를 지정합니다. 클러스터의 모든 노드에 단일 키탭을 사용하는 경우
true
로 설정됩니다. 그러나 문제 해결을 위해 각 브로커 호스트에 대해 별도의 keytab과 정규화된 주체를 생성하는 것이 좋습니다. - 3
- Kerberos 협상의 주체 이름에서 영역 이름이 제거되는지 여부를 제어합니다. 이 설정을
false
로 설정하는 것이 좋습니다. - 4
- Zoo Cryostat 서버 및 클라이언트에 대한 SASL 인증 메커니즘을 활성화합니다.
- 5
RequireSasl
속성은 마스터 선택과 같은 쿼럼 이벤트에 SASL 인증이 필요한지 여부를 제어합니다.- 6
loginContext
속성은 지정된 구성 요소의 인증 구성에 사용되는 JAAS 구성에서 로그인 컨텍스트의 이름을 식별합니다. loginContext 이름은opt/kafka/config/jaas.conf
파일의 관련 섹션 이름에 해당합니다.- 7
- 식별에 사용되는 보안 주체 이름을 구성하는 데 사용할 이름 지정 규칙을 제어합니다.Controls the naming convention to be used to form the principal name used for identification. 자리 표시자
_HOST
는 런타임 시server.1
속성에 정의된 호스트 이름으로 자동으로 확인됩니다.
JVM 매개변수로 Zoo Cryostat를 시작하여 Kerberos 로그인 구성을 지정합니다.
su - kafka export EXTRA_ARGS="-Djava.security.krb5.conf=/etc/krb5.conf -Djava.security.auth.login.config=/opt/kafka/config/jaas.conf"; /opt/kafka/bin/zookeeper-server-start.sh -daemon /opt/kafka/config/zookeeper.properties
su - kafka export EXTRA_ARGS="-Djava.security.krb5.conf=/etc/krb5.conf -Djava.security.auth.login.config=/opt/kafka/config/jaas.conf"; /opt/kafka/bin/zookeeper-server-start.sh -daemon /opt/kafka/config/zookeeper.properties
Copy to Clipboard Copied! 기본 서비스 이름( Zookeeper )을 사용하지 않는 경우
-Dzookeeper.sasl.client.username=NAME
매개변수를 사용하여 이름을 추가합니다.참고/etc/krb5.conf
위치를 사용하는 경우 Zoo Cryostat, Kafka 또는 Kafka 생산자 및 소비자를 시작할 때-Djava.security.krb5.conf=/etc/krb5.conf
를 지정할 필요가 없습니다.
Kerberos 로그인을 사용하도록 Kafka 브로커 서버 구성
이전에 kafka
용으로 생성된 사용자 주체 및 키탭을 사용하여 인증에 KDC(Kerberos Key Distribution Center)를 사용하도록 Kafka를 구성합니다.
다음 요소를 사용하여
opt/kafka/config/jaas.conf
파일을 수정합니다.KafkaServer { com.sun.security.auth.module.Krb5LoginModule required useKeyTab=true storeKey=true keyTab="/opt/kafka/krb5/kafka-node1.keytab" principal="kafka/node1.example.redhat.com@EXAMPLE.REDHAT.COM"; }; KafkaClient { com.sun.security.auth.module.Krb5LoginModule required debug=true useKeyTab=true storeKey=true useTicketCache=false keyTab="/opt/kafka/krb5/kafka-node1.keytab" principal="kafka/node1.example.redhat.com@EXAMPLE.REDHAT.COM"; };
KafkaServer { com.sun.security.auth.module.Krb5LoginModule required useKeyTab=true storeKey=true keyTab="/opt/kafka/krb5/kafka-node1.keytab" principal="kafka/node1.example.redhat.com@EXAMPLE.REDHAT.COM"; }; KafkaClient { com.sun.security.auth.module.Krb5LoginModule required debug=true useKeyTab=true storeKey=true useTicketCache=false keyTab="/opt/kafka/krb5/kafka-node1.keytab" principal="kafka/node1.example.redhat.com@EXAMPLE.REDHAT.COM"; };
Copy to Clipboard Copied! 리스너가 SASL/GSSAPI 로그인을 사용하도록
config/server.properties
파일에서 리스너 구성을 수정하여 Kafka 클러스터에서 각 브로커를 구성합니다.SASL 프로토콜을 리스너의 보안 프로토콜 맵에 추가하고 원하지 않는 프로토콜을 제거합니다.
예를 들면 다음과 같습니다.
... ... ... ..
# ... broker.id=0 # ... listeners=SECURE://:9092,REPLICATION://:9094
1 inter.broker.listener.name=REPLICATION # ... listener.security.protocol.map=SECURE:SASL_PLAINTEXT,REPLICATION:SASL_PLAINTEXT
2 # .. sasl.enabled.mechanisms=GSSAPI
3 sasl.mechanism.inter.broker.protocol=GSSAPI
4 sasl.kerberos.service.name=kafka
5 ...
Copy to Clipboard Copied! - 1
- 두 개의 리스너: 클라이언트와의 범용 통신을 위한 보안 리스너( communication을 위해 TLS 지원) 및 브루커 간 통신을 위한 복제 리스너가 구성됩니다.
- 2
- TLS 지원 리스너의 경우 프로토콜 이름은 SASL_PLAINTEXT입니다. TLS 지원 커넥터의 경우 프로토콜 이름은 SASL_PLAINTEXT입니다. SSL이 필요하지 않은 경우
ssl.*
속성을 제거할 수 있습니다. - 3
- Kerberos 인증을 위한 SASL 메커니즘은
GSSAPI
입니다. - 4
- 브랜드 간 통신을 위한 Kerberos 인증.
- 5
- 인증 요청에 사용되는 서비스의 이름은 동일한 Kerberos 구성을 사용하는 다른 서비스와 구별하기 위해 지정됩니다.
JVM 매개변수를 사용하여 Kafka 브로커를 시작하여 Kerberos 로그인 구성을 지정합니다.
su - kafka export KAFKA_OPTS="-Djava.security.krb5.conf=/etc/krb5.conf -Djava.security.auth.login.config=/opt/kafka/config/jaas.conf"; /opt/kafka/bin/kafka-server-start.sh -daemon /opt/kafka/config/server.properties
su - kafka export KAFKA_OPTS="-Djava.security.krb5.conf=/etc/krb5.conf -Djava.security.auth.login.config=/opt/kafka/config/jaas.conf"; /opt/kafka/bin/kafka-server-start.sh -daemon /opt/kafka/config/server.properties
Copy to Clipboard Copied! 브로커 및 Zoo Cryostat 클러스터가 이전에 구성되어 Kerberos 기반 인증 시스템으로 작업하는 경우 Zoo Cryostat 및 브로커 클러스터를 시작하고 로그에서 구성 오류를 확인할 수 있습니다.
브로커 및 Zookeeper 인스턴스를 시작한 후 이제 Kerberos 인증을 위해 클러스터가 구성됩니다.
Kerberos 인증을 사용하도록 Kafka 생산자 및 소비자 클라이언트 구성
producer1
및 consumer1
을 위해 이전에 생성된 사용자 주체 및 keytab을 사용하여 인증에 Kerberos KMS(Key Distribution Center)를 사용하도록 Kafka 생산자 및 소비자 클라이언트를 구성합니다.
Kerberos 구성을 생산자 또는 소비자 구성 파일에 추가합니다.
예를 들면 다음과 같습니다.
/opt/kafka/config/producer.properties
... ...
# ... sasl.mechanism=GSSAPI
1 security.protocol=SASL_PLAINTEXT
2 sasl.kerberos.service.name=kafka
3 sasl.jaas.config=com.sun.security.auth.module.Krb5LoginModule required \
4 useKeyTab=true \ useTicketCache=false \ storeKey=true \ keyTab="/opt/kafka/krb5/producer1.keytab" \ principal="producer1/node1.example.redhat.com@EXAMPLE.REDHAT.COM"; # ...
Copy to Clipboard Copied! /opt/kafka/config/consumer.properties
... ...
# ... sasl.mechanism=GSSAPI security.protocol=SASL_PLAINTEXT sasl.kerberos.service.name=kafka sasl.jaas.config=com.sun.security.auth.module.Krb5LoginModule required \ useKeyTab=true \ useTicketCache=false \ storeKey=true \ keyTab="/opt/kafka/krb5/consumer1.keytab" \ principal="consumer1/node1.example.redhat.com@EXAMPLE.REDHAT.COM"; # ...
Copy to Clipboard Copied! 클라이언트를 실행하여 Kafka 브로커에서 메시지를 보내고 받을 수 있는지 확인합니다.
생산자 클라이언트:
export KAFKA_HEAP_OPTS="-Djava.security.krb5.conf=/etc/krb5.conf -Dsun.security.krb5.debug=true"; /opt/kafka/bin/kafka-console-producer.sh --producer.config /opt/kafka/config/producer.properties --topic topic1 --bootstrap-server node1.example.redhat.com:9094
export KAFKA_HEAP_OPTS="-Djava.security.krb5.conf=/etc/krb5.conf -Dsun.security.krb5.debug=true"; /opt/kafka/bin/kafka-console-producer.sh --producer.config /opt/kafka/config/producer.properties --topic topic1 --bootstrap-server node1.example.redhat.com:9094
Copy to Clipboard Copied! 소비자 클라이언트:
export KAFKA_HEAP_OPTS="-Djava.security.krb5.conf=/etc/krb5.conf -Dsun.security.krb5.debug=true"; /opt/kafka/bin/kafka-console-consumer.sh --consumer.config /opt/kafka/config/consumer.properties --topic topic1 --bootstrap-server node1.example.redhat.com:9094
export KAFKA_HEAP_OPTS="-Djava.security.krb5.conf=/etc/krb5.conf -Dsun.security.krb5.debug=true"; /opt/kafka/bin/kafka-console-consumer.sh --consumer.config /opt/kafka/config/consumer.properties --topic topic1 --bootstrap-server node1.example.redhat.com:9094
Copy to Clipboard Copied!