Autenticación TLS mutua - 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 TLS mutua

Puede habilitar la autenticación de clientes con TLS para las conexiones desde sus aplicaciones a sus agentes de Amazon MSK. Para usar la autenticación del cliente, necesita una Autoridad de certificación privada de AWS. Autoridad de certificación privada de AWS Puede estar en la Cuenta de AWS misma cuenta que su clúster o en una cuenta diferente. Para obtener información acerca Autoridad de certificación privada de AWS de s, consulte Creación y administración de un Autoridad de certificación privada de AWS.

nota

La autenticación de TLS no está disponible actualmente en las regiones de Pekín y Ningxia.

Amazon MSK no admite listas de revocación de certificados (CRL). Para controlar el acceso a los temas de su clúster o bloquear los certificados comprometidos, utilice las ACL y los grupos de AWS seguridad de Apache Kafka. Para obtener más información sobre cómo utilizar las ACL de Apache Kafka, consulte ACL de Apache Kafka.

Creación de un clúster que admita la autenticación del cliente

Este procedimiento le muestra cómo habilitar la autenticación de clientes mediante un. Autoridad de certificación privada de AWS

nota

Recomendamos encarecidamente utilizar un TLS independiente Autoridad de certificación privada de AWS para cada clúster de MSK cuando utilice un TLS mutuo para controlar el acceso. De este modo, se asegurará de que los certificados TLS firmados por las PCA solo se autentiquen con un único clúster de MSK.

  1. Cree un archivo denominado clientauthinfo.json con el siguiente contenido. Sustituya Private-CA-ARN (ARN-CA-privado) por el ARN de su PCA.

    { "Tls": { "CertificateAuthorityArnList": ["Private-CA-ARN"] } }
  2. Cree un archivo llamado brokernodegroupinfo.json tal y como se describe en Crear un clúster mediante el AWS CLI.

  3. La autenticación del cliente precisa que también habilite el cifrado en tránsito entre clientes y agentes. Cree un archivo denominado encryptioninfo.json con el siguiente contenido. Sustituya KMS-Key-ARN (ARN-clave-KMS) por el ARN de su clave de KMS. Puede establecer ClientBroker en TLS o TLS_PLAINTEXT.

    { "EncryptionAtRest": { "DataVolumeKMSKeyId": "KMS-Key-ARN" }, "EncryptionInTransit": { "InCluster": true, "ClientBroker": "TLS" } }

    Para obtener más información sobre el cifrado, consulte Cifrado de Amazon MSK.

  4. En una máquina en la que lo tenga AWS CLI instalado, ejecute el siguiente comando para crear un clúster con la autenticación y el cifrado en tránsito habilitados. Guarde el ARN del clúster proporcionado en la respuesta.

    aws kafka create-cluster --cluster-name "AuthenticationTest" --broker-node-group-info file://brokernodegroupinfo.json --encryption-info file://encryptioninfo.json --client-authentication file://clientauthinfo.json --kafka-version "{YOUR KAFKA VERSION}" --number-of-broker-nodes 3

Configuración de un cliente para utilizar la autenticación

  1. Cree una instancia de Amazon EC2 para utilizarla como un equipo cliente. Para simplificar, cree esta instancia en la misma VPC que utilizó para el clúster. Consulte Paso 3: creación de un equipo cliente para ver un ejemplo sobre cómo crear dicho equipo cliente.

  2. Cree un tema. Para ver un ejemplo, consulte las instrucciones en Paso 4: creación de un tema.

  3. En una máquina en la que lo tenga AWS CLI instalado, ejecute el siguiente comando para obtener los agentes de arranque del clúster. Sustituya Cluster-ARN (ARN-clúster) por el ARN de su clúster.

    aws kafka get-bootstrap-brokers --cluster-arn Cluster-ARN

    Guarde la cadena asociada a BootstrapBrokerStringTls en la respuesta.

  4. En la máquina de su cliente, ejecute el siguiente comando para utilizar el almacén de confianza de JVM para crear su almacén de confianza del cliente. Si su ruta de JVM es diferente, ajuste el comando en consecuencia.

    cp /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.201.b09-0.amzn2.x86_64/jre/lib/security/cacerts kafka.client.truststore.jks
  5. En la máquina de su cliente, ejecute el siguiente comando para crear una clave privada para su cliente. Sustituya Distinguished-Name (Nombre-distinguido), Example-Alias (Alias-ejemplo), Your-Store-Pass (Su-Acceso-Almacenamiento) y Your-Key-Pass (Su-Acceso-Clave) por las cadenas de su elección.

    keytool -genkey -keystore kafka.client.keystore.jks -validity 300 -storepass Your-Store-Pass -keypass Your-Key-Pass -dname "CN=Distinguished-Name" -alias Example-Alias -storetype pkcs12
  6. En la máquina de su cliente, ejecute el siguiente comando para crear una solicitud de certificado con la clave privada que creo en el paso anterior.

    keytool -keystore kafka.client.keystore.jks -certreq -file client-cert-sign-request -alias Example-Alias -storepass Your-Store-Pass -keypass Your-Key-Pass
  7. Abra el archivo client-cert-sign-request y asegúrese de que comience por -----BEGIN CERTIFICATE REQUEST----- y termine por -----END CERTIFICATE REQUEST-----. Si comienza por -----BEGIN NEW CERTIFICATE REQUEST-----, elimine la palabra NEW (y el espacio único que le sigue) desde el comienzo hasta el final del archivo.

  8. En una máquina en la que lo tenga AWS CLI instalado, ejecute el siguiente comando para firmar la solicitud de certificado. Sustituya Private-CA-ARN (ARN-CA-privado) por el ARN de su PCA. Puede cambiar el valor de la validez si lo desea. Aquí utilizamos 300 como ejemplo.

    aws acm-pca issue-certificate --certificate-authority-arn Private-CA-ARN --csr fileb://client-cert-sign-request --signing-algorithm "SHA256WITHRSA" --validity Value=300,Type="DAYS"

    Guarde el ARN del certificado proporcionado en la respuesta.

    nota

    Para recuperar el certificado de cliente, utilice el comando acm-pca get-certificate y especifique el ARN del certificado. Para obtener más información, consulte get-certificate en la Referencia de comandos de la AWS CLI .

  9. Ejecute el siguiente comando para obtener el certificado Autoridad de certificación privada de AWS firmado por usted. Sustituya Certificate-ARN (ARN-Certificado) por el ARN que obtuvo de la respuesta al comando anterior.

    aws acm-pca get-certificate --certificate-authority-arn Private-CA-ARN --certificate-arn Certificate-ARN
  10. A partir del resultado de JSON de la ejecución del comando anterior, copie las cadenas asociadas a Certificate y CertificateChain. Pegue estas dos cadenas en un nuevo archivo llamado signed-certificate-from-acm. Pegue la siguiente cadena asociada a Certificate primero, seguido de la cadena asociada a CertificateChain. Sustituya los caracteres \n por las nuevas líneas. La siguiente es la estructura del archivo después de pegarle el certificado y la cadena del certificado.

    -----BEGIN CERTIFICATE----- ... -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- ... -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- ... -----END CERTIFICATE-----
  11. Ejecute el siguiente comando en el equipo cliente para agregar este certificado a su almacén de claves para que puede presentarlo al hablar con los agentes de MSK.

    keytool -keystore kafka.client.keystore.jks -import -file signed-certificate-from-acm -alias Example-Alias -storepass Your-Store-Pass -keypass Your-Key-Pass
  12. Cree un archivo denominado client.properties con el siguiente contenido. Ajuste las ubicaciones del almacén de confianza y de claves a las rutas en las que guardó kafka.client.truststore.jks. Sustituya los marcadores de posición {YOUR KAFKA VERSION} por su versión de cliente de Kafka.

    security.protocol=SSL ssl.truststore.location=/tmp/kafka_2.12-{YOUR KAFKA VERSION}/kafka.client.truststore.jks ssl.keystore.location=/tmp/kafka_2.12-{YOUR KAFKA VERSION}/kafka.client.keystore.jks ssl.keystore.password=Your-Store-Pass ssl.key.password=Your-Key-Pass

Producción y consumo de mensajes mediante la autenticación

  1. Ejecute el siguiente comando para crear un tema. El archivo denominado client.properties es el que creó en el procedimiento anterior.

    <path-to-your-kafka-installation>/bin/kafka-topics.sh --create --bootstrap-server BootstrapBroker-String --replication-factor 3 --partitions 1 --topic ExampleTopic --command-config client.properties
  2. Ejecute el siguiente comando para iniciar un productor de la consola. El archivo denominado client.properties es el que creó en el procedimiento anterior.

    <path-to-your-kafka-installation>/bin/kafka-console-producer.sh --bootstrap-server BootstrapBroker-String --topic ExampleTopic --producer.config client.properties
  3. En una nueva ventana de comandos en la máquina de su cliente, ejecute el siguiente comando para iniciar un consumidor de la consola.

    <path-to-your-kafka-installation>/bin/kafka-console-consumer.sh --bootstrap-server BootstrapBroker-String --topic ExampleTopic --consumer.config client.properties
  4. Escriba mensajes en la ventana del productor y observe cómo aparecen en la ventana del consumidor.