Nastavení šifrování tls a ověřování pro cluster Apache Kafka mimo ESP 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) mezi klienty Apache Kafka a zprostředkovateli Apache Kafka. Ukazuje také, jak nastavit ověřování klientů (někdy označovaných jako obousměrný protokol TLS).
Důležité
Existují dva klienti, kteří můžete použít pro aplikace Kafka: klienta Java a konzolového klienta. K vytváření i využívání může protokol TLS používat jenom klient ProducerConsumer.java
Java. Klient console-producer.sh
producenta konzoly nefunguje s protokolem TLS.
Nastavení zprostředkovatele Apache Kafka
Instalační program zprostředkovatele KAFKA TLS používá čtyři virtuální počítače clusteru HDInsight následujícím způsobem:
- headnode 0 – Certifikační autorita (CA)
- pracovní uzel 0, 1 a 2 – zprostředkovatelé
Poznámka:
Tato příručka používá certifikáty podepsané svým držitelem, ale nejbezpečnějším řešením je používat certifikáty vydané důvěryhodnými certifikačními autoritami.
Souhrn procesu nastavení zprostředkovatele je následující:
Na každém ze tří pracovních uzlů se opakují následující kroky:
- 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.
- SCP podepsaný certifikát zpět do pracovního uzlu.
- SCP veřejný certifikát certifikační autority do pracovního uzlu.
Jakmile budete mít všechny certifikáty, vložte certifikáty do úložiště certifikátů.
Přejděte na Ambari a změňte konfigurace.
K dokončení nastavení zprostředkovatele použijte následující podrobné pokyny:
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 znakem
wn0
,wn1
nebown2
podle potřeby.WorkerNode0_Name
aHeadNode0_Name
měly by být nahrazeny názvy příslušných počítačů.Proveďte počáteční nastavení na hlavním uzlu 0, který pro HDInsight vyplní roli certifikační autority (CA).
# Create a new directory 'ssl' and change into it mkdir ssl cd ssl
Proveď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 ssl
Na každém pracovním uzlu pomocí fragmentu kódu proveďte následující kroky.
- Vytvořte úložiště klíčů a naplňte ho novým privátním certifikátem.
- Vytvořte žádost o podepsání certifikátu.
- SCP žádost o podepsání certifikátu certifikační autoritě (headnode0)
keytool -genkey -keystore kafka.server.keystore.jks -keyalg RSA -validity 365 -storepass "MyServerPassword123" -keypass "MyServerPassword123" -dname "CN=FQDN_WORKER_NODE" -ext SAN=DNS: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
Poznámka:
FQDN_WORKER_NODE je plně kvalifikovaný název domény počítače pracovního uzlu. Podrobnosti můžete získat ze souboru /etc/hosts v hlavním uzlu.
Příklad:
wn0-espkaf.securehadooprc.onmicrosoft.com wn0-kafka2.zbxwnwsmpcsuvbjqbmespcm1zg.bx.internal.cloudapp.net
Na počítači certifikační autority spusťte následující příkaz, který vytvoří soubory ca-cert a ca-key:
openssl req -new -newkey rsa:4096 -days 365 -x509 -subj "/CN=Kafka-Security-CA" -keyout ca-key -out ca-cert -nodes
Př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"
Odešlete podepsané certifikáty 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-signed
Odešle 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-cert
Na každém pracovním uzlu přidejte veřejný certifikát certifikační autority do úložiště důvěryhodnosti a úložiště klíčů. Potom do úložiště klíčů přidejte vlastní podepsaný certifikát pracovního uzlu.
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 restartování zprostředkovatelů
Teď jste nastavili každého zprostředkovatele Kafka s úložištěm klíčů a důvěryhodným úložištěm a naimportovali správné certifikáty. Potom pomocí Ambari upravte související vlastnosti konfigurace Kafka a restartujte zprostředkovatele Kafka.
Pokud chcete dokončit úpravu konfigurace, proveďte následující kroky:
Přihlaste se k webu Azure Portal a vyberte cluster Azure HDInsight Apache Kafka.
Kliknutím na domovskou stránku Ambari v části Řídicí panely clusteru přejděte do uživatelského rozhraní Ambari.
V části Kafka Broker nastavte vlastnost naslouchací procesy na
PLAINTEXT://localhost:9092,SSL://localhost:9093
V části Advanced kafka-broker nastavte vlastnost security.inter.broker.protocol na
SSL
V části Custom kafka-broker nastavte vlastnost ssl.client.auth na
required
hodnotu .Poznámka:
Poznámka: Tento krok se vyžaduje jenom v případě, že nastavujete ověřování a šifrování.
Tady je snímek obrazovky, který ukazuje uživatelské rozhraní konfigurace Ambari s těmito změnami.
Poznámka:
- ssl.keystore.location a ssl.truststore.location je úplná cesta úložiště klíčů, umístění truststore v Certifikační autoritě (hn0).
- ssl.keystore.password a ssl.truststore.password je heslo nastavené pro úložiště klíčů a truststore. V tomto případě jako příklad
MyServerPassword123
- ssl.key.password je klíč nastavený pro úložiště klíčů a úložiště důvěryhodnosti. V tomto případě jako příklad
MyServerPassword123
Použití protokolu TLS 1.3 v systému Kafka
Přidání následujících konfigurací do konfigurací Kafka v Ambari
ssl.enabled.protocols=TLSv1.3
ssl.protocol=TLSv1.3
Důležité
- Protokol TLS 1.3 funguje jenom s verzí KAFKA HDI 5.1.
- Pokud používáte protokol TLS 1.3 na straně serveru, měli byste v klientovi použít také konfigurace PROTOKOLU TLS 1.3.
Pro HDI verze 4.0 nebo 5.0
- Pokud nastavujete ověřování a šifrování, vypadá snímek obrazovky takto:
- Pokud nastavujete jenom šifrování, vypadá snímek obrazovky takto:
Restartujte všechny zprostředkovatele Kafka.
Nastavení klienta (bez ověřování)
Pokud nepotřebujete ověřování, shrnutí kroků pro nastavení pouze šifrování TLS:
- Přihlaste se k certifikační autoritě (aktivní hlavní uzel).
- Zkopírujte certifikát certifikační autority do klientského počítače z počítače certifikační autority (wn0).
- Přihlaste se k klientskému počítači (hn1) a přejděte do
~/ssl
složky. - Importujte certifikát certifikační autority do úložiště důvěryhodnosti.
- 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 ssl
Zkopírování certifikátu ca-cert do klientského počítače
scp ca-cert sshuser@HeadNode1_Name:~/ssl/ca-cert
Přihlaste se k klientskému počítači (pohotovostní hlavní uzel).
ssh sshuser@HeadNode1_Name cd ssl
Importujte certifikát certifikační autority do úložiště důvěryhodnosti.
keytool -keystore kafka.client.truststore.jks -alias CARoot -import -file ca-cert -storepass "MyClientPassword123" -keypass "MyClientPassword123" -noprompt
Importujte certifikát certifikační autority do úložiště klíčů.
keytool -keystore kafka.client.keystore.jks -alias CARoot -import -file ca-cert -storepass "MyClientPassword123" -keypass "MyClientPassword123" -noprompt
Vytvořte soubor
client-ssl-auth.properties
na 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
- Pokud chcete použít protokol TLS 1.3, přidejte do souboru následující konfigurace.
client-ssl-auth.properties
ssl.enabled.protocols=TLSv1.3 ssl.protocol=TLSv1.3
- Pokud chcete použít protokol TLS 1.3, přidejte do souboru následující konfigurace.
Spusťte klienta správce s možnostmi producenta a příjemce a ověřte, že producenti i spotřebitelé pracují na portu 9093. Kroky potřebné k ověření nastavení pomocí producenta/příjemce konzoly najdete v části Ověření .
Nastavení 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 pouze šifrování, přečtěte si téma Nastavení klienta bez ověřování.
Následující čtyři kroky shrnují úlohy potřebné k dokončení instalace klienta:
- Přihlaste se k 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 na virtuální počítač, na kterém je spuštěná certifikační autorita.
- Přepněte na počítač certifikační autority (aktivní hlavní uzel) a podepište klientský certifikát.
- Přejděte na klientský počítač (pohotovostní hlavní uzel) a přejděte do
~/ssl
složky. Zkopírujte podepsaný certifikát do klientského počítače.
Podrobnosti o jednotlivých krocích jsou uvedeny.
Přihlaste se k klientskému počítači (pohotovostní hlavní uzel).
ssh sshuser@HeadNode1_Name
Odeberte všechny existující adresáře SSL.
rm -R ~/ssl mkdir ssl cd ssl
Vytvoř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 do certifikační autority
scp client-cert-sign-request sshuser@HeadNode0_Name:~/ssl/client-cert-sign-request
Přepněte na počítač certifikační autority (aktivní hlavní uzel) a podepište klientský certifikát.
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
Zkopírujte podepsaný klientský certifikát z certifikační autority (aktivní hlavní uzel) do klientského počítače.
scp client-cert-signed sshuser@HeadNode1_Name:~/ssl/client-signed-cert
Zkopírování certifikátu ca-cert do klientského počítače
scp ca-cert sshuser@HeadNode1_Name:~/ssl/ca-cert
- Přihlaste se k klientskému počítači (pohotovostní hlavní uzel) a přejděte do adresáře SSL.
ssh sshuser@HeadNode1_Name cd ssl
Vytvořte úložiště klientů s podepsaným certifikátem, importujte certifikát certifikační autority do úložiště klíčů a 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" -noprompt
Vytvořte soubor
client-ssl-auth.properties
na 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
- Pokud chcete použít protokol TLS 1.3, přidejte do souboru následující konfigurace.
client-ssl-auth.properties
ssl.enabled.protocols=TLSv1.3 ssl.protocol=TLSv1.3
- Pokud chcete použít protokol TLS 1.3, přidejte do souboru následující konfigurace.
Ověření
Na klientském počítači spusťte tyto kroky.
Poznámka:
Pokud je nainstalovaná služba HDInsight 4.0 a Kafka 2.1, můžete k ověření nastavení použít producenta/uživatele konzoly. Pokud ne, spusťte producenta Kafka na portu 9092 a odešlete zprávy do tématu a pak použijte příjemce Kafka na portu 9093, který používá protokol TLS.
Kafka 2.1 nebo novější
Pokud ještě neexistuje, vytvořte téma.
/usr/hdp/current/kafka-broker/bin/kafka-topics.sh --zookeeper <ZOOKEEPER_NODE>:2181 --create --topic topic1 --partitions 2 --replication-factor 2
Spusťte producenta konzoly a zadejte cestu jako
client-ssl-auth.properties
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.properties
Otevřete další připojení ssh ke klientskému počítači a spusťte příjemce konzoly a zadejte cestu jako
client-ssl-auth.properties
konfigurační soubor příjemce./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