Nastavení šifrování a ověřování TLS pro Apache Kafka ve službě Azure HDInsightSet up TLS encryption and authentication for Apache Kafka in 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.This article shows you how to set up Transport Layer Security (TLS) encryption, previously known as Secure Sockets Layer (SSL) encryption, between Apache Kafka clients and Apache Kafka brokers. Také se dozvíte, jak nastavit ověřování klientů (někdy označovaného jako obousměrný protokol TLS).It also shows you how to set up authentication of clients (sometimes referred to as two-way TLS).

Důležité

Existují dva klienty, které lze použít pro aplikace Kafka: klienta Java a klienta konzoly nástroje.There are two clients which you can use for Kafka applications: a Java client and a console client. Protokol ProducerConsumer.java TLS může používat jenom klient Java pro vytváření i využívání.Only the Java client ProducerConsumer.java can use TLS for both producing and consuming. Klient výrobce konzoly console-producer.sh nepracuje s protokolem TLS.The console producer client console-producer.sh does not work with TLS.

Poznámka

Výrobce konzoly HDInsight Kafka s verzí 1,1 nepodporuje protokol SSL.HDInsight Kafka console producer with version 1.1 does not support SSL.

Nastavení služby Apache Kafka BrokerApache Kafka broker setup

Instalace zprostředkovatele Kafka TLS bude používat čtyři virtuální počítače clusteru HDInsight následujícím způsobem:The Kafka TLS broker setup will use four HDInsight cluster VMs in the following way:

  • hlavnímu uzlu 0 – certifikační autorita (CA)headnode 0 - Certificate Authority (CA)
  • pracovní uzel 0, 1 a 2 – zprostředkovateléworker node 0, 1, and 2 - brokers

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.This guide will use self-signed certificates, but the most secure solution is to use certificates issued by trusted CAs.

Souhrn procesu instalace zprostředkovatele je následující:The summary of the broker setup process is as follows:

  1. Následující kroky se opakují na všech třech pracovních uzlech:The following steps are repeated on each of the three worker nodes:

    1. Vygenerujte certifikát.Generate a certificate.
    2. Vytvořte žádost o podepsání certifikátu.Create a cert signing request.
    3. Odešlete žádost o podepsání certifikátu certifikační autoritě (CA).Send the cert signing request to the Certificate Authority (CA).
    4. Přihlaste se k certifikační autoritě a podepište žádost.Sign in to the CA and sign the request.
    5. Odhlásí podepsaný certifikát zpátky do pracovního uzlu.SCP the signed certificate back to the worker node.
    6. BOD připojení služby (SCP) veřejný certifikát certifikační autority do pracovního uzlu.SCP the public certificate of the CA to the worker node.
  2. Až budete mít všechny certifikáty, uveďte certifikáty do úložiště certifikátů.Once you have all of the certificates, put the certs into the cert store.

  3. Přejděte na Ambari a změňte konfiguraci.Go to Ambari and change the configurations.

Pomocí následujících podrobných pokynů dokončete instalaci zprostředkovatele:Use the following detailed instructions to complete the broker setup:

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.In the following code snippets wnX is an abbreviation for one of the three worker nodes and should be substituted with wn0, wn1 or wn2 as appropriate. WorkerNode0_Name a HeadNode0_Name měly by být nahrazeny názvy příslušných počítačů.WorkerNode0_Name and HeadNode0_Name should be substituted with the names of the respective machines.

  1. Proveďte počáteční nastavení hlavního uzlu 0, který bude pro HDInsight plnit roli certifikační autority (CA).Perform initial setup on head node 0, which for HDInsight will fill the role of the Certificate Authority (CA).

    # Create a new directory 'ssl' and change into it
    mkdir ssl
    cd ssl
    
  2. Proveďte stejné počáteční nastavení u každého zprostředkovatele (pracovní uzly 0, 1 a 2).Perform the same initial setup on each of the brokers (worker nodes 0, 1 and 2).

    # Create a new directory 'ssl' and change into it
    mkdir ssl
    cd ssl
    
  3. Na všech pracovních uzlech proveďte následující kroky pomocí níže uvedeného fragmentu kódu.On each of the worker nodes, execute the following steps using the code snippet below.

    1. Vytvořte úložiště klíčů a naplňte ho pomocí nového privátního certifikátu.Create a keystore and populate it with a new private certificate.
    2. Vytvořte žádost o podepsání certifikátu.Create a certificate signing request.
    3. Spojovací bod služby žádost o podepsání certifikátu certifikační autoritě (headnode0)SCP the certificate signing request to the 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. Na počítači certifikační autority spusťte následující příkaz, který vytvoří soubory ca-cert a klíč certifikační autority:On the CA machine run the following command to create ca-cert and ca-key files:

    openssl req -new -newkey rsa:4096 -days 365 -x509 -subj "/CN=Kafka-Security-CA" -keyout ca-key -out ca-cert -nodes
    
  5. Přejděte na počítač certifikační autority a podepište všechny přijaté žádosti o podepsání certifikátu:Change to the CA machine and sign all of the received cert signing requests:

    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. Podepsané certifikáty můžete odeslat zpět do pracovních uzlů z certifikační autority (headnode0).Send the signed certificates back to the worker nodes from the 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. Odešlete veřejný certifikát certifikační autority do každého pracovního uzlu.Send the public certificate of the CA to each worker node.

    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. Do každého pracovního uzlu přidejte veřejný certifikát CAs do úložiště truststore a klíčů.On each worker node, add the CAs public certificate to the truststore and keystore. Pak přidejte vlastní podepsaný certifikát pracovního uzlu do úložiště klíčů.Then add the worker node's own signed certificate to the keystore

    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ůUpdate Kafka configuration to use TLS and restart brokers

Nyní jste nastavili jednotlivé zprostředkovatele Kafka s úložištěm klíčů a truststore a importovali jste správné certifikáty.You have now set up each Kafka broker with a keystore and truststore, and imported the correct certificates. Dále upravte související vlastnosti konfigurace Kafka pomocí Ambari a pak restartujte zprostředkovatele Kafka.Next, modify related Kafka configuration properties using Ambari and then restart the Kafka brokers.

Chcete-li dokončit úpravu konfigurace, proveďte následující kroky:To complete the configuration modification, do the following steps:

  1. Přihlaste se k Azure Portal a vyberte svůj cluster Azure HDInsight Apache Kafka.Sign in to the Azure portal and select your Azure HDInsight Apache Kafka cluster.

  2. Kliknutím na Ambari domů v části řídicí panely clusterupřejdete na uživatelské rozhraní Ambari.Go to the Ambari UI by clicking Ambari home under Cluster dashboards.

  3. V části zprostředkovatel Kafka nastavte vlastnost Listeners na PLAINTEXT://localhost:9092,SSL://localhost:9093Under Kafka Broker set the listeners property to PLAINTEXT://localhost:9092,SSL://localhost:9093

  4. V části Advanced Kafka-Broker nastavte vlastnost Security. Inter. Broker. Protocol na SSLUnder Advanced kafka-broker set the security.inter.broker.protocol property to SSL

    Úprava vlastností konfigurace SSL Kafka v Ambari

  5. V části Custom Kafka-Broker nastavte vlastnost SSL. Client. auth na required .Under Custom kafka-broker set the ssl.client.auth property to required. Tento krok se vyžaduje jenom v případě, že nastavujete ověřování a šifrování.This step is only required if you are setting up authentication and encryption.

    Úprava vlastností konfigurace SSL Kafka v Ambari

  6. 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 .For HDI version 3.6, go to Ambari UI and add the following configurations under Advanced kafka-env and the kafka-env template property.

    # 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. Tady je snímek obrazovky, který zobrazuje uživatelské rozhraní konfigurace Ambari s těmito změnami.Here is the screenshot that shows Ambari configuration UI with these changes.

    Pro HDI verze 3,6:For HDI version 3.6:

    Úprava vlastnosti šablony Kafka-ENV v Ambari

    Pro HDI verze 4,0:For HDI version 4.0:

    Úprava vlastnosti šablony Kafka-ENV v Ambari čtyřech

  8. Restartujte všechny zprostředkovatele Kafka.Restart all Kafka brokers.

Instalace klienta (bez ověřování)Client setup (without authentication)

Pokud nepotřebujete ověřování, souhrn kroků pro nastavení šifrování TLS:If you don't need authentication, the summary of the steps to set up only TLS encryption are:

  1. Přihlaste se k certifikační autoritě (aktivnímu hlavnímu uzlu).Sign in to the CA (active head node).
  2. Zkopírujte certifikát CA do klientského počítače z počítače certifikační autority (wn0).Copy the CA cert to client machine from the CA machine (wn0).
  3. Přihlaste se ke klientskému počítači (HN1) a přejděte do ~/ssl složky.Sign in to the client machine (hn1) and navigate to the ~/ssl folder.
  4. Importujte certifikát CA do truststore.Import the CA cert to the truststore.
  5. Importujte certifikát certifikační autority do úložiště klíčů.Import the CA cert to the keystore.

Tyto kroky jsou podrobně popsané v následujících fragmentech kódu.These steps are detailed in the following code snippets.

  1. Přihlaste se k uzlu certifikační autority.Sign in to the CA node.

    ssh sshuser@HeadNode0_Name
    cd ssl
    
  2. Zkopírujte certifikát CA-CERT do klientského počítače.Copy the ca-cert to the client machine

    scp ca-cert sshuser@HeadNode1_Name:~/ssl/ca-cert
    
  3. Přihlaste se ke klientskému počítači (pohotovostní hlavní uzel).Sign in to the client machine (standby head node).

    ssh sshuser@HeadNode1_Name
    cd ssl
    
  4. Importujte certifikát CA do truststore.Import the CA certificate to the truststore.

    keytool -keystore kafka.client.truststore.jks -alias CARoot -import -file ca-cert -storepass "MyClientPassword123" -keypass "MyClientPassword123" -noprompt
    
  5. Importujte certifikát CA do úložiště klíčů.Import the CA cert to keystore.

    keytool -keystore kafka.client.keystore.jks -alias CARoot -import -file ca-cert -storepass "MyClientPassword123" -keypass "MyClientPassword123" -noprompt
    
  6. Vytvořte soubor client-ssl-auth.properties na klientském počítači (HN1).Create the file client-ssl-auth.properties on client machine (hn1) . Měl by mít následující řádky:It should have the following lines:

    security.protocol=SSL
    ssl.truststore.location=/home/sshuser/ssl/kafka.client.truststore.jks
    ssl.truststore.password=MyClientPassword123
    
  7. Spusťte klienta správce s možnostmi producent a příjemce a ověřte, zda pracují výrobci i spotřebitelé na portu 9093.Start the admin client with producer and consumer options to verify that both producers and consumers are working on port 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í .Please refer to Verification section below for steps needed to verify the setup using console producer/consumer.

Instalace klienta (s ověřováním)Client setup (with authentication)

Poznámka

Následující kroky se vyžadují jenom v případě, že nastavujete šifrování TLS i ověřování.The following steps are required only if you are setting up both TLS encryption and authentication. Pokud nastavujete jenom šifrování, přečtěte si téma instalace klienta bez ověření.If you are only setting up encryption, then see Client setup without authentication.

Následující čtyři kroky shrnují úlohy potřebné k dokončení instalace klienta:The following four steps summarize the tasks needed to complete the client setup:

  1. Přihlaste se ke klientskému počítači (pohotovostní hlavní uzel).Sign in to the client machine (standby head node).
  2. Vytvořte úložiště klíčů Java a získejte podepsaný certifikát pro zprostředkovatele.Create a java keystore and get a signed certificate for the broker. Pak zkopírujte certifikát do virtuálního počítače, ve kterém je certifikační autorita spuštěná.Then copy the certificate to the VM where the CA is running.
  3. Pro podepsání klientského certifikátu přepněte na počítač certifikační autority (aktivní hlavní uzel).Switch to the CA machine (active head node) to sign the client certificate.
  4. Přejděte do klientského počítače (pohotovostní hlavní uzel) a přejděte do ~/ssl složky.Go to the client machine (standby head node) and navigate to the ~/ssl folder. Zkopírujte podepsaný certifikát do klientského počítače.Copy the signed cert to client machine.

Podrobnosti o jednotlivých krocích jsou uvedeny níže.The details of each step are given below.

  1. Přihlaste se ke klientskému počítači (pohotovostní hlavní uzel).Sign in to the client machine (standby head node).

    ssh sshuser@HeadNode1_Name
    
  2. Odeberte všechny existující adresáře SSL.Remove any existing ssl directory.

    rm -R ~/ssl
    mkdir ssl
    cd ssl
    
  3. Vytvořte úložiště klíčů Java a vytvořte žádost o podepsání certifikátu.Create a java keystore and create a certificate signing request.

    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. Zkopírování žádosti o podepsání certifikátu certifikační autoritěCopy the certificate signing request to the CA

    scp client-cert-sign-request sshuser@HeadNode0_Name:~/ssl/client-cert-sign-request
    
  5. Přepněte na počítač certifikační autority (aktivní hlavní uzel) a podepište certifikát klienta.Switch to the CA machine (active head node) and sign the client certificate.

    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. Zkopíruje podepsaný certifikát klienta z certifikační autority (aktivní hlavní uzel) do klientského počítače.Copy signed client cert from the CA (active head node) to client machine.

    scp client-cert-signed sshuser@HeadNode1_Name:~/ssl/client-signed-cert
    
  7. Zkopírujte certifikát CA-CERT do klientského počítače.Copy the ca-cert to the client machine

    scp ca-cert sshuser@HeadNode1_Name:~/ssl/ca-cert
    
    1. Přihlaste se ke klientskému počítači (pohotovostní hlavní uzel) a přejděte do adresáře SSL.Sign in to the client machine (standby head node) and navigate to ssl directory.
    ssh sshuser@HeadNode1_Name
    cd ssl
    
  8. Vytvoř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):Create client store with signed cert, and import ca cert into the keystore and truststore on client machine (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-cert-signed -storepass "MyClientPassword123" -keypass "MyClientPassword123" -noprompt
    
  9. Vytvoří soubor client-ssl-auth.properties na klientském počítači (HN1).Create a file client-ssl-auth.properties on client machine (hn1) . Měl by mít následující řádky:It should have the following lines:

    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íVerification

Spusťte tyto kroky na klientském počítači.Run these steps on the client machine.

Poznámka

Pokud je nainstalováno rozhraní HDInsight 4,0 a Kafka 2,1, můžete k ověření instalace použít konzolu výrobce/spotřebitelé.If HDInsight 4.0 and Kafka 2.1 is installed, you can use the console producer/consumers to verify your setup. 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.If not, run the Kafka producer on port 9092 and send messages to the topic, and then use the Kafka consumer on port 9093 which uses TLS.

Kafka 2,1 nebo vyššíKafka 2.1 or above

  1. Vytvořte téma, pokud již neexistuje.Create a topic if it doesn't exist already.

    /usr/hdp/current/kafka-broker/bin/kafka-topics.sh --zookeeper <ZOOKEEPER_NODE>:2181 --create --topic topic1 --partitions 2 --replication-factor 2
    
  2. Spusťte výrobce konzole a zadejte cestu ke client-ssl-auth.properties konfiguračnímu souboru pro daného výrobce.Start console producer and provide the path to client-ssl-auth.properties as a configuration file for the producer.

    /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. Spusťte jiné připojení SSH ke klientskému počítači a spusťte klienta konzoly a zadejte cestu k client-ssl-auth.properties konfiguračnímu souboru pro příjemce.Open another ssh connection to client machine and start console consumer and provide the path to client-ssl-auth.properties as a configuration file for the consumer.

    /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,1Kafka 1.1

  1. Vytvořte téma, pokud již neexistuje.Create a topic if it doesn't exist already.

    /usr/hdp/current/kafka-broker/bin/kafka-topics.sh --zookeeper <ZOOKEEPER_NODE_0>:2181 --create --topic topic1 --partitions 2 --replication-factor 2
    
  2. Spusťte výrobce konzole a poskytněte cestu k souboru Client-SSL-auth. Properties jako konfigurační soubor pro producenta.Start console producer and provide the path to client-ssl-auth.properties as a configuration file for the producer.

    /usr/hdp/current/kafka-broker/bin/kafka-console-producer.sh --broker-list <FQDN_WORKER_NODE>:9092 --topic topic1 
    
  3. Spusťte jiné připojení SSH ke klientskému počítači a spusťte klienta konzoly a zadejte cestu k client-ssl-auth.properties konfiguračnímu souboru pro příjemce.Open another ssh connection to client machine and start console consumer and provide the path to client-ssl-auth.properties as a configuration file for the consumer.

    $ /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
    

Další krokyNext steps