Autenticación de credenciales de inicio de sesión con AWS Secrets Manager - Transmisión gestionadada de Amazon para Apache Kafka

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Autenticación de credenciales de inicio de sesión con AWS Secrets Manager

Puede controlar el acceso a sus clústeres de Amazon MSK mediante credenciales de inicio de sesión que se almacenan y protegen mediante AWS Secrets Manager. El almacenamiento de las credenciales de usuario en Secrets Manager reduce la sobrecarga de la autenticación de clústeres, como la auditoría, la actualización y la rotación de credenciales. Secrets Manager también le permite compartir las credenciales de usuario entre clústeres.

Funcionamiento

Las autenticación de credenciales de inicio de sesión de Amazon MSK usa la autenticación SASL/SCRAM (capa de seguridad y autenticación simple/mecanismo de autenticación de respuesta por desafío saltado). A fin de configurar la autenticación con credenciales de inicio de sesión para un clúster, debe crear un recurso de secreto en AWS Secrets Manager y asociar las credenciales de inicio de sesión a ese secreto.

SASL/SCRAM se define en RFC 5802. SCRAM utiliza algoritmos hash seguros y no transmite credenciales de inicio de sesión de texto sin formato entre el cliente y el servidor.

nota

Al configurar la autenticación SASL/SCRAM para su clúster, Amazon MSK activa el cifrado TLS para todo el tráfico entre clientes y agentes.

Configuración de la autenticación SASL/SCRAM para un clúster de Amazon MSK

Para configurar un secreto en AWS Secrets Manager, sigue el tutorial Cómo crear y recuperar un secreto en la Guía del usuario de AWS Secrets Manager.

Tenga en cuenta los siguientes requisitos al crear un secreto para un clúster de Amazon MSK:

  • En el tipo de secreto, elija Otro tipo de secretos (por ejemplo, clave de API).

  • El nombre secreto debe comenzar con el prefijo AmazonMSK_.

  • Debes usar una AWS KMS clave personalizada existente o crear una nueva AWS KMS clave personalizada para tu secreto. Secrets Manager usa la AWS KMS clave predeterminada para un secreto de forma predeterminada.

    importante

    Un secreto creado con la AWS KMS clave predeterminada no se puede usar con un clúster de Amazon MSK.

  • Los datos de sus credenciales de inicio de sesión deben tener el siguiente formato para poder ingresar pares clave-valor mediante la opción Texto no cifrado.

    { "username": "alice", "password": "alice-secret" }
  • Registre el valor del ARN (nombre del recurso de Amazon) de su secreto.

  • importante

    No puede asociar un secreto de Secrets Manager a un clúster que supere los límites descritos en Dimensionamiento correcto del clúster: número de particiones por agente.

  • Si utiliza el AWS CLI para crear el secreto, especifique un ID de clave o un ARN para el kms-key-id parámetro. No especifique un alias.

  • Para asociar el secreto a su clúster, utilice la consola de Amazon MSK o la BatchAssociateScramSecretoperación.

    importante

    Al asociar un secreto a un clúster, Amazon MSK asocia una política de recursos al secreto que permite al clúster acceder a los valores de los secretos que ha definido y leerlos. No debe modificar esta política de recursos. Si lo hace, puede impedir que el clúster acceda a su secreto.

    El siguiente ejemplo de entrada JSON para la operación BatchAssociateScramSecret asocia un secreto a un clúster:

    { "clusterArn" : "arn:aws:kafka:us-west-2:0123456789019:cluster/SalesCluster/abcd1234-abcd-cafe-abab-9876543210ab-4", "secretArnList": [ "arn:aws:secretsmanager:us-west-2:0123456789019:secret:AmazonMSK_MyClusterSecret" ] }

Conexión a un clúster con credenciales de inicio de sesión

Después de crear un secreto y asociarlo al clúster, puede conectar el cliente con el clúster. Los siguientes pasos de ejemplo muestran cómo conectar un cliente a un clúster que utiliza la autenticación SASL/SCRAM y cómo generar y consumir a partir de un tema de ejemplo.

  1. Ejecute el siguiente comando en una máquina que tenga la AWS CLI instalada y sustituya ClusterArn por el ARN de su clúster.

    aws kafka get-bootstrap-brokers --cluster-arn clusterARN
  2. Para crear un tema de ejemplo, ejecute el siguiente comando y sustituya BootstrapServerString por uno de los puntos finales del broker que obtuvo en el paso anterior.

    <path-to-your-kafka-installation>/bin/kafka-topics.sh --create --bootstrap-server BootstrapServerString --replication-factor 3 --partitions 1 --topic ExampleTopicName
  3. En su equipo cliente, cree un archivo de configuración JAAS que contenga las credenciales de usuario almacenadas en su secreto. Por ejemplo, para el usuario alice, cree un archivo llamado users_jaas.conf con el siguiente contenido.

    KafkaClient { org.apache.kafka.common.security.scram.ScramLoginModule required username="alice" password="alice-secret"; };
  4. Utilice el siguiente comando para exportar el archivo de configuración de JAAS como parámetro de entorno KAFKA_OPTS.

    export KAFKA_OPTS=-Djava.security.auth.login.config=<path-to-jaas-file>/users_jaas.conf
  5. Cree un archivo denominado kafka.client.truststore.jks en el directorio ./tmp.

  6. Utilice el siguiente comando para copiar el archivo del almacén de claves JDK de su carpeta cacerts de JVM al archivo kafka.client.truststore.jks que creó en el paso anterior. Sustituya JDKFolder por el nombre de la carpeta JDK de la instancia. Por ejemplo, su carpeta JDK podría llamarse java-1.8.0-openjdk-1.8.0.201.b09-0.amzn2.x86_64.

    cp /usr/lib/jvm/JDKFolder/jre/lib/security/cacerts /tmp/kafka.client.truststore.jks
  7. En el directorio bin de su instalación de Apache Kafka, cree un archivo de propiedades del cliente llamado client_sasl.properties con el siguiente contenido. Este archivo define el mecanismo y el protocolo SASL.

    security.protocol=SASL_SSL sasl.mechanism=SCRAM-SHA-512 ssl.truststore.location=<path-to-keystore-file>/kafka.client.truststore.jks
  8. Recupere la cadena de agentes de arranque con el siguiente comando. ClusterArnSustitúyalo por el nombre de recurso de Amazon (ARN) del clúster:

    aws kafka get-bootstrap-brokers --cluster-arn ClusterArn

    En el resultado JSON del comando, guarde el valor asociado a la cadena denominada BootstrapBrokerStringSaslScram.

  9. Para continuar con el tema de ejemplo que ha creado, ejecute el siguiente comando en su equipo cliente. BootstrapBrokerStringSaslSustituya Scram por el valor que recuperó en el paso anterior.

    <path-to-your-kafka-installation>/bin/kafka-console-producer.sh --broker-list BootstrapBrokerStringSaslScram --topic ExampleTopicName --producer.config client_sasl.properties
  10. Para continuar con el tema que ha creado, ejecute el siguiente comando en el equipo cliente. BootstrapBrokerStringSaslSustituya Scram por el valor que obtuvo anteriormente.

    <path-to-your-kafka-installation>/bin/kafka-console-consumer.sh --bootstrap-server BootstrapBrokerStringSaslScram --topic ExampleTopicName --from-beginning --consumer.config client_sasl.properties

Uso de los usuarios

Creación de usuarios: los usuarios se crean en su secreto como pares clave-valor. Al utilizar la opción Texto no cifrado de la consola de Secrets Manager, debe especificar los datos de las credenciales de inicio de sesión en el siguiente formato:

{ "username": "alice", "password": "alice-secret" }

Revocar el acceso de un usuario: para revocar las credenciales de un usuario para acceder a un clúster, le recomendamos que primero elimine o aplique una ACL en el clúster y, a continuación, desasocie el secreto. Esto se debe a lo siguiente:

  • La eliminación de un usuario no cierra las conexiones existentes.

  • Los cambios realizados en el secreto tardan hasta 10 minutos en propagarse.

Para obtener más información acerca del uso de ACL con Amazon MSK, consulte ACL de Apache Kafka.

En el caso de los clústeres que utilizan el ZooKeeper modo, se recomienda restringir el acceso a ZooKeeper los nodos para evitar que los usuarios modifiquen las ACL. Para obtener más información, consulte Controlar el acceso a Apache ZooKeeper.

Limitaciones

Cuando utilice secretos SCRAM, tenga en cuenta las siguientes limitaciones:

  • Amazon MSK solo admite la autenticación SCRAM-SHA-512.

  • Un clúster de Amazon MSK puede tener hasta 1000 usuarios.

  • Debes usar un AWS KMS key con tu secreto. No puede usar un secreto que utilice la clave de cifrado predeterminada de Secrets Manager con Amazon MSK. Para obtener información sobre cómo crear una clave de KMS, consulte Creating symmetric encryption KMS keys.

  • No puede utilizar una clave de KMS asimétrica con Secrets Manager.

  • Puedes asociar hasta 10 secretos a un clúster a la vez mediante la BatchAssociateScramSecretoperación.

  • El nombre de los secretos asociados a un clúster de Amazon MSK debe tener el prefijo AmazonMSK_.

  • Los secretos asociados a un clúster de Amazon MSK deben estar en la misma cuenta y AWS región de Amazon Web Services que el clúster.