Konfigurera TLS-kryptering och autentisering för Apache Kafka i Azure HDInsight
Den här artikeln visar hur du ställer in Transport Layer Security-kryptering (TLS), tidigare kallat Secure Sockets Layer-kryptering (SSL), mellan Apache Kafka klienter och Apache Kafka autjämnare. Den visar också hur du ställer in autentisering av klienter (kallas ibland för tvåvägs TLS).
Viktigt
Det finns två klienter som du kan använda för Kafka-program: en Java-klient och en konsolklient. Endast Java-klienten ProducerConsumer.java kan använda TLS för både produktion och användning. Konsolproducentklienten console-producer.sh fungerar inte med TLS.
Anteckning
HDInsight Kafka-konsolproducenten med version 1.1 stöder inte SSL.
konfiguration Apache Kafka broker
Konfigurationen av Kafka TLS-meddelandekö använder fyra virtuella HDInsight-kluster-datorer på följande sätt:
- headnode 0 – certifikatutfärdare (CA)
- arbetsnod 0, 1 och 2 – a brokers
Anteckning
Den här guiden använder själv signerade certifikat, men den säkraste lösningen är att använda certifikat som utfärdats av betrodda certifikatutor.
Sammanfattningen av konfigurationsprocessen för autjämnare är följande:
Följande steg upprepas på var och en av de tre arbetsnoderna:
- Generera ett certifikat.
- Skapa en begäran om certifikatsignering.
- Skicka begäran om certifikatsignering till certifikatutfärdaren (CA).
- Logga in på certifikatutfärdaren och signera begäran.
- SCP det signerade certifikatet tillbaka till arbetsnoden.
- SCP det offentliga certifikatet för CA:en till arbetsnoden.
När du har alla certifikat kan du placera certifikaten i certifikatarkivet.
Gå till Ambari och ändra konfigurationerna.
Följ de detaljerade anvisningarna nedan för att slutföra konfigurationen av den autjämnande meddelandekö:
Viktigt
I följande kodfragment är wnX en förkortning för en av de tre arbetarnoderna och ska ersättas med wn0 , wn1 eller efter wn2 behov. WorkerNode0_Name och HeadNode0_Name ska ersättas med namnen på respektive datorer.
Utför den inledande installationen på huvudnod 0, som för HDInsight fyller rollen som certifikatutfärdare (CA).
# Create a new directory 'ssl' and change into it mkdir ssl cd sslUtför samma inledande konfiguration på var och en av a brokers (arbetarnoderna 0, 1 och 2).
# Create a new directory 'ssl' and change into it mkdir ssl cd sslPå var och en av arbetsnoderna utför du följande steg med hjälp av kodfragmentet nedan.
- Skapa ett nyckelarkiv och fyll i det med ett nytt privat certifikat.
- Skapa en begäran om certifikatsignering.
- SCP certifikatsigneringsbegäran till certifikatutfärdaren (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-requestKör följande kommando på CA-datorn för att skapa ca-cert- och ca-key-filer:
openssl req -new -newkey rsa:4096 -days 365 -x509 -subj "/CN=Kafka-Security-CA" -keyout ca-key -out ca-cert -nodesÄndra till CA-datorn och signera alla mottagna certifikatsigneringsbegäranden:
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"Skicka tillbaka de signerade certifikaten till arbetsnoderna från certifikatutfärdaren (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-signedSkicka det offentliga certifikatet för certifikatutfärdaren till varje arbetsnod.
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-certPå varje arbetsnod lägger du till certifikatutfärdares offentliga certifikat i truststore och keystore. Lägg sedan till arbetsnodens eget signerade certifikat i nyckelarkivet
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
Uppdatera Kafka-konfigurationen för att använda TLS och starta om autjämnare
Nu har du ställt in varje Kafka-meddelandekö med ett nyckelarkiv och truststore och importerat rätt certifikat. Ändra sedan relaterade Kafka-konfigurationsegenskaper med Ambari och starta sedan om Kafka-meddelandeköerna.
Utför följande steg för att slutföra konfigurationsändringen:
Logga in på Azure Portal och välj ditt Azure HDInsight Apache Kafka kluster.
Gå till Ambari-användargränssnittet genom att klicka på Ambari-start under Klusterinstrumentpaneler.
Under Kafka Broker anger du lyssnaregenskapen till
PLAINTEXT://localhost:9092,SSL://localhost:9093Under Avancerad kafka-broker anger du egenskapen security.inter.broker.protocol till
SSL
Under Anpassad kafka-broker anger du egenskapen ssl.client.auth till
required. Det här steget krävs bara om du ställer in autentisering och kryptering.
För HDI version 3.6 går du till Ambari UI och lägger till följande konfigurationer under Avancerad kafka-env och mallegenskapen 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.propertiesHär är skärmbilden som visar Ambari-konfigurationsgränssnittet med dessa ändringar.
För HDI version 3.6:
För HDI version 4.0:
Starta om alla autjämnare i Kafka.
Klientinstallation (utan autentisering)
Om du inte behöver autentisering är sammanfattningen av stegen för att konfigurera endast TLS-kryptering:
- Logga in på certifikatutfärdaren (aktiv huvudnod).
- Kopiera CA-certifikatet till klientdatorn från CA-datorn (wn0).
- Logga in på klientdatorn (hn1) och navigera till
~/sslmappen . - Importera CA-certifikatet till truststore.
- Importera CA-certifikatet till nyckelarkivet.
De här stegen beskrivs i följande kodfragment.
Logga in på CA-noden.
ssh sshuser@HeadNode0_Name cd sslKopiera certifikatutfärdaren till klientdatorn
scp ca-cert sshuser@HeadNode1_Name:~/ssl/ca-certLogga in på klientdatorn (standby-huvudnod).
ssh sshuser@HeadNode1_Name cd sslImportera CA-certifikatet till truststore.
keytool -keystore kafka.client.truststore.jks -alias CARoot -import -file ca-cert -storepass "MyClientPassword123" -keypass "MyClientPassword123" -nopromptImportera CA-certifikatet till keystore.
keytool -keystore kafka.client.keystore.jks -alias CARoot -import -file ca-cert -storepass "MyClientPassword123" -keypass "MyClientPassword123" -nopromptSkapa filen på
client-ssl-auth.propertiesklientdatorn (hn1). Den bör ha följande rader:security.protocol=SSL ssl.truststore.location=/home/sshuser/ssl/kafka.client.truststore.jks ssl.truststore.password=MyClientPassword123Starta administratörsklienten med producent- och konsumentalternativ för att kontrollera att både producenter och konsumenter arbetar på port 9093. Se verifieringsavsnittet nedan för de steg som krävs för att verifiera konfigurationen med hjälp av konsolproducent/konsument.
Klientinstallation (med autentisering)
Anteckning
Följande steg krävs bara om du ställer in både TLS-kryptering och autentisering. Om du bara ställer in kryptering kan du se Klientkonfiguration utan autentisering.
Följande fyra steg sammanfattar de uppgifter som krävs för att slutföra klientinstallationen:
- Logga in på klientdatorn (standby-huvudnod).
- Skapa ett Java-nyckelarkiv och hämta ett signerat certifikat för den autjämnare. Kopiera sedan certifikatet till den virtuella dator där certifikatutfärdaren körs.
- Växla till CA-datorn (aktiv huvudnod) för att signera klientcertifikatet.
- Gå till klientdatorn (standby-huvudnoden) och navigera till
~/sslmappen . Kopiera det signerade certifikatet till klientdatorn.
Information om varje steg anges nedan.
Logga in på klientdatorn (standby-huvudnod).
ssh sshuser@HeadNode1_NameTa bort alla befintliga SSL-kataloger.
rm -R ~/ssl mkdir ssl cd sslSkapa ett Java-nyckelarkiv och skapa en certifikatsigneringsbegäran.
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"Kopiera begäran om certifikatsignering till certifikatutfärdaren
scp client-cert-sign-request sshuser@HeadNode0_Name:~/ssl/client-cert-sign-requestVäxla till CA-datorn (aktiv huvudnod) och signera klientcertifikatet.
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:MyClientPassword123Kopiera signerat klientcertifikt från certifikatutfärdaren (aktiv huvudnod) till klientdatorn.
scp client-cert-signed sshuser@HeadNode1_Name:~/ssl/client-signed-certKopiera certifikatutfärdaren till klientdatorn
scp ca-cert sshuser@HeadNode1_Name:~/ssl/ca-cert- Logga in på klientdatorn (standby-huvudnod) och gå till SSL-katalogen.
ssh sshuser@HeadNode1_Name cd sslSkapa klientarkiv med signerat certifikat och importera ca-certifikat till keystore och truststore på klientdatorn (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" -nopromptSkapa en fil
client-ssl-auth.propertiespå klientdatorn (hn1). Den bör ha följande rader: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
Verifiering
Kör de här stegen på klientdatorn.
Anteckning
Om HDInsight 4.0 och Kafka 2.1 är installerade kan du använda konsolproducenten/-konsumenterna för att verifiera konfigurationen. Om inte kör du Kafka-producenten på port 9092 och skickar meddelanden till ämnet och använder sedan Kafka-konsumenten på port 9093 som använder TLS.
Kafka 2.1 eller högre
Skapa ett ämne om det inte redan finns.
/usr/hdp/current/kafka-broker/bin/kafka-topics.sh --zookeeper <ZOOKEEPER_NODE>:2181 --create --topic topic1 --partitions 2 --replication-factor 2Starta konsolproducenten och ange sökvägen
client-ssl-auth.propertiestill som en konfigurationsfil för producenten./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Öppna en annan ssh-anslutning till klientdatorn och starta konsolkonsumenten och ange
client-ssl-auth.propertiessökvägen till som en konfigurationsfil för konsumenten./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
Skapa ett ämne om det inte redan finns.
/usr/hdp/current/kafka-broker/bin/kafka-topics.sh --zookeeper <ZOOKEEPER_NODE_0>:2181 --create --topic topic1 --partitions 2 --replication-factor 2Starta konsolproducenten och ange sökvägen till client-ssl-auth.properties som en konfigurationsfil för producenten.
/usr/hdp/current/kafka-broker/bin/kafka-console-producer.sh --broker-list <FQDN_WORKER_NODE>:9092 --topic topic1Öppna en annan ssh-anslutning till klientdatorn och starta konsolkonsumenten och ange
client-ssl-auth.propertiessökvägen till som en konfigurationsfil för konsumenten.$ /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