Apache Kafka'de tlS şifrelemesi ve kimlik doğrulamasını Azure HDInsight
Bu makalede, daha önce Güvenli Yuva Katmanı (SSL) şifrelemesi olarak bilinen Aktarım Katmanı Güvenliği (TLS) şifrelemesi' Apache Kafka aracıları arasında nasıl Apache Kafka gösterir. Ayrıca, istemcilerin kimlik doğrulamasını ayarlamayı da gösterir (bazen iki yollü TLS olarak adlandırılır).
Önemli
Kafka uygulamaları için kullanabileceğiniz iki istemci vardır: Java istemcisi ve konsol istemcisi. ProducerConsumer.javaTlS'yi hem üretim hem de tüketim için yalnızca Java istemcisi kullanabilir. Konsol üreticisi istemcisi console-producer.sh TLS ile çalışmıyor.
Not
Sürüm 1.1 ile HDInsight Kafka konsol üreticisi SSL'yi desteklemez.
Apache Kafka aracısı kurulumu
Kafka TLS aracısı kurulumu, dört HDInsight kümesi VM'lerini aşağıdaki şekilde kullanır:
- başnode 0 - Sertifika Yetkilisi (CA)
- çalışan düğümü 0, 1 ve 2 - aracılar
Not
Bu kılavuz otomatik olarak imzalanan sertifikaları kullanı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 biri için tekrarlanır:
- Bir sertifika oluşturun.
- Sertifika imzalama isteği oluşturun.
- Sertifika imzalama isteğini Sertifika Yetkilisi'ne (CA) gönderin.
- CA'da oturum açma ve isteği imzalama.
- İmzalı sertifikayı çalışan düğümüne geri SCP ile geri verin.
- Çalışan düğümüne CA'nın genel sertifikası SCP.SCP.
Tüm sertifikalara sahip olduktan sonra sertifikaları sertifika deposuna alın.
Ambari'ye gidin ve yapılandırmaları değiştirme.
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üne yönelik bir kısaltmadır ve uygun şekilde veya ile wn0 wn1 wn2 değiştirilemeleri gerekir. WorkerNode0_Name ve, HeadNode0_Name ilgili makinelerin adları ile değiştir değiştir değiştiri.
HDInsight için Sertifika Yetkilisi'nin (CA) rolünü dolduracak baş düğüm 0'da ilk kurulumu gerçekleştirin.
# Create a new directory 'ssl' and change into it mkdir ssl cd sslHer aracıda (çalışan düğümleri 0, 1 ve 2) aynı ilk kurulumu gerçekleştirin.
# Create a new directory 'ssl' and change into it mkdir ssl cd sslÇalışan düğümlerinin her biri üzerinde aşağıdaki kod parçacığını kullanarak aşağıdaki adımları yürütün.
- Bir anahtar deposu oluşturun ve bunu yeni bir özel sertifikayla doldurmak.
- Sertifika imzalama isteği oluşturun.
- CA'ya (headnode0) sertifika imzalama isteği SCP
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-requestCA makinesi üzerinde 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 -nodesCA makinesine değişiklik yapmak ve alınan tüm sertifika imzalama isteklerini imzalamak:
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 (headnode0) çalışan düğümlerine geri gönderin.
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-signedCA'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-certHer çalışan düğümünde, CA'lar ortak sertifikasını güven deposuna ve anahtar deposuna ekleyin. Ardından çalışan düğümünün kendi imzalı sertifikasını anahtar deposuna 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 kullanmak ve aracıları yeniden başlatmak için güncelleştirme
Artık her Kafka aracısını bir anahtar deposu ve truststore ile ayarladınız ve doğru sertifikaları içe aktardınız. Ardından Ambari kullanarak ilgili Kafka yapılandırma özelliklerini değiştirin ve ardından 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:
Kümede oturum Azure portal kümenizi Azure HDInsight Apache Kafka 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:9093Gelişmiş kafka-aracısı altında security.inter.broker.protocol özelliğini olarak ayarlayın
SSL
Özel kafka-aracısı altında ssl.client.auth özelliğini olarak
requiredayarlayın. Bu adım yalnızca kimlik doğrulaması ve şifrelemeyi ayar farklı ayarlarsanız gereklidir.
HDI sürüm 3.6 için Ambari kullanıcı arabirimine gidin ve Gelişmiş kafka-env ve kafka-env şablon özelliği altında aşağıdaki yapılandırmaları ekleyin.
# 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.propertiesBu değişikliklerle Ambari yapılandırma kullanıcı arabirimini gösteren ekran görüntüsü.
HDI sürüm 3.6 için:
HDI sürüm 4.0 için:
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 şifrelemesi ayarlama adımlarının özeti:
- CA'da (etkin baş düğüm) oturum açma.
- CA sertifikalarını CA makinesinden (wn0) istemci makinesine kopyalayın.
- İstemci makinede (hn1) oturum açın ve klasörüne
~/sslgidin. - CA sertifikalarını güven deposuna aktarın.
- CA sertifikalarını anahtar deposuna aktarın.
Bu adımlar aşağıdaki kod parçacıklarında ayrıntılı olarak ve ayrıntılı olarak açık bir şekilde ve açıklama içerir.
CA düğümünde oturum açma.
ssh sshuser@HeadNode0_Name cd sslCa-cert sertifikayı istemci makinesine kopyalama
scp ca-cert sshuser@HeadNode1_Name:~/ssl/ca-certİstemci makinede (hazır bekleyen baş düğüm) oturum açma.
ssh sshuser@HeadNode1_Name cd sslCA sertifikasını güven deposuna aktarın.
keytool -keystore kafka.client.truststore.jks -alias CARoot -import -file ca-cert -storepass "MyClientPassword123" -keypass "MyClientPassword123" -nopromptCA sertifikalarını anahtar deposuna aktarın.
keytool -keystore kafka.client.keystore.jks -alias CARoot -import -file ca-cert -storepass "MyClientPassword123" -keypass "MyClientPassword123" -nopromptİstemci
client-ssl-auth.propertiesmakinede (hn1) dosyasını oluşturun. Aşağıdaki satırlara sahip olması gerekir:security.protocol=SSL ssl.truststore.location=/home/sshuser/ssl/kafka.client.truststore.jks ssl.truststore.password=MyClientPassword123Hem üreticilerin hem de tüketicilerin 9093 bağlantı noktası üzerinde çalıştığını doğrulamak için yönetici istemcisini üretici ve tüketici seçenekleriyle başlatabilirsiniz. Konsol üreticisi/tüketici kullanarak kurulumu doğrulamak için gereken adımlar için lütfen aşağıdaki 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ını ayarıyorsanız gereklidir. Yalnızca şifrelemeyi ayar görüyorsanız 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 makinede (hazır bekleyen baş düğüm) oturum açma.
- Bir Java anahtar deposu oluşturun ve aracı için imzalı bir sertifika alın. Ardından sertifikayı CA'nın çalıştır olduğu VM'ye kopyalayın.
- İstemci sertifikasını imzalamak için CA makinesine (etkin baş düğüm) geçiş.
- İstemci makinesine (hazır bekleyen baş düğüm) gidin ve klasörüne
~/sslgidin. İmzalı sertifikayı istemci makinesine kopyalayın.
Her adımın ayrıntıları aşağıda verilmiştir.
İstemci makinede (hazır bekleyen baş düğüm) oturum açma.
ssh sshuser@HeadNode1_NameMevcut ssl dizinlerini kaldırın.
rm -R ~/ssl mkdir ssl cd sslJava anahtar deposu 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-requestCA makinesine (etkin baş düğüm) geçiş ve istemci sertifikasını imzalama.
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 sertifikalarını CA'dan (etkin baş düğüm) istemci makinesine kopyalayın.
scp client-cert-signed sshuser@HeadNode1_Name:~/ssl/client-signed-certCa-cert sertifikayı istemci makinesine kopyalama
scp ca-cert sshuser@HeadNode1_Name:~/ssl/ca-cert- İstemci makinede (beklemede baş düğüm) oturum açma ve ssl dizinine gidin.
ssh sshuser@HeadNode1_Name cd sslİmzalı sertifika ile istemci deposu oluşturun ve ca sertifikalarını istemci makinesi (hn1) üzerinde anahtar deposuna ve güven deposuna aktarın:
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 makinede
client-ssl-auth.properties(hn1) bir dosya oluşturun. Aşağıdaki satırlara sahip olması gerekir: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
Doğrulama
bu adımları istemci makinede ç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. Yoksa, 9092 bağlantı noktası üzerinden Kafka üreticisini çalıştırın ve konuya ileti gönderin ve ardından TLS kullanan 9093 bağlantı noktası üzerinde Kafka tüketicisi 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 2Konsol üreticisini başlatın ve üretici
client-ssl-auth.propertiesiçin yapılandırma dosyası olarak yolunu sağlar./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 başlatın ve yolunu tüketici
client-ssl-auth.propertiesiçin bir yapılandırma dosyası olarak sağlar./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.1
Henüz yoksa bir konu oluşturun.
/usr/hdp/current/kafka-broker/bin/kafka-topics.sh --zookeeper <ZOOKEEPER_NODE_0>:2181 --create --topic topic1 --partitions 2 --replication-factor 2Konsol üreticisini başlatın ve client-ssl-auth.properties yolunu üretici için bir yapılandırma dosyası olarak sağlar.
/usr/hdp/current/kafka-broker/bin/kafka-console-producer.sh --broker-list <FQDN_WORKER_NODE>:9092 --topic topic1İstemci makinesine başka bir SSH bağlantısı açın ve konsol tüketicisini başlatın ve yolunu tüketici
client-ssl-auth.propertiesiçin bir yapılandırma dosyası olarak sağlar.$ /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