Skip to main content

Command Palette

Search for a command to run...

Prerequisitos para habilitar MultiVPC sobre MSK

Updated
3 min read

El objetivo del presente documento es dejar el clúster listo (a nivel de: auth, ACLs/policies, red y pruebas) antes de habilitar Multi-VPC, de modo que los clientes existentes consuman y produzcan sin TopicAuthorizationException ni errores de enrutamiento.

El esquema de autenticación por cliente en el MSK de las APP permite SCRAM (SASL/SCRAM), que tiene control por ACLs de Kafka. Y está configurado actualmente como:

allow.everyone.if.no.acl.found=true (permisivo);

Esta valor está seteado en parameter store de la cuenta Shared (msk-{env})

Se cambiará a false una vez que se tenga las ACLs completas.

Con SCRAM, el clúster tiene un usuario con privilegios para gestionar ACLs (que se encuentra almacenado en un secret)


0 - Conectarse al clúster de MSK


1- Permisos de metadatos del clúster

./kafka-acls.sh --bootstrap-server "$KAFKA_BROKERS_SCRAM" \
  --add --allow-principal User:<user> \
  --operation Describe \
  --operation Create \
  --operation Alter \
  --operation AlterConfigs \
  --operation DescribeConfigs \
  --cluster \
  --command-config client.properties

Reemplazar user con el usuario asociado al clúster.


2- Dar permisos sobre tópicos que usará la app (prefijos o '*' )

./kafka-acls.sh --bootstrap-server "$KAFKA_BROKERS_SCRAM" \
  --add --allow-principal User:<user> \
  --operation Describe \
  --operation Read \
  --operation Alter \
  --operation Write \
  --operation DescribeConfigs \
  --topic "<prefijo-o-*>" \
  --resource-pattern-type literal \
  --command-config client.properties

Reemplazar user con el usuario asociado al clúster.


3- Consumer groups (prefijo o '*' )

./kafka-acls.sh --bootstrap-server "$KAFKA_BROKERS_SCRAM" \
  --add --allow-principal User:<user> \
  --operation Read --operation Describe \
  --group "<prefijo-o-*>" --resource-pattern-type literal \
  --command-config client.properties

Reemplazar user con el usuario asociado al clúster.


4- Dar permiso para crear tópicos por prefijo de topic:

./kafka-acls.sh ... --operation Create --topic <prefijo> --resource-pattern-type literal ...

No cambiar allow.everyone.if.no.acl.found=false hasta que estas ACLs estén aplicadas; de lo contrario, se puede bloquear.


5 - Red y requisitos de Multi-VPC
- Misma Región
- Mismo número de subredes ↔ clúster y mismos AZ IDs (no confundir con nombres de AZ).
- Un VPC Endpoint (Interface) por AZ cliente.
- SG/NACL permitiendo 9096 (SASL/SCRAM).


6- Pruebas “pre-Multi-VPC” (en la VPC del clúster)
- Listar/describe tópicos de destino con el usuario que usarán los clientes.
- Producir y consumir mensajes de prueba.


7- Activar Multi-VPC
- Cambiar el valor en el parameter store asociado

allow.everyone.if.no.acl.found=false(permisivo);

Y ejecutar el pipeline
- En caso de error: This server does not host this topic-partition, suele ser conectividad parcial hacia el líder; validar DNS/SG/NACL y usa client.dns.lookup=use_all_dns_ips.


8 - Observabilidad y troubleshooting
- Revisar los logs del MSK (CloudWatch Logs): buscar Session(User:...), Denied, TopicAuthorizationException.
- Filtrar en CloudWatch Logs Insights – en los log groups de las lambdas involucradas: error|exception|Authorization|Throttl|ConditionalCheckFailed|ValidationException.
- Revisar el estado de Event Source Mappings (list-event-source-mappings): Comprobar State (Active) y LastProcessingResult.


En caso los ACL no funcionen correctamente, seguir el siguiente paso para elminar y corregir los ACLs:

  • Después de eliminar los archivos "users_jaas.conf" y "client.properties", así como hacer unset de la variable KAFKA_OPTS, ejecutar el siguiente comando y limpiar las ACLs:

      ./kafka-acls.sh --authorizer-properties zookeeper.connect=$ZKSTRING --remove --allow-principal User:msk-prod  --operation Describe --cluster
    
  • Una vez limpias, agregamos las ACLs necesarias para poder modificar permisos posteriormente:

      ./kafka-acls.sh --bootstrap-server $BROKERSSCRAM --add --allow-principal User:msk-prod --operation Describe --operation Create --operation Alter --cluster --command-config client.properties
    

Referencias:
https://docs.aws.amazon.com/es_es/msk/latest/developerguide/msk-acls.html