

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.

# Configurar la SASL/SCRAM autenticación para un clúster de Amazon MSK
<a name="msk-password-tutorial"></a>

Para configurar un secreto en AWS Secrets Manager, sigue el tutorial [Cómo crear y recuperar un secreto](https://docs.aws.amazon.com/secretsmanager/latest/userguide/tutorials_basic.html) en la [Guía del usuario de AWS Secrets Manager](https://docs.aws.amazon.com/secretsmanager/latest/userguide/intro.html).

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\$1**.
+ 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 [Dimensione correctamente el clúster: número de particiones por agente Standard](bestpractices.md#partitions-per-broker).
+ 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 [ BatchAssociateScramSecret](https://docs.aws.amazon.com/msk/1.0/apireference/clusters-clusterarn-scram-secrets.html#BatchAssociateScramSecret)operació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. Si realiza cambios en la política del recurso de Secretos o en la clave de KMS utilizada para el cifrado del secreto, asegúrese de volver a asociar los secretos al clúster de MSK. Esto garantiza que el clúster mantenga el acceso al 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
<a name="msk-password-tutorial-connect"></a>

Después de crear un secreto y asociarlo al clúster, puede conectar el cliente con el clúster. El siguiente procedimiento muestra cómo conectar un cliente a un clúster que utiliza la SASL/SCRAM autenticación. También muestra cómo producir y consumir datos desde un tema de ejemplo.

**Topics**
+ [Conectar un cliente a un clúster mediante SASL/SCRAM autenticación](#w2aab9c13c29c17c13c11b9b7)
+ [Solución de problemas de conexión](#msk-password-tutorial-connect-troubleshooting)

## Conectar un cliente a un clúster mediante SASL/SCRAM autenticación
<a name="w2aab9c13c29c17c13c11b9b7"></a>

1. Ejecute el siguiente comando en una máquina que AWS CLI esté instalada. *clusterARN*Sustitúyalo por el ARN de su clúster.

   ```
   aws kafka get-bootstrap-brokers --cluster-arn clusterARN
   ```

   Del resultado JSON de este comando, guarde el valor asociado a la cadena llamada `BootstrapBrokerStringSaslScram`. Utilizará este valor en pasos posteriores.

1. 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";
   };
   ```

1. 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
   ```

1. Cree un archivo denominado `kafka.client.truststore.jks` en el directorio `/tmp`.

1. (Opcional) Utilice el siguiente comando para copiar el archivo del almacén de claves del JDK desde la carpeta `cacerts` del JVM al archivo `kafka.client.truststore.jks` que creó en el paso anterior. *JDKFolder*Sustitúyalo 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/lib/security/cacerts /tmp/kafka.client.truststore.jks
   ```

1. 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
   ```

1. Para crear un tema de ejemplo, ejecute el siguiente comando. *BootstrapBrokerStringSaslScram*Sustitúyala por la cadena del broker bootstrap que obtuviste en el paso 1 de este tema.

   ```
   <path-to-your-kafka-installation>/bin/kafka-topics.sh --create --bootstrap-server BootstrapBrokerStringSaslScram --command-config <path-to-client-properties>/client_sasl.properties --replication-factor 3 --partitions 1 --topic ExampleTopicName
   ```

1. Para continuar con el tema de ejemplo que ha creado, ejecute el siguiente comando en su equipo cliente. *BootstrapBrokerStringSaslScram*Sustitúyala por la cadena bootstrap broker que recuperaste en el paso 1 de este tema.

   ```
   <path-to-your-kafka-installation>/bin/kafka-console-producer.sh --broker-list BootstrapBrokerStringSaslScram --topic ExampleTopicName --producer.config client_sasl.properties
   ```

1. Para continuar con el tema que ha creado, ejecute el siguiente comando en el equipo cliente. *BootstrapBrokerStringSaslScram*Sustitúyala por la cadena bootstrap broker que obtuviste en el paso 1 de este tema.

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

## Solución de problemas de conexión
<a name="msk-password-tutorial-connect-troubleshooting"></a>

Cuando ejecute comandos de cliente de Kafka, es posible que encuentre errores de memoria del montón de Java, especialmente al trabajar con temas o conjuntos de datos de gran tamaño. Estos errores se producen porque las herramientas de Kafka se ejecutan como aplicaciones Java con configuraciones de memoria predeterminadas que pueden ser insuficientes para la carga de trabajo.

Para resolver los errores `Out of Memory Java Heap`, puede aumentar el tamaño del montón de Java mediante la modificación de la variable de entorno `KAFKA_OPTS` para incluir la configuración de memoria.

El siguiente ejemplo establece el tamaño máximo del montón en 1 GB (`-Xmx1G`). Puede ajustar este valor en función de la memoria del sistema disponible y de los requisitos.

```
export KAFKA_OPTS="-Djava.security.auth.login.config=<path-to-jaas-file>/users_jaas.conf -Xmx1G"
```

Para consumir temas de gran tamaño, considere el uso de parámetros basados en tiempo o en desplazamientos, en lugar de `--from-beginning`, con el fin de limitar el uso de memoria.

```
<path-to-your-kafka-installation>/bin/kafka-console-consumer.sh --bootstrap-server BootstrapBrokerStringSaslScram --topic ExampleTopicName --max-messages 1000 --consumer.config client_sasl.properties
```