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>
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. –
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 –
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