

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
<a name="msk-password"></a>

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.

Después de asociar un secreto a un clúster de MSK, MSK sincroniza periódicamente los datos de credenciales.

**Topics**
+ [Funcionamiento de la autenticación de las credenciales de inicio de sesión](msk-password-howitworks.md)
+ [Configurar la SASL/SCRAM autenticación para un clúster de Amazon MSK](msk-password-tutorial.md)
+ [Uso de los usuarios](msk-password-users.md)
+ [Limitaciones al momento de utilizar los secretos SCRAM](msk-password-limitations.md)

# Funcionamiento de la autenticación de las credenciales de inicio de sesión
<a name="msk-password-howitworks"></a>

La autenticación con credenciales de inicio de sesión para Amazon MSK utiliza la autenticación SASL/SCRAM (Simple Authentication and Security Layer/ Salted Challenge Response Mechanism). 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](https://docs.aws.amazon.com//secretsmanager/?id=docs_gateway) y asociar las credenciales de inicio de sesión a ese secreto. 

SASL/SCRAM se define en [RFC 5802](https://tools.ietf.org/html/rfc5802). 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 SASL/SCRAM autenticación para el clúster, Amazon MSK activa el cifrado TLS para todo el tráfico entre clientes y agentes.

# 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
```

# Uso de los usuarios
<a name="msk-password-users"></a>

**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 [Apache Kafka ACLs](msk-acls.md).

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 los modifiquen ACLs. Para obtener más información, consulte [Controle el acceso a ZooKeeper los nodos de Apache en su clúster de Amazon MSK](zookeeper-security.md).

# Limitaciones al momento de utilizar los secretos SCRAM
<a name="msk-password-limitations"></a>

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](https://docs.aws.amazon.com/kms/latest/developerguide/create-keys.html#create-symmetric-cmk).
+ 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 [ BatchAssociateScramSecret](https://docs.aws.amazon.com/msk/1.0/apireference/clusters-clusterarn-scram-secrets.html#BatchAssociateScramSecret)operación.
+ El nombre de los secretos asociados a un clúster de Amazon MSK debe tener el prefijo **AmazonMSK\$1**.
+ 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.