Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
W tym artykule pokazano, jak skonfigurować szyfrowanie tls (Transport Layer Security), znane wcześniej jako szyfrowanie Secure Sockets Layer (SSL) między klientami platformy Apache Kafka i brokerami platformy Apache Kafka. Przedstawiono również sposób konfigurowania uwierzytelniania klientów (czasami nazywanych dwukierunkowym protokołem TLS).
Ważne
Istnieją dwa klienci, których można używać w przypadku aplikacji platformy Kafka: klienta Java i klienta konsoli. Tylko klient ProducerConsumer.java
Java może używać protokołu TLS do tworzenia i używania. Klient console-producer.sh
producenta konsoli nie działa z protokołem TLS.
Konfiguracja brokera platformy Apache Kafka
Konfiguracja brokera TLS platformy Kafka używa czterech maszyn wirtualnych klastra usługi HDInsight w następujący sposób:
- węzeł główny 0 — urząd certyfikacji
- węzeł roboczy 0, 1 i 2 — brokerzy
Uwaga
W tym przewodniku używane są certyfikaty z podpisem własnym, ale najbezpieczniejszym rozwiązaniem jest użycie certyfikatów wystawionych przez zaufane urzędy certyfikacji.
Podsumowanie procesu konfiguracji brokera jest następujące:
Następujące kroki są powtarzane na każdym z trzech węzłów roboczych:
- Generowanie certyfikatu.
- Utwórz żądanie podpisania certyfikatu.
- Wyślij żądanie podpisania certyfikatu do urzędu certyfikacji.
- Zaloguj się do urzędu certyfikacji i podpisz żądanie.
- SCP podpisany certyfikat z powrotem do węzła roboczego.
- SCP certyfikat publiczny urzędu certyfikacji do węzła roboczego.
Gdy masz już wszystkie certyfikaty, umieść je w magazynie certyfikatów.
Przejdź do Ambari i zmień konfiguracje.
Aby ukończyć konfigurację brokera, wykonaj następujące szczegółowe instrukcje:
Ważne
W poniższych fragmentach kodu, wnX jest skrótem dla jednego z trzech węzłów roboczych i powinien zostać zastąpiony na
wn0
,wn1
lubwn2
w stosownych przypadkach.WorkerNode0_Name
iHeadNode0_Name
powinny zostać zastąpione nazwami odpowiednich maszyn.Wykonaj początkową konfigurację w węźle głównym 0, który dla usługi HDInsight pełni rolę urzędu certyfikacji.
# Create a new directory 'ssl' and change into it mkdir ssl cd ssl
Wykonaj tę samą początkową konfigurację na każdym z brokerów (węzły robocze 0, 1 i 2).
# Create a new directory 'ssl' and change into it mkdir ssl cd ssl
W każdym z węzłów procesu roboczego wykonaj następujące kroki przy użyciu fragmentu kodu.
- Utwórz magazyn kluczy i wypełnij go nowym certyfikatem prywatnym.
- Utwórz żądanie podpisania certyfikatu.
- Scp żądanie podpisania certyfikatu do urzędu certyfikacji (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
Uwaga
FQDN_WORKER_NODE to W pełni kwalifikowana nazwa domeny maszyny węzła roboczego. Tę informację można uzyskać z pliku /etc/hosts w węźle głównym.
Na przykład
wn0-espkaf.securehadooprc.onmicrosoft.com wn0-kafka2.zbxwnwsmpcsuvbjqbmespcm1zg.bx.internal.cloudapp.net
Na maszynie urzędu certyfikacji uruchom następujące polecenie, aby utworzyć pliki ca-cert i ca-key:
openssl req -new -newkey rsa:4096 -days 365 -x509 -subj "/CN=Kafka-Security-CA" -keyout ca-key -out ca-cert -nodes
Przejdź do maszyny urzędu certyfikacji i podpisz wszystkie odebrane żądania podpisywania certyfikatu:
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"
Wyślij podpisane certyfikaty z powrotem z urzędu certyfikacji (headnode0) do węzłów roboczych.
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
Wyślij publiczny certyfikat urzędu certyfikacji do każdego węzła roboczego.
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
W każdym węźle roboczym dodaj certyfikat urzędu certyfikacji (CA) do magazynu zaufania i magazynu kluczy. Następnie dodaj certyfikat podpisany przez węzeł roboczy do magazynu kluczy
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
Zaktualizuj konfigurację Kafki do używania TLS i ponownie uruchom brokerów.
Teraz skonfigurowano każdego brokera platformy Kafka z magazynem kluczy i magazynem zaufania oraz zaimportowano odpowiednie certyfikaty. Następnie zmodyfikuj powiązane właściwości konfiguracji platformy Kafka przy użyciu narzędzia Ambari, a następnie uruchom ponownie brokerów platformy Kafka.
Aby ukończyć modyfikację konfiguracji, wykonaj następujące czynności:
Zaloguj się do witryny Azure Portal i wybierz klaster platformy Apache Kafka usługi Azure HDInsight.
Przejdź do interfejsu użytkownika systemu Ambari, klikając pozycję Narzędzia główne Ambari w obszarze Pulpity nawigacyjne klastra.
W sekcji Broker platformy Kafka ustaw właściwość listeners na
PLAINTEXT://localhost:9092,SASL_SSL://localhost:9093
W obszarze Advanced kafka-broker ustaw właściwość security.inter.broker.protocol na wartość
SASL_SSL
W obszarze Niestandardowy broker Kafka ustaw właściwość ssl.client.auth na wartość
required
.Uwaga
Ten krok jest wymagany tylko w przypadku konfigurowania uwierzytelniania i szyfrowania.
Oto zrzut ekranu przedstawiający interfejs użytkownika konfiguracji systemu Ambari z tymi zmianami.
Uwaga
- ssl.keystore.location i ssl.truststore.location to pełna ścieżka magazynu kluczy, lokalizacja magazynu zaufania w urzędzie certyfikacji (hn0)
- ssl.keystore.password i ssl.truststore.password to są hasła ustawione dla magazynu kluczy i magazynu zaufania. W tym przypadku, jako przykład
MyServerPassword123
- ssl.key.password jest kluczem ustawionym dla keystore i trust store. Na przykład w tym przypadku
MyServerPassword123
Aby użyć protokołu TLS 1.3 na platformie Kafka, dodaj następujące konfiguracje do konfiguracji platformy Kafka w systemie Ambari.
ssl.enabled.protocols=TLSv1.3
ssl.protocol=TLSv1.3
Ważne
- TLS 1.3 działa tylko z wersją Kafka 5.1 na HDI.
- Jeśli używasz protokołu TLS 1.3 po stronie serwera, należy również użyć konfiguracji protokołu TLS 1.3 na kliencie.
W przypadku usługi HDI w wersji 4.0 lub 5.0
Jeśli konfigurujesz uwierzytelnianie i szyfrowanie, zrzut ekranu wygląda następująco:
Jeśli konfigurujesz tylko szyfrowanie, zrzut ekranu wygląda następująco:
Uruchom ponownie wszystkie brokery platformy Kafka.
Konfiguracja klienta (bez uwierzytelniania)
Jeśli nie potrzebujesz uwierzytelniania, podsumowanie kroków konfigurowania tylko szyfrowania TLS to:
- Zaloguj się do węzła kontrolnego (aktywny węzeł główny).
- Skopiuj certyfikat urzędu certyfikacji do komputera klienckiego z komputera urzędu certyfikacji (wn0).
- Zaloguj się do komputera klienckiego (hn1) i przejdź do
~/ssl
folderu . - Zaimportuj certyfikat urzędu certyfikacji do magazynu zaufania.
- Zaimportuj certyfikat urzędu certyfikacji do magazynu kluczy.
Te kroki zostały szczegółowo opisane w poniższych fragmentach kodu.
Zaloguj się do węzła urzędu certyfikacji.
ssh sshuser@HeadNode0_Name cd ssl
Kopiowanie certyfikatu ca-cert na komputer kliencki
scp ca-cert sshuser@HeadNode1_Name:~/ssl/ca-cert
Zaloguj się do maszyny klienckiej (węzeł główny rezerwowy).
ssh sshuser@HeadNode1_Name cd ssl
Zaimportuj certyfikat urzędu certyfikacji do repozytorium zaufania.
keytool -keystore kafka.client.truststore.jks -alias CARoot -import -file ca-cert -storepass "MyClientPassword123" -keypass "MyClientPassword123" -noprompt
Zaimportuj certyfikat CA do magazynu kluczy.
keytool -keystore kafka.client.keystore.jks -alias CARoot -import -file ca-cert -storepass "MyClientPassword123" -keypass "MyClientPassword123" -noprompt
Utwórz plik
client-ssl-auth.properties
na komputerze klienckim (hn1). Powinny mieć następujące wiersze:security.protocol=SASL_SSL sasl.mechanism=GSSAPI sasl.kerberos.service.name=kafka ssl.truststore.location=/home/sshuser/ssl/kafka.client.truststore.jks ssl.truststore.password=MyClientPassword123
- Aby użyć protokołu TLS 1.3, dodaj następujące konfiguracje do pliku
client-ssl-auth.properties
ssl.enabled.protocols=TLSv1.3 ssl.protocol=TLSv1.3
- Aby użyć protokołu TLS 1.3, dodaj następujące konfiguracje do pliku
Uruchom klienta administracyjnego z opcjami producenta i konsumenta, aby sprawdzić, czy zarówno producenci, jak i konsumenci pracują na porcie 9093. Zapoznaj się z sekcją Weryfikacja , aby zapoznać się z krokami wymaganymi do zweryfikowania konfiguracji przy użyciu producenta/odbiorcy konsoli.
Konfiguracja klienta (z uwierzytelnianiem)
Uwaga
Poniższe kroki są wymagane tylko w przypadku konfigurowania zarówno szyfrowania TLS, jak i uwierzytelniania. Jeśli konfigurujesz tylko szyfrowanie, zobacz Konfiguracja klienta bez uwierzytelniania.
Poniższe cztery kroki zawierają podsumowanie zadań wymaganych do ukończenia konfiguracji klienta:
- Zaloguj się na maszynę kliencką (węzeł główny w trybie oczekiwania).
- Utwórz magazyn kluczy Java i uzyskaj podpisany certyfikat dla brokera. Następnie skopiuj certyfikat do maszyny wirtualnej, na której działa urząd certyfikacji.
- Przejdź do maszyny Certyfikatu Autoryzacji (aktywny węzeł główny), aby podpisać certyfikat klienta.
- Przejdź do komputera klienckiego (węzeł główny rezerwowy) i przejdź do
~/ssl
folderu. Skopiuj podpisany certyfikat do komputera klienckiego.
Podane są szczegółowe informacje o poszczególnych krokach.
Zaloguj się do komputera klienckiego (węzła głównego rezerwowego).
ssh sshuser@HeadNode1_Name
Usuń dowolny istniejący katalog ssl.
rm -R ~/ssl mkdir ssl cd ssl
Utwórz magazyn kluczy Java i utwórz żądanie podpisania certyfikatu.
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"
Skopiuj żądanie podpisania certyfikatu do urzędu certyfikacji
scp client-cert-sign-request sshuser@HeadNode0_Name:~/ssl/client-cert-sign-request
Przełącz się na maszynę urzędu certyfikacji (aktywny węzeł główny) i podpisz certyfikat 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:MyClientPassword123
Skopiuj podpisany certyfikat klienta z urzędu certyfikacji (aktywny węzeł główny) do komputera klienckiego.
scp client-cert-signed sshuser@HeadNode1_Name:~/ssl/client-signed-cert
Kopiowanie certyfikatu ca-cert na komputer kliencki
scp ca-cert sshuser@HeadNode1_Name:~/ssl/ca-cert
- Zaloguj się do komputera klienckiego (węzeł główny rezerwowy) i przejdź do katalogu ssl.
ssh sshuser@HeadNode1_Name cd ssl
Utwórz sklep klienta z podpisanym certyfikatem i zaimportuj certyfikat urzędu certyfikacji do magazynu kluczy i repozytorium zaufania na komputerze klienckim (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
Utwórz plik
client-ssl-auth.properties
na komputerze klienckim (hn1). Powinny mieć następujące wiersze:security.protocol=SASL_SSL sasl.mechanism=GSSAPI sasl.kerberos.service.name=kafka 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
- Aby użyć protokołu TLS 1.3, dodaj następujące konfiguracje do pliku
client-ssl-auth.properties
ssl.enabled.protocols=TLSv1.3 ssl.protocol=TLSv1.3
- Aby użyć protokołu TLS 1.3, dodaj następujące konfiguracje do pliku
Weryfikacja
Uruchom te kroki na komputerze klienckim.
Uwaga
Jeśli zainstalowano HDInsight 4.0 i Kafkę 2.1, możesz zweryfikować konfigurację, używając konsolowego producenta/konsumenta. Jeśli nie, uruchom producenta platformy Kafka na porcie 9092 i wyślij komunikaty do tematu, a następnie użyj konsumenta platformy Kafka na porcie 9093, który używa protokołu TLS.
Kafka 2.1 lub nowsza
Uwaga
Poniższe polecenia będą działać, jeśli używasz użytkownika kafka
lub użytkownika niestandardowego, którzy mają dostęp do wykonywania operacji CRUD.
Korzystanie z narzędzia wiersza polecenia
Upewnij się, że sprawdzasz lokalny bilet Kerberos dla niestandardowego użytkownika, którego chcesz użyć do przesyłania poleceń.
klist
Jeśli masz bilet, możesz przejść dalej. W przeciwnym razie wygeneruj regułę i kartę kluczy Protokołu Kerberos przy użyciu poniższego polecenia.
ktutil
ktutil: addent -password -p espkafkauser@TEST.COM -k 1 -e RC4-HMAC Password for espkafkauser@TEST.COM: ktutil: wkt user1.keytab ktutil: q kinit –kt espkafkauser.keytab espkafkauser@TEST.COM
klist
ponownie, aby sprawdzić buforowany bilet Kerberos.Utwórz temat, jeśli jeszcze nie istnieje.
sudo su kafka –c "/usr/hdp/current/kafka-broker/bin/kafka-topics.sh --zookeeper <ZOOKEEPER_NODE>:2181 --create --topic topic1 --partitions 2 --replication-factor 2"
Aby użyć Keytab, utwórz plik Keytab z następującą zawartością. Pamiętaj, aby ustawić właściwość Keytab na plik Keytab i odwołać się do principalu używanego w pliku Keytab. Poniżej znajduje się przykładowy plik JAAS utworzony i umieszczony w lokalizacji maszyny wirtualnej: /home/sshuser/kafka_client_jaas_keytab.conf
KafkaClient { com.sun.security.auth.module.Krb5LoginModule required useKeyTab=true storeKey=true keyTab="/home/sshuser/espkafkauser.keytab" principal="espkafkauser@TEST.COM"; };
Uruchom producenta konsoli i podaj ścieżkę do
client-ssl-auth.properties
jako pliku konfiguracji producenta.export KAFKA_OPTS="-Djava.security.auth.login.config=/home/hdiuser/kafka_client_jaas_keytab.conf" /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
Otwórz kolejne połączenie SSH z maszyną kliencką i uruchom konsolowego konsumenta, i podaj ścieżkę do pliku konfiguracji
client-ssl-auth.properties
dla konsumenta.export KAFKA_OPTS="-Djava.security.auth.login.config=/home/sshuser/kafka_client_jaas_keytab.conf" /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
Jeśli chcesz używać klienta Java do wykonywania operacji CRUD, użyj następującego repozytorium GitHub.