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

  1. Na každém ze tří pracovních uzlů se opakují následující kroky:

    1. Vygenerujte certifikát.
    2. Vytvořte žádost o podepsání certifikátu.
    3. Odešlete žádost o podepsání certifikátu certifikační autoritě (CA).
    4. Přihlaste se k certifikační autoritě a podepište žádost.
    5. SCP podepsaný certifikát zpět do pracovního uzlu.
    6. SCP veřejný certifikát certifikační autority do pracovního uzlu.
  2. Jakmile budete mít všechny certifikáty, vložte certifikáty do úložiště certifikátů.

  3. 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 nebo wn2 podle potřeby. WorkerNode0_Name a HeadNode0_Name měly by být nahrazeny názvy příslušných počítačů.

  4. 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
    
  5. 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
    
  6. Na každém pracovním uzlu pomocí fragmentu kódu proveďte následující kroky.

    1. Vytvořte úložiště klíčů a naplňte ho novým privátním certifikátem.
    2. Vytvořte žádost o podepsání certifikátu.
    3. 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
    

    Snímek obrazovky znázorňující výstup souboru hostitelů

  7. 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
    
  8. 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"
    
  9. 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
    
  10. 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
    
  11. 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:

  1. Přihlaste se k webu Azure Portal a vyberte cluster Azure HDInsight Apache Kafka.

  2. Kliknutím na domovskou stránku Ambari v části Řídicí panely clusteru přejděte do uživatelského rozhraní Ambari.

  3. V části Kafka Broker nastavte vlastnost naslouchací procesy naPLAINTEXT://localhost:9092,SSL://localhost:9093

  4. V části Advanced kafka-broker nastavte vlastnost security.inter.broker.protocol na SSL

    Úprava vlastností konfigurace ssl Kafka v Ambari

  5. V části Custom kafka-broker nastavte vlastnost ssl.client.auth na requiredhodnotu .

    Poznámka:

    Poznámka: Tento krok se vyžaduje jenom v případě, že nastavujete ověřování a šifrování.

    Úprava vlastností konfigurace ssl kafka v Ambari

  6. Tady je snímek obrazovky, který ukazuje uživatelské rozhraní konfigurace Ambari s těmito změnami.

    Poznámka:

    1. ssl.keystore.location a ssl.truststore.location je úplná cesta úložiště klíčů, umístění truststore v Certifikační autoritě (hn0).
    2. 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
    3. 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
  7. Použití protokolu TLS 1.3 v systému Kafka

    Přidání následujících konfigurací do konfigurací Kafka v Ambari

    1. ssl.enabled.protocols=TLSv1.3
    2. ssl.protocol=TLSv1.3

    Důležité

    1. Protokol TLS 1.3 funguje jenom s verzí KAFKA HDI 5.1.
    2. Pokud používáte protokol TLS 1.3 na straně serveru, měli byste v klientovi použít také konfigurace PROTOKOLU TLS 1.3.
  8. Pro HDI verze 4.0 nebo 5.0

    1. Pokud nastavujete ověřování a šifrování, vypadá snímek obrazovky takto:

    Úprava vlastnosti šablony kafka-env ve čtyřech Ambari

    1. Pokud nastavujete jenom šifrování, vypadá snímek obrazovky takto:

    Snímek obrazovky znázorňující, jak upravit pole vlastností šablony kafka-env v Ambari pouze pro šifrování

  9. 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:

  1. Přihlaste se k certifikační autoritě (aktivní hlavní uzel).
  2. Zkopírujte certifikát certifikační autority do klientského počítače z počítače certifikační autority (wn0).
  3. Přihlaste se k klientskému počítači (hn1) a přejděte do ~/ssl složky.
  4. Importujte certifikát certifikační autority do úložiště důvěryhodnosti.
  5. Importujte certifikát certifikační autority do úložiště klíčů.

Tyto kroky jsou podrobně popsané v následujících fragmentech kódu.

  1. Přihlaste se k uzlu certifikační autority.

    ssh sshuser@HeadNode0_Name
    cd ssl
    
  2. Zkopírování certifikátu ca-cert do klientského počítače

    scp ca-cert sshuser@HeadNode1_Name:~/ssl/ca-cert
    
  3. Přihlaste se k klientskému počítači (pohotovostní hlavní uzel).

    ssh sshuser@HeadNode1_Name
    cd ssl
    
  4. 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
    
  5. 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
    
  6. 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
    
    1. 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
    
  7. 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:

  1. Přihlaste se k klientskému počítači (pohotovostní hlavní uzel).
  2. 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.
  3. Přepněte na počítač certifikační autority (aktivní hlavní uzel) a podepište klientský certifikát.
  4. 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.

  1. Přihlaste se k klientskému počítači (pohotovostní hlavní uzel).

    ssh sshuser@HeadNode1_Name
    
  2. Odeberte všechny existující adresáře SSL.

    rm -R ~/ssl
    mkdir ssl
    cd ssl
    
  3. 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"
    
  4. 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
    
  5. 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
    
  6. 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
    
  7. Zkopírování certifikátu ca-cert do klientského počítače

    scp ca-cert sshuser@HeadNode1_Name:~/ssl/ca-cert
    
    1. 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
    
  8. 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
    
  9. 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
    
    1. 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
    

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

  1. 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
    
  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
    
  3. 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
    

Další kroky