Skip to content

Latest commit

 

History

History
150 lines (111 loc) · 4.15 KB

File metadata and controls

150 lines (111 loc) · 4.15 KB

Listener SCRAM — mot de passe (port 9094)

Authentification SCRAM-SHA-512 (login / mot de passe) sur TLS (SASL_SSL). Les ACLs utilisent le principal User:<nom-du-KafkaUser>.

Voir aussi : Authentification et ACLs · Listener mTLS

Bootstrap

boa-lab-kafka-bootstrap.kafka.svc:9094

1. Créer l’utilisateur et les ACLs

export KUBECONFIG=/Users/modoulobolysow/Downloads/lab-boa-kubeconfig.yaml

kubectl apply -f manifests/examples/kafka-user-scram.yaml
kubectl wait kafkauser/app-scram -n kafka --for=condition=Ready --timeout=120s

2. Récupérer le mot de passe

Strimzi stocke le mot de passe dans le secret app-scram :

kubectl get secret app-scram -n kafka \
  -o jsonpath='{.data.password}' | base64 -d && echo

Le username SASL est le nom du KafkaUser : app-scram.

CA du cluster (TLS)

Même CA que pour mTLS :

kubectl get secret boa-lab-cluster-ca-cert -n kafka \
  -o jsonpath='{.data.ca\.crt}' | base64 -d > ca.crt

3. Configuration client

Java (properties)

bootstrap.servers=boa-lab-kafka-bootstrap.kafka.svc:9094
security.protocol=SASL_SSL
sasl.mechanism=SCRAM-SHA-512
sasl.jaas.config=org.apache.kafka.common.security.scram.ScramLoginModule required \
  username="app-scram" \
  password="<MOT_DE_PASSE>";
ssl.truststore.type=PEM
ssl.truststore.location=ca.crt

Python (confluent-kafka)

conf = {
    "bootstrap.servers": "boa-lab-kafka-bootstrap.kafka.svc:9094",
    "security.protocol": "SASL_SSL",
    "sasl.mechanisms": "SCRAM-SHA-512",
    "sasl.username": "app-scram",
    "sasl.password": "<MOT_DE_PASSE>",
    "ssl.ca.location": "ca.crt",
}

Variables d’environnement (générique)

export KAFKA_BOOTSTRAP_SERVERS=boa-lab-kafka-bootstrap.kafka.svc:9094
export KAFKA_SECURITY_PROTOCOL=SASL_SSL
export KAFKA_SASL_MECHANISM=SCRAM-SHA-512
export KAFKA_SASL_USERNAME=app-scram
export KAFKA_SASL_PASSWORD="$(kubectl get secret app-scram -n kafka -o jsonpath='{.data.password}' | base64 -d)"
export KAFKA_SSL_CA_LOCATION=ca.crt

4. Tester la connexion

Fichier client-scram.properties :

security.protocol=SASL_SSL
sasl.mechanism=SCRAM-SHA-512
sasl.jaas.config=org.apache.kafka.common.security.scram.ScramLoginModule required username="app-scram" password="<MOT_DE_PASSE>";
ssl.truststore.type=PEM
ssl.truststore.location=/tmp/ca.crt
export KUBECONFIG=/Users/modoulobolysow/Downloads/lab-boa-kubeconfig.yaml

kubectl cp ca.crt kafka/boa-lab-boa-lab-brokers-0:/tmp/ca.crt

kubectl exec -n kafka boa-lab-boa-lab-brokers-0 -- \
  bin/kafka-topics.sh \
  --bootstrap-server boa-lab-kafka-bootstrap.kafka.svc:9094 \
  --command-config /tmp/client-scram.properties \
  --list

5. ACLs (rappel)

Principal Kafka : User:app-scram. Voir manifests/examples/kafka-user-scram.yaml.

Exemple d’ACL supplémentaire (topic préfixe payments-) :

    acls:
      - resource:
          type: topic
          name: payments-
          patternType: prefix
        operations:
          - Read
          - Write
          - Describe

6. Rotation du mot de passe

Regénérer le secret utilisateur via Strimzi :

# Supprimer et recréer le KafkaUser, ou annoter pour forcer selon votre procédure interne
kubectl delete secret app-scram -n kafka  # si recréation contrôlée
kubectl apply -f manifests/examples/kafka-user-scram.yaml

Les clients doivent prendre le nouveau mot de passe depuis le secret Kubernetes.

mTLS vs SCRAM — quand choisir ?

Critère mTLS (9093) SCRAM (9094)
Identité Certificat X.509 Login + mot de passe
Rotation Auto (Strimzi) Mot de passe / secret K8s
Intégration apps Très bien en K8s (mount secret) Simple pour apps classiques
Risque Gestion des clés privées Fuites de mot de passe

Dépannage

Erreur Piste
SaslAuthenticationException Mauvais user/password ou listener 9092 au lieu de 9094
SSL handshake failed ca.crt manquant ou mauvais port
Authorization failed ACL — principal User:app-scram