Sécurité par défaut

Dans un cluster Kafka par défaut il n’y a aucune sécurité :

  • Tous les clients ont accès au cluster Kafka
  • Les clients peuvent publier/supprimer et consommer les données d’un topic
  • Toutes les données sont visibles sur le réseau

Kafka Chiffremment

La sécurisation, demande environ 30% de performances

Authentification dans Kafka

  • SSL Authentication : l’authentification des clients à Kafka utilisent des certificats SSL
  • SASL/PLAINTEXT:
    • L’authentification cliente utilise un user/password
    • Il faut activer le chiffrement SSL sur le Broker
    • Changer le password requière un reboot du broker
  • SASL/SCRAM :
    • User/Password avec un challenge (salt)
    • Il faut activer le chiffrement SSL sur le Broker
    • L’authentification des données est dans Zookeeper
  • SASL/GSSAPI (Kerberos):
    • Kerberos: comme avec un Microsoft AD
    • Trés sécurisé et adapté à l’entreprise
  • SASL/OAuthBearer: utilisation de jetons OAUTH2 pour l’authentification

SSL

1-way Authentication (Encryption)

  • C’est uniquement le client qui valide le serveur, le serveur ne vérifie pas le client
  • Le serveur partage son certificat public avec les clients

2-way Authentification (Authentification)

  • Le client a aussi un certificat SSL qu’il utilise pour s’authentifier
  • Les 2 partagent leur certificat public

Kafka gère les 2 cas.

Key Store: fait un CSR à la CA qui lui renvoie le certificat signé pour le broker.
Trust Store: Trust la/les CA Root, le broker aura un trust store.

Kafka SSL/TLS

SASL-SSL

C’est une authentification, le client fournisse son identité au cluster Kafka, similaire à un user/password.
Kafka SASL-SSL

Authorisation dans Kafka

Aprés avoir authentifier un client, il faut ensuite lui donner des autorisations, cela se fait au travers des ACL.

Kafka Authorisation

ACL

Qui fait quoi sur quoi, une ACL contient 4 parties:

  • Un principal
  • Une opération
  • Une permission
  • Une ressource

User:Bob has Allow permission for Write to Topic:Finance

Un Deny est supérieure à un Allow (en cas “d’overlap” de droit).

Les ACL sont stockées dans Zookeeper puis dans la mémoire cache de chaque Broker pour accélérer les requêtes lors des demandes d’autorisation.

Attention au : allow.everyone.if.no.acl.found=true