클라이언트 인증을 사용하도록 Apache Kafka 구성
이 태스크는 Apache Kafka에 대해 클라이언트 인증을 사용으로 설정하는 방법을 설명합니다.
시작하기 전에
- Kafka 서버가 사용하는 포트가 방화벽에 의해 차단되지 않았는지 확인하십시오.
- Kafka 이용자 (QRadar) 와 Kafka 브로커 간에 클라이언트 인증을 사용하려면 클러스터의 각 브로커 및 클라이언트에 대한 키 및 인증서를 생성해야 합니다. 또한 인증 기관(CA)이 이 인증서에 서명해야 합니다.
이 태스크에 대한 정보
다음과 같은 단계에서는 CA를 생성하여 이 CA를 사용하여 클라이언트 및 브로커 인증서에 서명한 후 이를 클라이언트 및 브로커 신뢰 저장소에 추가합니다. Java keytool 및 OpenSSL을 사용하여 키 및 인증서도 생성합니다. 또는 여러 CA(브로커 인증서 서명을 위한 CA 하나와 클라이언트 인증서를 위한 다른 CA)와 함께 외부 CA를 사용할 수 있습니다.
프로시저
- 신뢰 저장소, 키 저장소, 개인 키 및 CA 인증서를 생성하십시오.참고: 다음 명령에서 PASSWORD, VALIDITY, SERVER_ALIAS및 CLIENT_ALIAS를 적절한 값으로 대체하십시오.
- 서버 키 저장소를 생성하십시오.참고:
브로커 인증서의 공통 이름(CN)은 서버/호스트의 완전한 도메인 이름(FQDN)과 일치해야 합니다. QRadar 에서 사용되는 Kafka 이용자 클라이언트는 CN을 DNS 도메인 이름과 비교하여 악성 브로커 대신 올바른 브로커에 연결되어 있는지 확인합니다. 서버 키 저장소를 생성할 때 CN/First and Last name 값에 대해 FQDN을 입력해야 합니다.
keytool -keystore kafka.server.keystore.jks -alias SERVER_ALIAS -validity VALIDITY -genkey- 예
keytool -keystore kafka.server.keystore.jks -alias server.hostname -validity 365 -genkey
- CA 인증서를 생성하십시오.참고:
이 CA 인증서를 사용하여 모든 브로커 및 클라이언트 인증서에 서명할 수 있습니다.
openssl req -new -x509 -keyout ca-key -out ca-cert -days VALIDITY- 예
openssl req -new -x509 -keyout ca-key -out ca-cert -days 365
- 서버 신뢰 저장소를 작성하고 CA 인증서를 가져오십시오.
keytool -keystore kafka.server.truststore.jks -alias CARoot -import -file ca-cert - 클라이언트 신뢰 저장소를 작성하고 CA 인증서를 가져오십시오.
keytool -keystore kafka.client.truststore.jks -alias CARoot -import -file ca-cert - 서버 인증서를 생성한 후 CA를 사용하여 서명하십시오.
keytool -keystore kafka.server.keystore.jks -alias SERVER_ALIAS -certreq -file cert-fileopenssl x509 -req -CA ca-cert -CAkey ca-key -in cert-file -out cert-signed -days VALIDITY -CAcreateserial- 예
keytool -keystore kafka.server.keystore.jks -alias server.hostname -certreq -file cert-fileopenssl x509 -req -CA ca-cert -CAkey ca-key -in cert-file -out cert-signed -days 365 -CAcreateserial
- CA 인증서를 서버 키 저장소로 가져오십시오.
keytool -keystore kafka.server.keystore.jks -alias CARoot -import -file ca-cert - 서명된 서버 인증서를 서버 키 저장소로 가져오십시오.
keytool -keystore kafka.server.keystore.jks -alias SERVER_ALIAS -import -file cert-signed- 예
keytool -keystore kafka.server.keystore.jks -alias server.hostname -import -file cert-signed
- 서버 인증서를 2진 DER 파일에 내보내십시오.참고:
keytool -exportcert명령은 기본적으로 DER 형식을 사용합니다. Kafka와 통신하는 EP의 trusted_certificates/ 디렉토리에 인증서를 배치하십시오. 구성에서 사용하는 모든 부트스트랩 서버에 대한 서버 인증서가 필요합니다. 그렇지 않으면 QRadar 는 서버와의 TLS 핸드쉐이크를 거부합니다.keytool -exportcert -keystore kafka.server.keystore.jks -alias SERVER_ALIAS -file SEVER_ALIAS.der- 예
keytool -exportcert -keystore kafka.server.keystore.jks -alias server.hostname -file server.hostname.der
- 클라이언트 키 저장소를 생성하십시오.
keytool -keystore kafka.client.keystore.jks -alias CLIENT_ALIAS -validity VALIDITY -genkey- 예
keytool -keystore kafka.client.keystore.jks -alias client.hostname -validity 365 -genkey
- 클라이언트 인증서를 생성한 후 CA를 사용하여 서명하십시오.
keytool -keystore kafka.client.keystore.jks -alias CLIENT_ALIAS -certreq -file client-cert-fileopenssl x509 -req -CA ca-cert -CAkey ca-key -in client-cert-file -out client-cert-signed -days VALIDITY -CAcreateserial- 예
keytool -keystore kafka.client.keystore.jks -alias client.hostname -certreq -file client-cert-fileopenssl x509 -req -CA ca-cert -CAkey ca-key -in client-cert-file -out client-cert-signed -days 365 -CAcreateserial
- CA 인증서를 클라이언트 키 저장소로 가져오십시오.
keytool -keystore kafka.client.keystore.jks -alias CARoot -import -file ca-cert - 서명된 클라이언트 인증서를 클라이언트 키 저장소로 가져오십시오.
keytool -keystore kafka.client.keystore.jks -alias CLIENT_ALIAS -import -file client-cert-signed- 예
keytool -keystore kafka.client.keystore.jks -alias client.hostname -import -file client-cert-signed
- 클라이언트 키 저장소 및 신뢰 저장소를 QRadar에 복사하십시오.
- kafka.client.keystore.jks 및 kafka.client.truststore.jks 를 로그 소스가 구성된 각 이벤트 프로세서의 /opt/qradar/conf/trusted_certificates/kafka/ 에 복사하십시오.
- 각 브로커에 대해 생성된 서버 인증서 <filename>.der 를 /opt/qradar/conf/trusted_certificates/에 복사하십시오.
- 서버 키 저장소를 생성하십시오.
- 클라이언트 인증을 위해 Kafka 브로커를 구성하십시오.
- 소켓 서버 설정 섹션을 찾으십시오.
- 다음 옵션 중 하나를 완료하십시오.
- SASL 인증을 사용하지 않는 경우
listeners=PLAINTEXT://:<port>를listeners=SSL://:<PORT>로 변경하고security.inter.broker.protocol=SSL를 추가하십시오. - SASL 인증을 사용하는 경우
listeners=PLAINTEXT://:<port>를listeners=SASL_SSL://:<PORT>로 변경하고security.inter.broker.protocol=SASL_SSL를 추가하십시오.
- SASL 인증을 사용하지 않는 경우
- 다음과 같은 특성을 추가하여 브로커 사이 및 브로커와 클라이언트 사이에
암호화된 통신을 강제하십시오. 필요에 따라 경로, 파일 이름 및 비밀번호를 조정하십시오. 이러한 특성은 서버의 신뢰 저장소 및 키 저장소입니다.
security.inter.broker.protocol=SSL
ssl.client.auth=required
ssl.keystore.location=/somefolder/kafka.server.keystore.jks
ssl.keystore.password=test1234
ssl.key.password=test1234
ssl.truststore.location=/somefolder/kafka.server.truststore.jks
ssl.truststore.password=test1234중요: 비밀번호는 server.properties에 일반 텍스트로 저장되므로 파일 시스템 권한을 사용하여 파일에 대한 액세스를 제한하는 것이 좋습니다. - server.properties 가 수정된 Kafka 브로커를 다시 시작하십시오.