클라이언트 인증을 사용하도록 Apache Kafka 구성

이 태스크는 Apache Kafka에 대해 클라이언트 인증을 사용으로 설정하는 방법을 설명합니다.

시작하기 전에

  1. Kafka 서버가 사용하는 포트가 방화벽에 의해 차단되지 않았는지 확인하십시오.
  2. Kafka 이용자 (QRadar) 와 Kafka 브로커 간에 클라이언트 인증을 사용하려면 클러스터의 각 브로커 및 클라이언트에 대한 키 및 인증서를 생성해야 합니다. 또한 인증 기관(CA)이 이 인증서에 서명해야 합니다.

이 태스크에 대한 정보

다음과 같은 단계에서는 CA를 생성하여 이 CA를 사용하여 클라이언트 및 브로커 인증서에 서명한 후 이를 클라이언트 및 브로커 신뢰 저장소에 추가합니다. Java keytool 및 OpenSSL을 사용하여 키 및 인증서도 생성합니다. 또는 여러 CA(브로커 인증서 서명을 위한 CA 하나와 클라이언트 인증서를 위한 다른 CA)와 함께 외부 CA를 사용할 수 있습니다.

프로시저

  1. 신뢰 저장소, 키 저장소, 개인 키 및 CA 인증서를 생성하십시오.
    참고: 다음 명령에서 PASSWORD, VALIDITY, SERVER_ALIAS및 CLIENT_ALIAS를 적절한 값으로 대체하십시오.
    1. 서버 키 저장소를 생성하십시오.
      참고:

      브로커 인증서의 공통 이름(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
    2. 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
    3. 서버 신뢰 저장소를 작성하고 CA 인증서를 가져오십시오.
      keytool -keystore kafka.server.truststore.jks -alias CARoot
       -import -file ca-cert
    4. 클라이언트 신뢰 저장소를 작성하고 CA 인증서를 가져오십시오.
      keytool -keystore kafka.client.truststore.jks -alias CARoot
       -import -file ca-cert
    5. 서버 인증서를 생성한 후 CA를 사용하여 서명하십시오.
      keytool -keystore kafka.server.keystore.jks -alias SERVER_ALIAS
       -certreq -file cert-file
      openssl 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-file 
      openssl x509 -req -CA ca-cert -CAkey ca-key -in cert-file -out
       cert-signed -days 365 -CAcreateserial 
    6. CA 인증서를 서버 키 저장소로 가져오십시오.
      keytool -keystore kafka.server.keystore.jks -alias CARoot
       -import -file ca-cert
    7. 서명된 서버 인증서를 서버 키 저장소로 가져오십시오.
      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
    8. 서버 인증서를 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
    9. 클라이언트 키 저장소를 생성하십시오.
      keytool -keystore kafka.client.keystore.jks -alias CLIENT_ALIAS
       -validity VALIDITY -genkey
      keytool -keystore kafka.client.keystore.jks -alias client.hostname
       -validity 365 -genkey
    10. 클라이언트 인증서를 생성한 후 CA를 사용하여 서명하십시오.
      keytool -keystore kafka.client.keystore.jks -alias CLIENT_ALIAS
       -certreq -file client-cert-file
      openssl 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-file 
      openssl x509 -req -CA ca-cert -CAkey ca-key -in client-cert-file
       -out client-cert-signed -days 365 -CAcreateserial
    11. CA 인증서를 클라이언트 키 저장소로 가져오십시오.
      keytool -keystore kafka.client.keystore.jks -alias CARoot
       -import -file ca-cert
    12. 서명된 클라이언트 인증서를 클라이언트 키 저장소로 가져오십시오.
      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
    13. 클라이언트 키 저장소 및 신뢰 저장소를 QRadar에 복사하십시오.
      1. kafka.client.keystore.jkskafka.client.truststore.jks 를 로그 소스가 구성된 각 이벤트 프로세서의 /opt/qradar/conf/trusted_certificates/kafka/ 에 복사하십시오.
      2. 각 브로커에 대해 생성된 서버 인증서 <filename>.der/opt/qradar/conf/trusted_certificates/에 복사하십시오.
  2. 클라이언트 인증을 위해 Kafka 브로커를 구성하십시오.
    1. 소켓 서버 설정 섹션을 찾으십시오.
    2. 다음 옵션 중 하나를 완료하십시오.
      • 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를 추가하십시오.
    3. 다음과 같은 특성을 추가하여 브로커 사이 및 브로커와 클라이언트 사이에 암호화된 통신을 강제하십시오. 필요에 따라 경로, 파일 이름 및 비밀번호를 조정하십시오. 이러한 특성은 서버의 신뢰 저장소 및 키 저장소입니다.

      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에 일반 텍스트로 저장되므로 파일 시스템 권한을 사용하여 파일에 대한 액세스를 제한하는 것이 좋습니다.
    4. server.properties 가 수정된 Kafka 브로커를 다시 시작하십시오.