

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.

# Tutorial: Externalización de la información confidencial con proveedores de configuración
<a name="msk-connect-config-provider"></a>

En este ejemplo, se muestra cómo externalizar la información confidencial de Amazon MSK Connect mediante un proveedor de configuración de código abierto. Un proveedor de configuración le permite especificar variables en lugar de texto sin formato en una configuración de conector o de trabajo, y los procesos de trabajo que se ejecutan en su conector resuelven estas variables en tiempo de ejecución. Esto evita que las credenciales y otros secretos se almacenen en texto sin formato. El proveedor de configuración del ejemplo admite la recuperación de los parámetros de configuración de AWS Secrets Manager, Amazon S3 y Systems Manager (SSM). En el [paso 2](#msk-connect-config-providers), puede ver cómo configurar el almacenamiento y la recuperación de información confidencial para el servicio que desee configurar.

## Consideraciones
<a name="msk-connect-config-providers-considerations"></a>

Tenga en cuenta lo siguiente al utilizar el proveedor de configuración de MSK con Amazon MSK Connect:
+ Al utilizar los proveedores de configuración, asigne los permisos adecuados al rol de ejecución del servicio de IAM.
+ Defina los proveedores de configuración en las configuraciones de proceso de trabajo y su implementación en la configuración del conector.
+ Los valores de configuración confidenciales pueden aparecer en los registros de los conectores si un complemento no los define como secretos. Kafka Connect trata los valores de configuración indefinidos de la misma manera que cualquier otro valor de texto sin formato. Para obtener más información, consulte [Impedir que los secretos aparezcan en los registros de los conectores](msk-connect-logging.md#msk-connect-logging-secrets).
+ De forma predeterminada, MSK Connect reinicia con frecuencia un conector cuando este utiliza un proveedor de configuración. Para desactivar este comportamiento de reinicio, puede establecer el valor de `config.action.reload` en `none` en la configuración del conector.

## Creación de un complemento personalizado y carga a S3
<a name="msk-connect-config-providers-create-custom-plugin"></a>

 Para crear un complemento personalizado, cree un archivo zip que contenga el conector y ejecute msk-config-provider los siguientes comandos en su máquina local.

**Para crear un complemento personalizado utilizando una ventana de terminal y Debezium como conector**

Utilice la AWS CLI para ejecutar comandos como superusuario con credenciales que le permitan acceder a su bucket de AWS S3. Para obtener información sobre la instalación y configuración de la AWS CLI, consulte [Introducción a la AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-getting-started.html) en la *Guía del AWS Command Line Interface usuario*. Para obtener información sobre el uso de la AWS CLI con Amazon S3, consulte [Uso de Amazon S3 con la AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-services-s3.html) en la *Guía del AWS Command Line Interface usuario*.

1. En una ventana de terminal, cree una carpeta denominada `custom-plugin` en su espacio de trabajo mediante el siguiente comando.

   ```
   mkdir custom-plugin && cd custom-plugin
   ```

1. Descargue la última versión estable del **complemento MySQL Connector** desde el [sitio de Debezium](https://debezium.io/releases/) mediante el siguiente comando.

   ```
   wget https://repo1.maven.org/maven2/io/debezium/debezium-connectormysql/
   2.2.0.Final/debezium-connector-mysql-2.2.0.Final-plugin.tar.gz
   ```

   Extraiga el archivo gzip descargado de la carpeta `custom-plugin` con el siguiente comando.

   ```
   tar xzf debezium-connector-mysql-2.2.0.Final-plugin.tar.gz
   ```

1. Descargue el [archivo zip del proveedor de configuración de MSK](https://github.com/aws-samples/msk-config-providers/releases/download/r0.4.0/msk-config-providers-0.4.0-with-dependencies.zip) con el siguiente comando.

   ```
   wget https://github.com/aws-samples/msk-config-providers/releases/download/r0.4.0/msk-config-providers-0.4.0-with-dependencies.zip
   ```

   Extraiga el archivo zip descargado de la carpeta `custom-plugin` con el siguiente comando.

   ```
   unzip msk-config-providers-0.4.0-with-dependencies.zip
   ```

1. Comprima el contenido del proveedor de configuración de MSK del paso anterior y el conector personalizado en un único archivo denominado `custom-plugin.zip`.

   ```
   zip -r ../custom-plugin.zip * 
   ```

1. Cargue el archivo en S3 para consultarlo más adelante.

   ```
   aws s3 cp ../custom-plugin.zip s3:<{{S3_URI_BUCKET_LOCATION}}>
   ```

1. En la consola de Amazon MSK, en la sección **MSK Connect**, elija **Custom Plugin**, elija **Create custom plugin** y explore el bucket **s3: < {{S3\_URI\_BUCKET\_LOCATION}} >** S3 para seleccionar el archivo ZIP del plugin personalizado que acaba de cargar.  
![El bucket de S3 muestra la carpeta debezium que contiene el archivo custom-plugin.zip con su tamaño y metadatos.](http://docs.aws.amazon.com/es_es/msk/latest/developerguide/images/s3-object-browser.png)

1. Introduzca **debezium-custom-plugin** para el nombre del complemento. De manera opcional, ingrese una descripción y elija **Crear complemento personalizado**.  
![Depósito de S3 que muestra la carpeta debezium con el archivo custom-plugin.zip, 55,2 MB, modificado el 15 de mayo de 2023.](http://docs.aws.amazon.com/es_es/msk/latest/developerguide/images/create-custom-plugin.png)

## Configuración de los parámetros y permisos para los distintos proveedores
<a name="msk-connect-config-providers"></a>

Puede configurar los valores de los parámetros en estos tres servicios:
+ Secrets Manager 
+ Almacén de parámetros de Systems Manager
+ S3 - Simple Storage Service

Elija una de las pestañas siguientes para consultar las instrucciones sobre la configuración de parámetros y los permisos pertinentes para ese servicio.

------
#### [ Configure in Secrets Manager ]

**Configuración de valores de parámetros en Secrets Manager**

1. Abra la [consola de Secrets Manager](https://console.aws.amazon.com/secretsmanager/).

1. Cree un nuevo secreto para almacenar sus credenciales o secretos. *Para obtener instrucciones, consulte [Crear un AWS Secrets Manager secreto](https://docs.aws.amazon.com/secretsmanager/latest/userguide/create_secret.html) en la Guía del usuario.AWS Secrets Manager *

1. Copie el ARN de su secreto.

1. Añada los permisos de Secrets Manager de la siguiente política de ejemplo al [rol de ejecución del servicio](https://docs.aws.amazon.com/msk/latest/developerguide/msk-connect-service-execution-role.html). Reemplace el ARN de ejemplo, `arn:aws:secretsmanager:{{us-east-1}}:{{123456789012}}:secret:{{MySecret-1234}}`, por el ARN del secreto.

1. Agregue la configuración de proceso de trabajo y las instrucciones del conector.  
****  

   ```
   {
           "Version":"2012-10-17",		 	 	 
           "Statement": [
               {
                   "Effect": "Allow",
                   "Action": [
                       "secretsmanager:GetResourcePolicy",
                       "secretsmanager:GetSecretValue",
                       "secretsmanager:DescribeSecret",
                       "secretsmanager:ListSecretVersionIds"
                   ],
                   "Resource": [
                   "arn:aws:secretsmanager:{{us-east-1}}:{{123456789012}}:secret:{{MySecret-1234}}"
                   ]
               }
           ]
       }
   ```

1. Para utilizar el proveedor de configuración Secrets Manager, copie las siguientes líneas de código en el cuadro de texto de configuración del proceso de trabajo del paso 3:

   ```
   # define name of config provider:
   
   config.providers = secretsmanager
   
   # provide implementation classes for secrets manager:
   
   config.providers.secretsmanager.class = com.amazonaws.kafka.config.providers.SecretsManagerConfigProvider
   
   # configure a config provider (if it needs additional initialization), for example you can provide a region where the secrets or parameters are located:
   
   config.providers.secretsmanager.param.region = us-east-1
   ```

1. Para el proveedor de configuración Secrets Manager, copie las siguientes líneas de código en la configuración del conector del paso 4.

   ```
   #Example implementation for secrets manager variable
   database.user=${secretsmanager:MSKAuroraDBCredentials:username}
   database.password=${secretsmanager:MSKAuroraDBCredentials:password}
   ```

También puede utilizar el paso anterior con más proveedores de configuración.

------
#### [ Configure in Systems Manager Parameter Store ]

**Configuración de valores de parámetros en el almacén de parámetros de Systems Manager**

1. Abra la consola de [Systems Manager](https://console.aws.amazon.com/systems-manager/).

1. En el panel de navegación, elija **Parameter Store (Almacén de parámetros)**.

1. Cree un parámetro nuevo para guardarlo en Systems Manager. Para obtener instrucciones, consulte [Crear un parámetro de Systems Manager (consola)](https://docs.aws.amazon.com/systems-manager/latest/userguide/parameter-create-console.html) en la Guía del AWS Systems Manager usuario.

1. Copie el ARN de su parámetro.

1. Añada los permisos de Systems Manager de la siguiente política de ejemplo al [rol de ejecución del servicio](https://docs.aws.amazon.com/msk/latest/developerguide/msk-connect-service-execution-role.html). {{<arn:aws:ssm:us-east-1:123456789000:parameter/MyParameterName>}}Sustitúyalo por el ARN de su parámetro.  
****  

   ```
   {
           "Version":"2012-10-17",		 	 	 
           "Statement": [
               {
                   "Sid": "VisualEditor0",
                   "Effect": "Allow",
                   "Action": [
                       "ssm:GetParameterHistory",
                       "ssm:GetParametersByPath",
                       "ssm:GetParameters",
                       "ssm:GetParameter"
                   ],
                   "Resource": "{{arn:aws:ssm:us-east-1:123456789000:parameter/MyParameterName}}"
               }
           ]
       }
   ```

1. Para utilizar el proveedor de configuración del almacén de parámetros, copie las siguientes líneas de código en el cuadro de texto de configuración del proceso de trabajo del paso 3:

   ```
   # define name of config provider:
   
   config.providers = ssm
   
   # provide implementation classes for parameter store:
   
   config.providers.ssm.class = com.amazonaws.kafka.config.providers.SsmParamStoreConfigProvider
   
   # configure a config provider (if it needs additional initialization), for example you can provide a region where the secrets or parameters are located:
   
   config.providers.ssm.param.region = us-east-1
   ```

1. Para el proveedor de configuración del almacén de parámetros, copie las siguientes líneas de código en la configuración del conector del paso 5.

   ```
   #Example implementation for parameter store variable
   schema.history.internal.kafka.bootstrap.servers=${{{ssm::MSKBootstrapServerAddress}}}
   ```

   También puede agrupar los dos pasos anteriores con más proveedores de configuración.

------
#### [ Configure in Amazon S3 ]

**Para configurar objects/files en Amazon S3**

1. Abra la [consola de Amazon S3](https://console.aws.amazon.com/s3/).

1. Cargue su objeto en un bucket en S3. Para obtener instrucciones, consulte [Carga de objetos](https://docs.aws.amazon.com/AmazonS3/latest/userguide/upload-objects.html).

1. Copie el ARN de su objeto.

1. Añada los permisos de lectura de objetos de Amazon S3 de la siguiente política de ejemplo al [rol de ejecución del servicio](https://docs.aws.amazon.com/msk/latest/developerguide/msk-connect-service-execution-role.html). Reemplace el ARN de ejemplo, `arn:aws:s3:::{{<MY_S3_BUCKET/path/to/custom-plugin.zip>}}`, por el ARN del objeto.  
****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
               {
                   "Sid": "VisualEditor0",
                   "Effect": "Allow",
                   "Action": "s3:GetObject",
                   "Resource": "arn:aws:s3:::{{<MY_S3_BUCKET/path/to/custom-plugin.zip>}}"
               }
           ]
       }
   ```

1. Para utilizar el proveedor de configuración de Amazon S3, copie las siguientes líneas de código en el cuadro de texto de configuración del proceso de trabajo del paso 3:

   ```
   # define name of config provider:
   
   config.providers = s3import
   # provide implementation classes for S3:
   
   config.providers.s3import.class = com.amazonaws.kafka.config.providers.S3ImportConfigProvider
   ```

1. Para el proveedor de configuración de Amazon S3, copie las siguientes líneas de código en la configuración del conector del paso 4.

   ```
   #Example implementation for S3 object
   
   database.ssl.truststore.location = ${s3import:us-west-2:my_cert_bucket/path/to/trustore_unique_filename.jks}
   ```

   También puede agrupar los dos pasos anteriores con más proveedores de configuración.

------

## Creación de una configuración de proceso de trabajo personalizada con información sobre su proveedor de configuración
<a name="msk-connect-config-providers-create-custom-config"></a>

1. Seleccione **Configuraciones de proceso de trabajo** en la sección **Amazon MSK Connect**.

1. Seleccione **Crear configuración de proceso de trabajo**.

1. Introduzca `SourceDebeziumCustomConfig` en el cuadro de texto Nombre de configuración de proceso de trabajo. La descripción es opcional.

1. Copie el código de configuración correspondiente en función de los proveedores que desee y péguelo en el cuadro de texto **Configuración del proceso de trabajo**.

1. Este es un ejemplo de la configuración de proceso de trabajo para los tres proveedores:

   ```
   key.converter=org.apache.kafka.connect.storage.StringConverter
   key.converter.schemas.enable=false
   value.converter=org.apache.kafka.connect.json.JsonConverter
   value.converter.schemas.enable=false
   offset.storage.topic=offsets_my_debezium_source_connector
   
   # define names of config providers:
   
   config.providers=secretsmanager,ssm,s3import
   
   # provide implementation classes for each provider:
   
   config.providers.secretsmanager.class    = com.amazonaws.kafka.config.providers.SecretsManagerConfigProvider
   config.providers.ssm.class               = com.amazonaws.kafka.config.providers.SsmParamStoreConfigProvider
   config.providers.s3import.class          = com.amazonaws.kafka.config.providers.S3ImportConfigProvider
   
   # configure a config provider (if it needs additional initialization), for example you can provide a region where the secrets or parameters are located:
   
   
   config.providers.secretsmanager.param.region = us-east-1
   config.providers.ssm.param.region = us-east-1
   ```

1. Haga clic en Crear configuración del proceso de trabajo.

## Creación del conector
<a name="msk-connect-config-providers-create-connector"></a>

1. Cree un conector nuevo siguiendo las instrucciones de [Crear un conector nuevo](https://docs.aws.amazon.com/msk/latest/developerguide/mkc-create-connector.html).

1. Elija el archivo `custom-plugin.zip` que cargó en su bucket de S3 en [Creación de un complemento personalizado y carga a S3](#msk-connect-config-providers-create-custom-plugin) como origen del complemento personalizado.

1. Copie el código de configuración correspondiente en función de los proveedores que desee y péguelo en el cuadro de texto Configuración del conector.

1. Este es un ejemplo de la configuración del conector para los tres proveedores:

   ```
   #Example implementation for parameter store variable
   schema.history.internal.kafka.bootstrap.servers=${{{ssm::MSKBootstrapServerAddress}}}
   
   #Example implementation for secrets manager variable
   database.user=${secretsmanager:MSKAuroraDBCredentials:username}
   database.password=${secretsmanager:MSKAuroraDBCredentials:password}
   
   #Example implementation for Amazon S3 file/object
   database.ssl.truststore.location = ${s3import:us-west-2:my_cert_bucket/path/to/trustore_unique_filename.jks}
   ```

1. Seleccione **Usar una configuración personalizada** y elija **SourceDebeziumCustomConfig**una opción en el menú desplegable **Worker Configuration**.

1. Siga los pasos restantes de las instrucciones de [Crear un conector](https://docs.aws.amazon.com/msk/latest/developerguide/mkc-create-connector.html).