TLS-versleuteling en -verificatie instellen voor Apache Kafka in Azure HDInsight

In dit artikel wordt beschreven hoe u Transport Layer Security-versleuteling (TLS), voorheen bekend als Secure Sockets Layer-versleuteling (SSL), in kunt stellen tussen Apache Kafka-clients en Apache Kafka brokers. U ziet ook hoe u verificatie van clients in kunt stellen (ook wel TLS in twee punten genoemd).

Belangrijk

Er zijn twee clients die u kunt gebruiken voor Kafka-toepassingen: een Java-client en een consoleclient. Alleen de Java-client ProducerConsumer.java kan TLS gebruiken voor zowel productie als verbruik. De producentclient van de console console-producer.sh werkt niet met TLS.

Notitie

HdInsight Kafka-consoleproducent met versie 1.1 biedt geen ondersteuning voor SSL.

Apache Kafka broker instellen

Bij het instellen van de Kafka TLS-broker worden op de volgende manier vier hdInsight-cluster-VM's gebruikt:

  • headnode 0 - Certificeringsinstantie (CA)
  • werkpunt 0, 1 en 2 - brokers

Notitie

In deze handleiding worden zelf-ondertekende certificaten gebruikt, maar de veiligste oplossing is het gebruik van certificaten die zijn uitgegeven door vertrouwde CERTIFICERINGsin bieden.

De samenvatting van het brokerinstallatieproces is als volgt:

  1. De volgende stappen worden herhaald op elk van de drie werkknooppunten:

    1. Genereer een certificaat.
    2. Maak een aanvraag voor certificaat-ondertekening.
    3. Verzend de aanvraag voor certificaat ondertekenen naar de certificeringsinstantie (CA).
    4. Meld u aan bij de CA en onderteken de aanvraag.
    5. SCP het ondertekende certificaat terug naar het werk knooppunt.
    6. SCP het openbare certificaat van de CA naar het werk knooppunt.
  2. Zodra u alle certificaten hebt, kunt u de certificaten in het certificaatopslag opslaan.

  3. Ga naar Ambari en wijzig de configuraties.

Gebruik de volgende gedetailleerde instructies om de brokerinstallatie te voltooien:

Belangrijk

In de volgende codefragmenten is wnX een afkorting voor een van de drie werkknooppunten en moet worden vervangen door , of wn0 wn1 indien van wn2 toepassing. WorkerNode0_Name en HeadNode0_Name moeten worden vervangen door de namen van de respectieve machines.

  1. Voer de eerste installatie uit op het hoofd-knooppunt 0, dat voor HDInsight de rol van de certificeringsinstantie (CA) vult.

    # Create a new directory 'ssl' and change into it
    mkdir ssl
    cd ssl
    
  2. Voer dezelfde eerste installatie uit op elk van de brokers (werkknooppunten 0, 1 en 2).

    # Create a new directory 'ssl' and change into it
    mkdir ssl
    cd ssl
    
  3. Voer op elk van de werkknooppunten de volgende stappen uit met behulp van het onderstaande codefragment.

    1. Maak een sleutelstore en vul deze met een nieuw persoonlijk certificaat.
    2. Een aanvraag voor certificaat ondertekenen maken.
    3. SCP de aanvraag voor certificaat ondertekenen naar de CA (headnode0)
    keytool -genkey -keystore kafka.server.keystore.jks -validity 365 -storepass "MyServerPassword123" -keypass "MyServerPassword123" -dname "CN=FQDN_WORKER_NODE" -storetype pkcs12
    keytool -keystore kafka.server.keystore.jks -certreq -file cert-file -storepass "MyServerPassword123" -keypass "MyServerPassword123"
    scp cert-file sshuser@HeadNode0_Name:~/ssl/wnX-cert-sign-request
    
  4. Voer op de CA-computer de volgende opdracht uit om ca-cert- en ca-key-bestanden te maken:

    openssl req -new -newkey rsa:4096 -days 365 -x509 -subj "/CN=Kafka-Security-CA" -keyout ca-key -out ca-cert -nodes
    
  5. Wijzig naar de CA-machine en onderteken alle ontvangen aanvragen voor certificaat-ondertekening:

    openssl x509 -req -CA ca-cert -CAkey ca-key -in wn0-cert-sign-request -out wn0-cert-signed -days 365 -CAcreateserial -passin pass:"MyServerPassword123"
    openssl x509 -req -CA ca-cert -CAkey ca-key -in wn1-cert-sign-request -out wn1-cert-signed -days 365 -CAcreateserial -passin pass:"MyServerPassword123"
    openssl x509 -req -CA ca-cert -CAkey ca-key -in wn2-cert-sign-request -out wn2-cert-signed -days 365 -CAcreateserial -passin pass:"MyServerPassword123"
    
  6. Verzend de ondertekende certificaten terug naar de werkknooppunten van de CA (headnode0).

    scp wn0-cert-signed sshuser@WorkerNode0_Name:~/ssl/cert-signed
    scp wn1-cert-signed sshuser@WorkerNode1_Name:~/ssl/cert-signed
    scp wn2-cert-signed sshuser@WorkerNode2_Name:~/ssl/cert-signed
    
  7. Verzend het openbare certificaat van de CA naar elk werk knooppunt.

    scp ca-cert sshuser@WorkerNode0_Name:~/ssl/ca-cert
    scp ca-cert sshuser@WorkerNode1_Name:~/ssl/ca-cert
    scp ca-cert sshuser@WorkerNode2_Name:~/ssl/ca-cert
    
  8. Voeg op elk werkpunt het openbare CERTIFICAAT van de CERTIFICERING toe aan de truststore en keystore. Voeg vervolgens het eigen ondertekende certificaat van het werk knooppunt toe aan de sleutelstore

    keytool -keystore kafka.server.truststore.jks -alias CARoot -import -file ca-cert -storepass "MyServerPassword123" -keypass "MyServerPassword123" -noprompt
    keytool -keystore kafka.server.keystore.jks -alias CARoot -import -file ca-cert -storepass "MyServerPassword123" -keypass "MyServerPassword123" -noprompt
    keytool -keystore kafka.server.keystore.jks -import -file cert-signed -storepass "MyServerPassword123" -keypass "MyServerPassword123" -noprompt
    
    

Kafka-configuratie bijwerken om TLS te gebruiken en brokers opnieuw op te starten

U hebt nu elke Kafka-broker ingesteld met een keystore en truststore en de juiste certificaten geïmporteerd. Wijzig vervolgens gerelateerde Kafka-configuratie-eigenschappen met behulp van Ambari en start de Kafka-brokers opnieuw.

Ga als volgt te werk om de configuratie te wijzigen:

  1. Meld u aan bij Azure Portal en selecteer uw Azure HDInsight Apache Kafka cluster.

  2. Ga naar de Ambari-gebruikersinterface door te klikken op Ambari-startpagina onder Clusterdashboards.

  3. Stel onder Kafka Broker de eigenschap listeners in op PLAINTEXT://localhost:9092,SSL://localhost:9093

  4. Stel onder Geavanceerd kafka-broker de eigenschap security.inter.broker.protocol in op SSL

    Kafka ssl-configuratie-eigenschappen bewerken in Ambari

  5. Stel onder Aangepaste kafka-broker de eigenschap ssl.client.auth in op required . Deze stap is alleen vereist als u verificatie en versleuteling instelt.

    Kafka ssl-configuratie-eigenschappen bewerken in Ambari

  6. Ga voor HDI-versie 3.6 naar de Ambari-gebruikersinterface en voeg de volgende configuraties toe onder Geavanceerde kafka-env en de sjabloon-eigenschap kafka-env.

    # Configure Kafka to advertise IP addresses instead of FQDN
    IP_ADDRESS=$(hostname -i)
    echo advertised.listeners=$IP_ADDRESS
    sed -i.bak -e '/advertised/{/advertised@/!d;}' /usr/hdp/current/kafka-broker/conf/server.properties
    echo "advertised.listeners=PLAINTEXT://$IP_ADDRESS:9092,SSL://$IP_ADDRESS:9093" >> /usr/hdp/current/kafka-broker/conf/server.properties
    echo "ssl.keystore.location=/home/sshuser/ssl/kafka.server.keystore.jks" >> /usr/hdp/current/kafka-broker/conf/server.properties
    echo "ssl.keystore.password=MyServerPassword123" >> /usr/hdp/current/kafka-broker/conf/server.properties
    echo "ssl.key.password=MyServerPassword123" >> /usr/hdp/current/kafka-broker/conf/server.properties
    echo "ssl.truststore.location=/home/sshuser/ssl/kafka.server.truststore.jks" >> /usr/hdp/current/kafka-broker/conf/server.properties
    echo "ssl.truststore.password=MyServerPassword123" >> /usr/hdp/current/kafka-broker/conf/server.properties
    
  7. Hier ziet u de schermopname van de gebruikersinterface voor de Ambari-configuratie met deze wijzigingen.

    Voor HDI-versie 3.6:

    De sjabloon-eigenschap kafka-env bewerken in Ambari

    Voor HDI-versie 4.0:

    De eigenschap kafka-env-sjabloon bewerken in Ambari vier

  8. Start alle Kafka-brokers opnieuw op.

Clientinstallatie (zonder verificatie)

Als u geen verificatie nodig hebt, is de samenvatting van de stappen voor het instellen van alleen TLS-versleuteling:

  1. Meld u aan bij de CA (actief hoofd knooppunt).
  2. Kopieer het CA-certificaat naar de clientmachine vanaf de CA-machine (wn0).
  3. Meld u aan bij de clientmachine (hn1) en navigeer naar de ~/ssl map .
  4. Importeer het CA-certificaat in de truststore.
  5. Importeer het CA-certificaat in de keystore.

Deze stappen worden beschreven in de volgende codefragmenten.

  1. Meld u aan bij het CA-knooppunt.

    ssh sshuser@HeadNode0_Name
    cd ssl
    
  2. Het ca-certificaat kopiëren naar de clientmachine

    scp ca-cert sshuser@HeadNode1_Name:~/ssl/ca-cert
    
  3. Meld u aan bij de clientmachine (stand-by hoofd-knooppunt).

    ssh sshuser@HeadNode1_Name
    cd ssl
    
  4. Importeer het CA-certificaat in de truststore.

    keytool -keystore kafka.client.truststore.jks -alias CARoot -import -file ca-cert -storepass "MyClientPassword123" -keypass "MyClientPassword123" -noprompt
    
  5. Importeer het CA-certificaat in keystore.

    keytool -keystore kafka.client.keystore.jks -alias CARoot -import -file ca-cert -storepass "MyClientPassword123" -keypass "MyClientPassword123" -noprompt
    
  6. Maak het bestand client-ssl-auth.properties op de clientmachine (hn1). Deze moet de volgende regels hebben:

    security.protocol=SSL
    ssl.truststore.location=/home/sshuser/ssl/kafka.client.truststore.jks
    ssl.truststore.password=MyClientPassword123
    
  7. Start de beheerclient met producent- en consumentenopties om te controleren of zowel producenten als consumenten aan poort 9093 werken. Raadpleeg de sectie Verificatie hieronder voor de stappen die nodig zijn om de installatie te controleren met behulp van de console producer/consumer.

Clientinstallatie (met verificatie)

Notitie

De volgende stappen zijn alleen vereist als u zowel TLS-versleuteling als verificatie instelt. Als u alleen versleuteling instelt, bekijkt u Clientinstallatie zonder verificatie.

De volgende vier stappen geven een overzicht van de taken die nodig zijn om de clientinstallatie te voltooien:

  1. Meld u aan bij de clientmachine (stand-by hoofd-knooppunt).
  2. Maak een Java-keystore en haal een ondertekend certificaat voor de broker op. Kopieer vervolgens het certificaat naar de VM waarop de CA wordt uitgevoerd.
  3. Schakel over naar de CA-machine (actief hoofd-knooppunt) om het clientcertificaat te ondertekenen.
  4. Ga naar de clientmachine (stand-by hoofdpunt) en navigeer naar de ~/ssl map . Kopieer het ondertekende certificaat naar de clientmachine.

Hieronder vindt u de details van elke stap.

  1. Meld u aan bij de clientmachine (stand-by hoofd-knooppunt).

    ssh sshuser@HeadNode1_Name
    
  2. Verwijder alle bestaande ssl-directory's.

    rm -R ~/ssl
    mkdir ssl
    cd ssl
    
  3. Maak een Java-keystore en maak een aanvraag voor certificaat-ondertekening.

    keytool -genkey -keystore kafka.client.keystore.jks -validity 365 -storepass "MyClientPassword123" -keypass "MyClientPassword123" -dname "CN=HEADNODE1_FQDN" -storetype pkcs12
    
    keytool -keystore kafka.client.keystore.jks -certreq -file client-cert-sign-request -storepass "MyClientPassword123" -keypass "MyClientPassword123"
    
  4. Kopieer de aanvraag voor certificaat ondertekenen naar de CA

    scp client-cert-sign-request sshuser@HeadNode0_Name:~/ssl/client-cert-sign-request
    
  5. Schakel over naar de CA-machine (actief hoofdpunt) en onderteken het clientcertificaat.

    ssh sshuser@HeadNode0_Name
    cd ssl
    openssl x509 -req -CA ca-cert -CAkey ca-key -in ~/ssl/client-cert-sign-request -out ~/ssl/client-cert-signed -days 365 -CAcreateserial -passin pass:MyClientPassword123
    
  6. Kopieer het ondertekende clientcert van de CA (actief hoofd-knooppunt) naar de clientmachine.

    scp client-cert-signed sshuser@HeadNode1_Name:~/ssl/client-signed-cert
    
  7. Het ca-certificaat kopiëren naar de clientmachine

    scp ca-cert sshuser@HeadNode1_Name:~/ssl/ca-cert
    
    1. Meld u aan bij de clientmachine (stand-by hoofd-knooppunt) en navigeer naar de ssl-map.
    ssh sshuser@HeadNode1_Name
    cd ssl
    
  8. Maak een clientopslag met ondertekend certificaat en importeer het ca-certificaat in de sleutelopslag en truststore op de clientmachine (hn1):

    keytool -keystore kafka.client.truststore.jks -alias CARoot -import -file ca-cert -storepass "MyClientPassword123" -keypass "MyClientPassword123" -noprompt
    
    keytool -keystore kafka.client.keystore.jks -alias CARoot -import -file ca-cert -storepass "MyClientPassword123" -keypass "MyClientPassword123" -noprompt
    
    keytool -keystore kafka.client.keystore.jks -import -file client-signed-cert -storepass "MyClientPassword123" -keypass "MyClientPassword123" -noprompt
    
  9. Maak een bestand client-ssl-auth.properties op clientmachine (hn1). Deze moet de volgende regels hebben:

    security.protocol=SSL
    ssl.truststore.location=/home/sshuser/ssl/kafka.client.truststore.jks
    ssl.truststore.password=MyClientPassword123
    ssl.keystore.location=/home/sshuser/ssl/kafka.client.keystore.jks
    ssl.keystore.password=MyClientPassword123
    ssl.key.password=MyClientPassword123
    

Verificatie

Voer deze stappen uit op de clientmachine.

Notitie

Als HDInsight 4.0 en Kafka 2.1 zijn geïnstalleerd, kunt u de producer/consumers van de console gebruiken om uw installatie te controleren. Zo niet, voer dan de Kafka-producent uit op poort 9092 en verzend berichten naar het onderwerp. Gebruik vervolgens de Kafka-consument op poort 9093 die TLS gebruikt.

Kafka 2.1 of hoger

  1. Maak een onderwerp als dit nog niet bestaat.

    /usr/hdp/current/kafka-broker/bin/kafka-topics.sh --zookeeper <ZOOKEEPER_NODE>:2181 --create --topic topic1 --partitions 2 --replication-factor 2
    
  2. Start de consoleproducent en geef het pad naar client-ssl-auth.properties op als een configuratiebestand voor de producent.

    /usr/hdp/current/kafka-broker/bin/kafka-console-producer.sh --broker-list <FQDN_WORKER_NODE>:9093 --topic topic1 --producer.config ~/ssl/client-ssl-auth.properties
    
  3. Open een andere ssh-verbinding met de clientcomputer en start de console-consument en geef het pad naar op client-ssl-auth.properties als een configuratiebestand voor de consument.

    /usr/hdp/current/kafka-broker/bin/kafka-console-consumer.sh --bootstrap-server <FQDN_WORKER_NODE>:9093 --topic topic1 --consumer.config ~/ssl/client-ssl-auth.properties --from-beginning
    

Kafka 1.1

  1. Maak een onderwerp als dit nog niet bestaat.

    /usr/hdp/current/kafka-broker/bin/kafka-topics.sh --zookeeper <ZOOKEEPER_NODE_0>:2181 --create --topic topic1 --partitions 2 --replication-factor 2
    
  2. Start de consoleproducent en geef het pad naar client-ssl-auth.properties op als een configuratiebestand voor de producent.

    /usr/hdp/current/kafka-broker/bin/kafka-console-producer.sh --broker-list <FQDN_WORKER_NODE>:9092 --topic topic1 
    
  3. Open een andere ssh-verbinding met de clientcomputer en start de console-consument en geef het pad naar op client-ssl-auth.properties als een configuratiebestand voor de consument.

    $ /usr/hdp/current/kafka-broker/bin/kafka-console-consumer.sh --bootstrap-server <FQDN_WORKER_NODE>:9093 --topic topic1 --consumer.config ~/ssl/client-ssl-auth.properties --from-beginning
    

Volgende stappen