Azure HDInsight'ta ESP Dışı Apache Kafka kümesi için TLS şifrelemesi ve kimlik doğrulaması ayarlama
Bu makalede, Apache Kafka istemcileri ile Apache Kafka aracıları arasında daha önce Güvenli Yuva Katmanı (SSL) şifrelemesi olarak bilinen Aktarım Katmanı Güvenliği (TLS) şifrelemesini ayarlama işlemleri gösterilmektedir. Ayrıca istemcilerin kimlik doğrulamasını ayarlamayı da gösterir (bazen iki yönlü TLS olarak da adlandırılır).
Önemli
Kafka uygulamaları için kullanabileceğiniz iki istemci vardır: Java istemcisi ve konsol istemcisi. Hem üretim hem de kullanım için yalnızca Java istemcisi ProducerConsumer.java
TLS kullanabilir. Konsol üreticisi istemcisi console-producer.sh
TLS ile çalışmaz.
Apache Kafka aracı kurulumu
Kafka TLS aracı kurulumu aşağıdaki şekilde dört HDInsight kümesi VM'sini kullanır:
- headnode 0 - Sertifika Yetkilisi (CA)
- çalışan düğümü 0, 1 ve 2 - aracılar
Not
Bu kılavuzda otomatik olarak imzalanan sertifikalar kullanılır, ancak en güvenli çözüm güvenilen CA'lar tarafından verilen sertifikaları kullanmaktır.
Aracı kurulum işleminin özeti aşağıdaki gibidir:
Aşağıdaki adımlar üç çalışan düğümünün her birinde yinelenir:
- Bir sertifika oluşturun.
- Sertifika imzalama isteği oluşturun.
- Sertifika imzalama isteğini Sertifika Yetkilisi'ne (CA) gönderin.
- CA'da oturum açın ve isteği imzalayın.
- İmzalı sertifikayı çalışan düğümüne geri SCP ile gönderin.
- CA'nın çalışan düğümüne genel sertifikasını SCP.
Tüm sertifikaları aldıktan sonra sertifikaları sertifika deposuna yerleştirin.
Ambari'ye gidin ve yapılandırmaları değiştirin.
Aracı kurulumunu tamamlamak için aşağıdaki ayrıntılı yönergeleri kullanın:
Önemli
Aşağıdaki kod parçacıklarında wnX, üç çalışan düğümünden birinin kısaltmasıdır ve yerine
wn0
veyawn1
wn2
yerine uygun şekilde yazılmalıdır.WorkerNode0_Name
veHeadNode0_Name
yerine ilgili makinelerin adları kullanılmalıdır.HDInsight için Sertifika Yetkilisi 'nin (CA) rolünü dolduran baş düğüm 0'da ilk kurulumu gerçekleştirin.
# Create a new directory 'ssl' and change into it mkdir ssl cd ssl
Aracıların her birinde aynı ilk kurulumu gerçekleştirin (çalışan düğümleri 0, 1 ve 2).
# Create a new directory 'ssl' and change into it mkdir ssl cd ssl
Çalışan düğümlerinin her birinde kod parçacığını kullanarak aşağıdaki adımları yürütebilirsiniz.
- Bir anahtar deposu oluşturun ve bunu yeni bir özel sertifikayla doldurun.
- Sertifika imzalama isteği oluşturun.
- SERTIFIKA yetkilisine sertifika imzalama isteğini SCP (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
Not
FQDN_WORKER_NODE, çalışan düğümü makinesinin Tam Etki Alanı Adı'dır. Bu ayrıntıları baş düğümdeki /etc/hosts dosyasından alabilirsiniz
Örneğin,
wn0-espkaf.securehadooprc.onmicrosoft.com wn0-kafka2.zbxwnwsmpcsuvbjqbmespcm1zg.bx.internal.cloudapp.net
CA makinesinde ca-cert ve ca-key dosyaları oluşturmak için aşağıdaki komutu çalıştırın:
openssl req -new -newkey rsa:4096 -days 365 -x509 -subj "/CN=Kafka-Security-CA" -keyout ca-key -out ca-cert -nodes
CA makinesine değiştirin ve alınan sertifika imzalama isteklerinin tümünü imzalayın:
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"
İmzalı sertifikaları CA'dan çalışan düğümlerine geri gönderin (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
CA'nın genel sertifikasını her çalışan düğümüne gönderin.
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
Her çalışan düğümünde CA'ların ortak sertifikasını güven deposuna ve anahtar deposuna ekleyin. Ardından çalışan düğümünü kendi imzalı sertifikasını keystore'a ekleyin
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
Kafka yapılandırmasını TLS kullanacak şekilde güncelleştirme ve aracıları yeniden başlatma
Şimdi her Kafka aracısını bir keystore ve truststore ile ayarladınız ve doğru sertifikaları içeri aktarmış oldunuz. Ardından Ambari kullanarak ilgili Kafka yapılandırma özelliklerini değiştirin ve kafka aracılarını yeniden başlatın.
Yapılandırma değişikliğini tamamlamak için aşağıdaki adımları uygulayın:
Azure portalında oturum açın ve Azure HDInsight Apache Kafka kümenizi seçin.
Küme panoları altında Ambari giriş'e tıklayarak Ambari kullanıcı arabirimine gidin.
Kafka Aracısı altında listeners özelliğini olarak ayarlayın
PLAINTEXT://localhost:9092,SSL://localhost:9093
Gelişmiş kafka-broker altında security.inter.broker.protocol özelliğini olarak ayarlayın
SSL
Özel kafka-broker altında ssl.client.auth özelliğini olarak
required
ayarlayın.Not
Not: Bu adım yalnızca kimlik doğrulaması ve şifreleme ayarlanıyorsa gereklidir.
Ambari yapılandırma kullanıcı arabirimini bu değişikliklerle gösteren ekran görüntüsü aşağıdadır.
Not
- ssl.keystore.location ve ssl.truststore.location, Sertifika Yetkilisi'nde (hn0) keystore, truststore konumunuzun tam yoludur
- ssl.keystore.password ve ssl.truststore.password, anahtar deposu ve truststore için ayarlanan paroladır. Bu örnekte,
MyServerPassword123
- ssl.key.password, anahtar deposu ve güven deposu için ayarlanan anahtardır. Bu örnekte,
MyServerPassword123
Kafka'da TLS 1.3 Kullanmak için
Ambari'deki kafka yapılandırmalarına aşağıdaki yapılandırmaları ekleyin
ssl.enabled.protocols=TLSv1.3
ssl.protocol=TLSv1.3
Önemli
- TLS 1.3 yalnızca HDI 5.1 kafka sürümüyle çalışır.
- Sunucu tarafında TLS 1.3 kullanıyorsanız, istemcide de TLS 1.3 yapılandırmalarını kullanmanız gerekir.
HDI sürüm 4.0 veya 5.0 için
- Kimlik doğrulaması ve şifreleme ayarlanıyorsa ekran görüntüsü şu şekilde görünür:
- Yalnızca şifreleme ayarlanıyorsa ekran görüntüsü şöyle görünür:
Tüm Kafka aracılarını yeniden başlatın.
İstemci kurulumu (kimlik doğrulaması olmadan)
Kimlik doğrulamasına ihtiyacınız yoksa, yalnızca TLS şifrelemesini ayarlama adımlarının özeti şunlardır:
- CA'da (etkin baş düğüm) oturum açın.
- CA sertifikasını CA makinesinden (wn0) istemci makinesine kopyalayın.
- İstemci makinesinde (hn1) oturum açın ve klasöre
~/ssl
gidin. - CA sertifikasını güven deposuna aktarın.
- CA sertifikasını anahtar deposuna aktarın.
Bu adımlar aşağıdaki kod parçacıklarında ayrıntılı olarak yer alır.
CA düğümünde oturum açın.
ssh sshuser@HeadNode0_Name cd ssl
ca-cert'i istemci makinesine kopyalama
scp ca-cert sshuser@HeadNode1_Name:~/ssl/ca-cert
İstemci makinesinde (bekleme baş düğümü) oturum açın.
ssh sshuser@HeadNode1_Name cd ssl
CA sertifikasını güven deposuna aktarın.
keytool -keystore kafka.client.truststore.jks -alias CARoot -import -file ca-cert -storepass "MyClientPassword123" -keypass "MyClientPassword123" -noprompt
CA sertifikasını keystore'a aktarın.
keytool -keystore kafka.client.keystore.jks -alias CARoot -import -file ca-cert -storepass "MyClientPassword123" -keypass "MyClientPassword123" -noprompt
dosyayı
client-ssl-auth.properties
istemci makinesinde (hn1) oluşturun. Aşağıdaki satırlara sahip olmalıdır:security.protocol=SSL ssl.truststore.location=/home/sshuser/ssl/kafka.client.truststore.jks ssl.truststore.password=MyClientPassword123
- TLS 1.3 kullanmak için dosyasına aşağıdaki yapılandırmaları ekleyin
client-ssl-auth.properties
ssl.enabled.protocols=TLSv1.3 ssl.protocol=TLSv1.3
- TLS 1.3 kullanmak için dosyasına aşağıdaki yapılandırmaları ekleyin
Hem üreticilerin hem de tüketicilerin 9093 numaralı bağlantı noktası üzerinde çalıştığını doğrulamak için üretici ve tüketici seçenekleriyle yönetici istemcisini başlatın. Konsol üreticisini/tüketicisini kullanarak kurulumu doğrulamak için gereken adımlar için Doğrulama bölümüne bakın.
İstemci kurulumu (kimlik doğrulaması ile)
Not
Aşağıdaki adımlar yalnızca hem TLS şifrelemesi hem de kimlik doğrulaması ayarlanıyorsa gereklidir. Yalnızca şifreleme ayarlanıyorsa bkz . Kimlik doğrulaması olmadan istemci kurulumu.
Aşağıdaki dört adımda, istemci kurulumunu tamamlamak için gereken görevler özetlenmiştir:
- İstemci makinesinde (bekleme baş düğümü) oturum açın.
- Bir Java keystore oluşturun ve aracı için imzalı bir sertifika alın. Ardından sertifikayı CA'nın çalıştığı VM'ye kopyalayın.
- İstemci sertifikasını imzalamak için CA makinesine (etkin baş düğüm) geçin.
- İstemci makinesine (bekleme baş düğümü) gidin ve klasöre
~/ssl
gidin. İmzalı sertifikayı istemci makinesine kopyalayın.
Her adımın ayrıntıları verilir.
İstemci makinesinde (bekleme baş düğümü) oturum açın.
ssh sshuser@HeadNode1_Name
Mevcut ssl dizinlerini kaldırın.
rm -R ~/ssl mkdir ssl cd ssl
Bir Java keystore oluşturun ve bir sertifika imzalama isteği oluşturun.
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"
Sertifika imzalama isteğini CA'ya kopyalama
scp client-cert-sign-request sshuser@HeadNode0_Name:~/ssl/client-cert-sign-request
CA makinesine (etkin baş düğüm) geçin ve istemci sertifikasını imzalayın.
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
İmzalı istemci sertifikasını CA'dan (etkin baş düğümü) istemci makinesine kopyalayın.
scp client-cert-signed sshuser@HeadNode1_Name:~/ssl/client-signed-cert
ca-cert'i istemci makinesine kopyalama
scp ca-cert sshuser@HeadNode1_Name:~/ssl/ca-cert
- İstemci makinesinde (bekleme baş düğümü) oturum açın ve ssl dizinine gidin.
ssh sshuser@HeadNode1_Name cd ssl
İmzalı sertifika ile istemci deposu oluşturun, CA sertifikasını anahtar deposuna aktarın ve istemci makinesinde güven deposu (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
İstemci makinesinde (hn1) bir dosya
client-ssl-auth.properties
oluşturun. Aşağıdaki satırlara sahip olmalıdır: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
- TLS 1.3 kullanmak için dosyasına aşağıdaki yapılandırmaları ekleyin
client-ssl-auth.properties
ssl.enabled.protocols=TLSv1.3 ssl.protocol=TLSv1.3
- TLS 1.3 kullanmak için dosyasına aşağıdaki yapılandırmaları ekleyin
Doğrulama
İstemci makinesinde bu adımları çalıştırın.
Not
HDInsight 4.0 ve Kafka 2.1 yüklüyse, kurulumunuzu doğrulamak için konsol üreticisini/tüketicilerini kullanabilirsiniz. Aksi takdirde Kafka üreticisini 9092 numaralı bağlantı noktasında çalıştırın ve konuya ileti gönderin ve ardından TLS kullanan 9093 numaralı bağlantı noktasında Kafka tüketicisini kullanın.
Kafka 2.1 veya üzeri
Henüz yoksa bir konu oluşturun.
/usr/hdp/current/kafka-broker/bin/kafka-topics.sh --zookeeper <ZOOKEEPER_NODE>:2181 --create --topic topic1 --partitions 2 --replication-factor 2
Konsol üreticisini başlatın ve öğesinin yolunu
client-ssl-auth.properties
üretici için bir yapılandırma dosyası olarak sağlayın./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
İstemci makinesine başka bir ssh bağlantısı açın ve konsol tüketicisini
client-ssl-auth.properties
başlatın ve yolunu tüketici için bir yapılandırma dosyası olarak sağlayın./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