Nastavení šifrování a ověřování TLS pro Apache Kafka ve službě Azure HDInsight
V tomto článku se dozvíte, jak nastavit šifrování TLS (Transport Layer Security), dříve označované jako šifrování SSL (Secure Sockets Layer) (SSL) mezi klienty Apache Kafka a Apache Kafkami zprostředkovateli. Také se dozvíte, jak nastavit ověřování klientů (někdy označovaného jako obousměrný protokol TLS).
Důležité
Existují dva klienty, které lze použít pro aplikace Kafka: klienta Java a klienta konzoly nástroje. Protokol ProducerConsumer.java TLS může používat jenom klient Java pro vytváření i využívání. Klient výrobce konzoly console-producer.sh nepracuje s protokolem TLS.
Poznámka
Výrobce konzoly HDInsight Kafka s verzí 1,1 nepodporuje protokol SSL.
Nastavení služby Apache Kafka Broker
Instalace zprostředkovatele Kafka TLS bude používat čtyři virtuální počítače clusteru HDInsight následujícím způsobem:
- hlavnímu uzlu 0 – certifikační autorita (CA)
- pracovní uzel 0, 1 a 2 – zprostředkovatelé
Poznámka
Tato příručka bude používat certifikáty podepsané svým držitelem, ale nejbezpečnější řešení používá certifikáty vydané důvěryhodnými certifikačními autoritami.
Souhrn procesu instalace zprostředkovatele je následující:
Následující kroky se opakují na všech třech pracovních uzlech:
- Vygenerujte certifikát.
- Vytvořte žádost o podepsání certifikátu.
- Odešlete žádost o podepsání certifikátu certifikační autoritě (CA).
- Přihlaste se k certifikační autoritě a podepište žádost.
- Odhlásí podepsaný certifikát zpátky do pracovního uzlu.
- BOD připojení služby (SCP) veřejný certifikát certifikační autority do pracovního uzlu.
Až budete mít všechny certifikáty, uveďte certifikáty do úložiště certifikátů.
Přejděte na Ambari a změňte konfiguraci.
Pomocí následujících podrobných pokynů dokončete instalaci zprostředkovatele:
Důležité
V následujících fragmentech kódu wnX je zkratka pro jeden ze tří pracovních uzlů a měla by být nahrazena wn0 wn1 nebo wn2 podle potřeby. WorkerNode0_Name a HeadNode0_Name měly by být nahrazeny názvy příslušných počítačů.
Proveďte počáteční nastavení hlavního uzlu 0, který bude pro HDInsight plnit roli certifikační autority (CA).
# Create a new directory 'ssl' and change into it mkdir ssl cd sslProveďte stejné počáteční nastavení u každého zprostředkovatele (pracovní uzly 0, 1 a 2).
# Create a new directory 'ssl' and change into it mkdir ssl cd sslNa všech pracovních uzlech proveďte následující kroky pomocí níže uvedeného fragmentu kódu.
- Vytvořte úložiště klíčů a naplňte ho pomocí nového privátního certifikátu.
- Vytvořte žádost o podepsání certifikátu.
- Spojovací bod služby žádost o podepsání certifikátu certifikační autoritě (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-requestNa počítači certifikační autority spusťte následující příkaz, který vytvoří soubory ca-cert a klíč certifikační autority:
openssl req -new -newkey rsa:4096 -days 365 -x509 -subj "/CN=Kafka-Security-CA" -keyout ca-key -out ca-cert -nodesPřejděte na počítač certifikační autority a podepište všechny přijaté žádosti o podepsání certifikátu:
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"Podepsané certifikáty můžete odeslat zpět do pracovních uzlů z certifikační autority (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-signedOdešlete veřejný certifikát certifikační autority do každého pracovního uzlu.
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-certDo každého pracovního uzlu přidejte veřejný certifikát CAs do úložiště truststore a klíčů. Pak přidejte vlastní podepsaný certifikát pracovního uzlu do úložiště klíčů.
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
Aktualizace konfigurace Kafka pro použití protokolu TLS a restartu zprostředkovatelů
Nyní jste nastavili jednotlivé zprostředkovatele Kafka s úložištěm klíčů a truststore a importovali jste správné certifikáty. Dále upravte související vlastnosti konfigurace Kafka pomocí Ambari a pak restartujte zprostředkovatele Kafka.
Chcete-li dokončit úpravu konfigurace, proveďte následující kroky:
Přihlaste se k Azure Portal a vyberte svůj cluster Azure HDInsight Apache Kafka.
Kliknutím na Ambari domů v části řídicí panely clusteru přejdete na uživatelské rozhraní Ambari.
V části zprostředkovatel Kafka nastavte vlastnost Listeners na
PLAINTEXT://localhost:9092,SSL://localhost:9093V části Advanced Kafka-Broker nastavte vlastnost Security. Inter. Broker. Protocol na
SSL
V části Custom Kafka-Broker nastavte vlastnost SSL. Client. auth na
required. Tento krok se vyžaduje jenom v případě, že nastavujete ověřování a šifrování.
V případě HDI verze 3,6 navštivte uživatelské rozhraní Ambari a přidejte následující konfigurace do části Upřesnit Kafka-ENV a vlastnost šablony 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.propertiesTady je snímek obrazovky, který zobrazuje uživatelské rozhraní konfigurace Ambari s těmito změnami.
Pro HDI verze 3,6:
Pro HDI verze 4,0:
Restartujte všechny zprostředkovatele Kafka.
Instalace klienta (bez ověřování)
Pokud nepotřebujete ověřování, souhrn kroků pro nastavení šifrování TLS:
- Přihlaste se k certifikační autoritě (aktivnímu hlavnímu uzlu).
- Zkopírujte certifikát CA do klientského počítače z počítače certifikační autority (wn0).
- Přihlaste se ke klientskému počítači (HN1) a přejděte do
~/sslsložky. - Importujte certifikát CA do truststore.
- Importujte certifikát certifikační autority do úložiště klíčů.
Tyto kroky jsou podrobně popsané v následujících fragmentech kódu.
Přihlaste se k uzlu certifikační autority.
ssh sshuser@HeadNode0_Name cd sslZkopírujte certifikát CA-CERT do klientského počítače.
scp ca-cert sshuser@HeadNode1_Name:~/ssl/ca-certPřihlaste se ke klientskému počítači (pohotovostní hlavní uzel).
ssh sshuser@HeadNode1_Name cd sslImportujte certifikát CA do truststore.
keytool -keystore kafka.client.truststore.jks -alias CARoot -import -file ca-cert -storepass "MyClientPassword123" -keypass "MyClientPassword123" -nopromptImportujte certifikát CA do úložiště klíčů.
keytool -keystore kafka.client.keystore.jks -alias CARoot -import -file ca-cert -storepass "MyClientPassword123" -keypass "MyClientPassword123" -nopromptVytvořte soubor
client-ssl-auth.propertiesna klientském počítači (HN1). Měl by mít následující řádky:security.protocol=SSL ssl.truststore.location=/home/sshuser/ssl/kafka.client.truststore.jks ssl.truststore.password=MyClientPassword123Spusťte klienta správce s možnostmi producent a příjemce a ověřte, zda pracují výrobci i spotřebitelé na portu 9093. Postup potřebný k ověření instalace pomocí výrobce nebo příjemce konzoly najdete níže v níže uvedené části ověřování .
Instalace klienta (s ověřováním)
Poznámka
Následující kroky se vyžadují jenom v případě, že nastavujete šifrování TLS i ověřování. Pokud nastavujete jenom šifrování, přečtěte si téma instalace klienta bez ověření.
Následující čtyři kroky shrnují úlohy potřebné k dokončení instalace klienta:
- Přihlaste se ke klientskému počítači (pohotovostní hlavní uzel).
- Vytvořte úložiště klíčů Java a získejte podepsaný certifikát pro zprostředkovatele. Pak zkopírujte certifikát do virtuálního počítače, ve kterém je certifikační autorita spuštěná.
- Pro podepsání klientského certifikátu přepněte na počítač certifikační autority (aktivní hlavní uzel).
- Přejděte do klientského počítače (pohotovostní hlavní uzel) a přejděte do
~/sslsložky. Zkopírujte podepsaný certifikát do klientského počítače.
Podrobnosti o jednotlivých krocích jsou uvedeny níže.
Přihlaste se ke klientskému počítači (pohotovostní hlavní uzel).
ssh sshuser@HeadNode1_NameOdeberte všechny existující adresáře SSL.
rm -R ~/ssl mkdir ssl cd sslVytvořte úložiště klíčů Java a vytvořte žádost o podepsání certifikátu.
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"Zkopírování žádosti o podepsání certifikátu certifikační autoritě
scp client-cert-sign-request sshuser@HeadNode0_Name:~/ssl/client-cert-sign-requestPřepněte na počítač certifikační autority (aktivní hlavní uzel) a podepište certifikát klienta.
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:MyClientPassword123Zkopíruje podepsaný certifikát klienta z certifikační autority (aktivní hlavní uzel) do klientského počítače.
scp client-cert-signed sshuser@HeadNode1_Name:~/ssl/client-signed-certZkopírujte certifikát CA-CERT do klientského počítače.
scp ca-cert sshuser@HeadNode1_Name:~/ssl/ca-cert- Přihlaste se ke klientskému počítači (pohotovostní hlavní uzel) a přejděte do adresáře SSL.
ssh sshuser@HeadNode1_Name cd sslVytvoření úložiště klientů s podepsaným certifikátem a import certifikátu certifikační autority do úložiště klíčů a truststore na klientském počítači (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" -nopromptVytvoří soubor
client-ssl-auth.propertiesna klientském počítači (HN1). Měl by mít následující řádky: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
Ověření
Spusťte tyto kroky na klientském počítači.
Poznámka
Pokud je nainstalovaná služba HDInsight 4.0 a Kafka 2.1, můžete k ověření nastavení použít producenta/konzumenty konzoly. Pokud ne, spusťte producenta Kafka na portu 9092 a odešlete zprávy do tématu a pak použijte konzumenta Kafka na portu 9093, který používá protokol TLS.
Kafka 2.1 nebo vyšší
Vytvořte téma, pokud ještě neexistuje.
/usr/hdp/current/kafka-broker/bin/kafka-topics.sh --zookeeper <ZOOKEEPER_NODE>:2181 --create --topic topic1 --partitions 2 --replication-factor 2Spusťte producenta konzoly a zadejte cestu
client-ssl-auth.propertiesk jako konfigurační soubor pro producenta./usr/hdp/current/kafka-broker/bin/kafka-console-producer.sh --broker-list <FQDN_WORKER_NODE>:9093 --topic topic1 --producer.config ~/ssl/client-ssl-auth.propertiesOtevřete další připojení SSH ke klientskému počítači, spusťte konzumenta konzoly a zadejte cestu ke spotřebiteli
client-ssl-auth.propertiesjako konfigurační soubor./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
Vytvořte téma, pokud ještě neexistuje.
/usr/hdp/current/kafka-broker/bin/kafka-topics.sh --zookeeper <ZOOKEEPER_NODE_0>:2181 --create --topic topic1 --partitions 2 --replication-factor 2Spusťte producenta konzoly a zadejte cestu k souboru client-ssl-auth.properties jako konfigurační soubor pro producenta.
/usr/hdp/current/kafka-broker/bin/kafka-console-producer.sh --broker-list <FQDN_WORKER_NODE>:9092 --topic topic1Otevřete další připojení SSH ke klientskému počítači, spusťte konzumenta konzoly a zadejte cestu ke spotřebiteli
client-ssl-auth.propertiesjako konfigurační soubor.$ /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