Tutorial: Externalización de información confidencial mediante proveedores de configuración - Transmisión gestionada 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.

Tutorial: Externalización de información confidencial mediante proveedores de configuración

En este ejemplo, se muestra cómo externalizar información confidencial para 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, puede ver cómo configurar el almacenamiento y la recuperación de información confidencial para el servicio que desee configurar.

Consideraciones

Tenga en cuenta lo siguiente cuando utilice el proveedor de MSK configuración con Amazon MSK Connect:

  • Al utilizar los proveedores de configuración, asigne los permisos adecuados a la función IAM de ejecución del servicio.

  • 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.

  • 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.

Cree un complemento personalizado y cárguelo en S3

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

AWS CLIUtilícelo para ejecutar los comandos como superusuario con credenciales que le permitan acceder a su AWS bucket de S3. Para obtener información sobre cómo instalar y configurar el AWS CLI, consulte Introducción a él AWS CLI en la Guía del AWS Command Line Interface usuario. Para obtener información sobre el AWS CLI uso de Amazon S3, consulte Uso de Amazon S3 con Amazon S3 AWS CLI 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
  2. Descargue la última versión estable del complemento My SQL Connector del sitio de Debezium 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
  3. Descargue el archivo zip del proveedor de MSK configuración mediante el siguiente comando.

    wget https://github.com/aws-samples/msk-config-providers/releases/download/r0.1.0/msk-config-providers-0.1.0-with-dependencies.zip

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

    unzip msk-config-providers-0.1.0-with-dependencies.zip
  4. Comprima el contenido del proveedor de MSK configuración del paso anterior y el conector personalizado en un único archivo denominadocustom-plugin.zip.

    zip -r ../custom-plugin.zip *
  5. Cargue el archivo en S3 para consultarlo más adelante.

    aws s3 cp ../custom-plugin.zip s3:<S3_URI_BUCKET_LOCATION>
  6. En la MSK consola de Amazon, en la sección MSKConnect, selecciona Custom Plugin, selecciona Create custom plugin y busca s3: <S3_URI_BUCKET_LOCATIONEn la consola de Amazon, en la ZIP sección Conectar, selecciona Complemento personalizado, luego elige Crear complemento personalizado y navega por el bucket s3: S3 para seleccionar el archivo de complemento personalizado que acabas de cargar.

    Amazon S3 bucket interface showing a single custom-plugin.zip file in the debezium folder.
  7. Introduzca debezium-custom-plugin para el nombre del complemento. De manera opcional, ingrese una descripción y elija Crear complemento personalizado.

    Amazon S3 bucket interface showing a single custom-plugin.zip file in the debezium folder.

Configure los parámetros y permisos para los distintos proveedores

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

Seleccione una de las pestañas siguientes para obtener instrucciones sobre cómo configurar los 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.

  2. Cree un nuevo secreto para almacenar sus credenciales o secretos. Para obtener instrucciones, consulte Crear un AWS Secrets Manager secreto en la Guía del AWS Secrets Manager usuario.

  3. Copia tus secretosARN.

  4. Añada los permisos de Secrets Manager de la siguiente política de ejemplo al rol de ejecución del servicio. Reemplazar <arn:aws:secretsmanager:us-east-1:123456789000:secret:MySecret-1234> con el ARN de tu secreto.

  5. 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:123456789000:secret:MySecret-1234>" ] } ] }
  6. 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
  7. 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.hostname=${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.

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

  3. Cree un parámetro nuevo para guardarlo en Systems Manager. Para obtener instrucciones, consulte Creación de un parámetro de Systems Manager (consola) en la Guía del AWS Systems Manager usuario.

  4. Copie los parámetrosARN.

  5. Añada los permisos de Systems Manager de la siguiente política de ejemplo al rol de ejecución del servicio. Reemplazar <arn:aws:ssm:us-east-1:123456789000:parameter/MyParameterName> con el ARN de tu 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" } ] }
  6. 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
  7. 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
Configuración de objetos o archivos en Amazon S3
  1. Abra la consola de Amazon S3.

  2. Cargue su objeto en un bucket en S3. Para obtener instrucciones, consulte Carga de objetos.

  3. Copia el de tu objetoARN.

  4. 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. Reemplace <arn:aws:s3:::MY_S3_BUCKET/path/to/custom-plugin.zip> con el ARN de tu 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>" } ] }
  5. 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
  6. 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

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

  2. Seleccione Crear configuración de proceso de trabajo.

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

  4. 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.

  5. 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
  6. Haga clic en Crear configuración del proceso de trabajo.

Cree el conector

  1. Cree un conector nuevo siguiendo las instrucciones de Crear un conector nuevo.

  2. Elija el archivo custom-plugin.zip que cargó en su bucket de S3 en Cree un complemento personalizado y cárguelo en S3 como origen del complemento personalizado.

  3. 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.

  4. 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.hostname=${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}
  5. Seleccione Usar una configuración personalizada y elija SourceDebeziumCustomConfiguna opción en el menú desplegable Worker Configuration.

  6. Siga los pasos restantes de las instrucciones de Crear un conector.