Tengo problemas de autenticación y permisos cuando uso mi clúster de Amazon Managed Streaming para Apache Kafka (Amazon MSK) que tiene activada la autenticación SASL/SCRAM.
Resolución
Error «ClusterAuthorizationException» en los registros del agente
Cuando accedas a tu clúster de Amazon MSK, es posible que recibas el siguiente mensaje de error: «org.apache.kafka.common.errors.ClusterAuthorizationException: Request Request(processor=11, connectionId=INTERNAL_IP-INTERNAL_IP-0, session=Session(User:ANONYMOUS,/INTERNAL_IP), listenerName=ListenerName(REPLICATION_SECURE), securityProtocol=SSL, buffer=null) is not authorized.»
Aparece el error anterior cuando se cumplen las dos condiciones siguientes:
- Tu clúster de Amazon MSK tiene activada la autenticación SASL/SCRAM.
- Establece resourceType en CLUSTER y operation en CLUSTER_ACTION en las listas de control de acceso (ACL) de tu clúster.
El clúster de Amazon MSK no admite la configuración anterior porque la configuración impide la replicación interna de Apache Kafka. Cuando se cumplen las dos condiciones anteriores, la identidad de los agentes es ANÓNIMA para la comunicación entre agentes. Si necesitas que tu clúster admita estas ACL cuando utilizas la autenticación SASL/SCRAM, debes conceder los permisos para TODAS las operaciones al usuario ANÓNIMO. Esto evita la restricción de la replicación entre los agentes.
Ejecuta el siguiente comando para conceder este permiso al usuario ANÓNIMO:
./kafka-acls.sh --authorizer-properties
zookeeper.connect=example-ZookeeperConnectString --add --allow-principal
User:ANONYMOUS --operation ALL --cluster
Error de autenticación SASL
Si has cambiado el nombre de usuario o la contraseña de tu secreto de AWS Secrets Manager, pero las credenciales antiguas siguen activas, recibirás un error de autenticación.
Un secreto de AWS Secrets Manager solo se puede asociar a un usuario. Cuando el usuario ya no necesite acceder al clúster, debes disociar el secreto y actualizar la ACL.
Al actualizar el nombre de usuario del secreto, AWS Secrets Manager no disocia automáticamente el nombre de usuario anterior. Se recomienda crear un nuevo secreto para el nuevo usuario. Si necesitas usar el secreto anterior, primero disocia el secreto y, a continuación, actualiza las credenciales antes de volver a asociarlo. Para obtener más información, consulta Uso de los usuarios.
Los usuarios que no son administradores pueden crear y modificar las ACL sin autorización
De forma predeterminada, todos los usuarios tienen permiso para crear o modificar las ACL. Para evitar que los usuarios que no son administradores modifiquen la ACL a través de Apache ZooKeeper, coloca los nodos de ZooKeeper en un grupo de seguridad independiente. Además, asegúrate de que todos los comandos y conexiones de cliente de Apache Kafka se ejecuten a través de agentes de arranque en lugar de Apache ZooKeeper.
Nota: Puedes usar la cadena de arranque para realizar todas las operaciones de Apache Kafka.
Información relacionada
ACL de Apache Kafka
Secretos de Scram