2017-06-27 1 views
1

J'ajoute la sécurité SSL à mon Cluster Kafka Confluent-3.0.1 en suivant les instructions here et here.Configurer SSL et ACL pour kafka-console-consumer

Dans les extraits de transaction Linux ci-dessous, j'ai remplacé mes noms de serveur par myserverA, myserverB et myserverC. J'ai également obscurci les mots de passe. C'est ma première publication sur un forum. Je m'excuse pour les sections mal formatées de ce post.

Mes questions:

Quelle ACL contrôle l'accès pour aller chercher des compensations indiquées juste au-dessous? Dois-je changer ma configuration ou mes clés SSL?

Un grand merci pour toute assistance que vous pourriez être en mesure de fournir.

J'ai été capable de produire des données en utilisant le kafka-console-producer sur SSL, mais je ne peux pas lire les données en utilisant le kafka-console-consumer. Je reçois l'erreur suivante:

[[email protected] confluent-3.0.1]$ /kafka/confluent-3.0.1/bin/kafka-console-consumer --bootstrap-server myserverA:9093 --zookeeper myserverA:2181/kafka --topic ssl-test --from-beginning --new-consumer --consumer.config /kafka/data/client/ssl/client.properties 
[2017-06-27 13:11:50,462] WARN Attempt to fetch offsets for partition ssl-test-0 failed due to: Not authorized to access topics: [Topic authorization failed.] (org.apache.kafka.clients.consumer.internals.Fetcher) 
[2017-06-27 13:11:50,473] WARN Error while fetching metadata with correlation id 6 : {ssl-test=TOPIC_AUTHORIZATION_FAILED} (org.apache.kafka.clients.NetworkClient) 
[2017-06-27 13:11:50,476] ERROR Unknown error when running consumer: (kafka.tools.ConsoleConsumer$) 
org.apache.kafka.common.errors.TopicAuthorizationException: Not authorized to access topics: [ssl-test] 

On ne sait pas si mon problème est dans la configuration du client, ou la configuration inter-courtier.

Le fichier server.properties sur chacun de mes trois courtiers comprend les éléments suivants:

###################### SSL Configuration ################ 
# 
ssl.keystore.location=/kafka/data/ssl/keystore/kafka.keystore.jks 
ssl.keystore.password=<hidden for this posting> 
ssl.key.password=<hidden for this posting> 
ssl.truststore.location=/kafka/data/ssl/truststore/kafka.truststore.jks 
ssl.truststore.password=<hidden for this posting> 

ssl.client.auth=requested 
#ssl.cipher.suites= 
ssl.enabled.protocols = TLSv1.2,TLSv1.1,TLSv1 
ssl.keystore.type = JKS 
ssl.truststore.type = JKS 

security.inter.broker.protocol=ssl 

# #### Enable ACLs #### 
authorizer.class.name=kafka.security.auth.SimpleAclAuthorizer 
allow.everyone.if.no.acl.found=true 

super.users=User:CN=myserverA,OU=NBCUniversal,O=NBCUniversal,L=NY,ST=NY,C=US;User:myserverB,OU=NBCUniversal,O=NBCUniversal,L=NY,ST=NY,C=US;User:CN=myserverC,OU=NBCUniversal,O=NBCUniversal,L=NY,ST=NY,C=US 

J'utilise les mêmes client.properties pour le producer.config et consumer.config. Il contient les éléments suivants:

###################### SSL Configuration ################ 
# 
security.protocol=ssl 

ssl.keystore.location=/kafka/data/client/ssl/keystore/kafka.client.keystore.jks 
ssl.keystore.password=<hidden for this posting> 
ssl.key.password=<hidden for this posting> 
ssl.truststore.location=/kafka/data/client/ssl/truststore/kafka.client.truststore.jks 
ssl.truststore.password=<hidden for this posting> 

#ssl.provider= 
#ssl.cipher.suites= 
ssl.enabled.protocols = TLSv1.2,TLSv1.1,TLSv1 
ssl.keystore.type = JKS 
ssl.truststore.type = JKS 

J'ai un grand nombre de concessions ACL sur le sujet ssl-test. J'ai essayé: 1) SSL Dnames avec des espaces après les virgules, 2) SSL Dnames sans espaces après virgules, 3) SSL Noms communs pour certs courtier

[[email protected] ~]# /kafka/confluent-3.0.1/bin/kafka-acls --authorizer-properties zookeeper.connect=myserverA:2181/kafka --list --topic ssl-test 
Current ACLs for resource `Topic:ssl-test`: 
User:CN=Test Client,OU=Test Client Unit,O=Test Client Org,L=LA,ST=CA,C=US has Allow permission for operations: Read from hosts: * 
User:CN=Test Client, OU=Test Client Unit, O=Test Client Org, L=LA, ST=CA, C=US has Allow permission for operations: Read from hosts: * 
User:myserverA has Allow permission for operations: Write from hosts: * 
User:myserverC has Allow permission for operations: Read from hosts: * 
User:CN=myserverB,OU=NBCUniversal,O=NBCUniversal,L=NY,ST=NY,C=US has Allow permission for operations: Write from hosts: * 
User:CN=myserverA,OU=NBCUniversal,O=NBCUniversal,L=NY,ST=NY,C=US has Allow permission for operations: Read from hosts: * 
User:Test Client has Allow permission for operations: Read from hosts: * 
User:Test Client has Allow permission for operations: Write from hosts: * 
User:myserverB has Allow permission for operations: Write from hosts: * 
User:CN=Test Client,OU=Test Client Unit,O=Test Client Org,L=LA,ST=CA,C=US has Allow permission for operations: Write from hosts: * 
User:CN=myserverC,OU=NBCUniversal,O=NBCUniversal,L=NY,ST=NY,C=US has Allow permission for operations: Read from hosts: * 
User:CN=myserverA,OU=NBCUniversal,O=NBCUniversal,L=NY,ST=NY,C=US has Allow permission for operations: Write from hosts: * 
User:CN=myserverB,OU=NBCUniversal,O=NBCUniversal,L=NY,ST=NY,C=US has Allow permission for operations: Read from hosts: * 
User:myserverB has Allow permission for operations: Read from hosts: * 
User:myserverA has Allow permission for operations: Read from hosts: * 
User:CN=Test Client, OU=Test Client Unit, O=Test Client Org, L=LA, ST=CA, C=US has Allow permission for operations: Write from hosts: * 
ser:myserverC has Allow permission for operations: Write from hosts: * 
ser:CN=myserverC,OU=NBCUniversal,O=NBCUniversal,L=NY,ST=NY,C=US has Allow permission for operations: Write from hosts: * 

Les fonctions-producteur kafka-console normalement via SSL:

[[email protected] confluent-3.0.1]$ bin/kafka-console-producer --broker-list myserverA:9093 --topic ssl-test --producer.config /kafka/data/client/ssl/client.properties 
j 
k 
<Ctrl-D> 
+0

Pour [la documentation] (http://docs.confluent.io/current/kafka/authorization.html#common-cases), pour consommer vous avez besoin d'un accès READ sur le sujet * et le groupe *. Bien que vous ayez indiqué les listes de contrôle d'accès pour le sujet dans votre message, vous n'avez pas indiqué s'il existe des listes de contrôle d'accès pour le groupe de consommateurs. –

+0

Par défaut, les noms d'utilisateur sont des noms SSL * sans * espaces. Vous pouvez personnaliser cela cependant, voir http://docs.confluent.io/current/kafka/authorization.html#further-configuration –

+0

Salut @tombentley, excellente suggestion. Je crois comprendre que l'argument --new-consumer a automatiquement créé le groupe et accordé l'accès. Cependant, j'ai ajouté group.id = ssl-test-group à mon client.propriétés et inclus le CERT client dans un groupe ACL: – RSmith

Répondre

0

Selon the documentation le consommateur a besoin à la fois lire et déclinent sur le sujet, ainsi que les groupes de consommateurs qui ont besoin LIRE. L'option --consumer peut être utilisée comme une commodité pour régler tous ces éléments comme une seule fois; en utilisant leur exemple:

bin/kafka-acls.sh --authorizer-properties zookeeper.connect=localhost:2181 \ 
    --add \ 
    --allow-principal User:Bob \ 
    --consumer \ 
    --topic Test-topic \ 
    --group Group-1 
0

Il y avait plusieurs problèmes dans ma configuration Kafka SSL. Cependant, l'erreur explicite "WARN Tenter d'extraire les offsets pour la partition ssl-test-0 a échoué ..." lors de l'exécution de kafka-console-consumer était dû au fait que le certificat client n'était pas inclus dans le fichier de clés certifiées pour le noeud kafka B et