Tutoriel : Externalisation d'informations sensibles à l'aide de fournisseurs de configuration - Amazon Managed Streaming for Apache Kafka

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Tutoriel : Externalisation d'informations sensibles à l'aide de fournisseurs de configuration

Cet exemple montre comment externaliser des informations sensibles pour Amazon MSK Connect à l'aide d'un fournisseur de configuration open source. Un fournisseur de configuration vous permet de spécifier des variables plutôt que du texte brut dans une configuration de connecteur ou de worker, et les workers exécutés dans votre connecteur résolvent ces variables au moment de l'exécution. Cela empêche le stockage d'informations d'identification et d'autres secrets en texte brut. Dans cet exemple, le fournisseur de configuration prend en charge la récupération des paramètres de configuration depuis AWS Secrets Manager, Amazon S3 et Systems Manager (SSM). À l'étape 2, vous pouvez voir comment configurer le stockage et la récupération d'informations sensibles pour le service que vous souhaitez configurer.

Considérations

Tenez compte des points suivants lorsque vous utilisez le fournisseur de MSK configuration avec Amazon MSK Connect :

  • Attribuez les autorisations appropriées lors de l'utilisation des fournisseurs de configuration au rôle d'exécution du IAM service.

  • Définissez les fournisseurs de configuration dans les configurations du worker et leur implémentation dans la configuration du connecteur.

  • Des valeurs de configuration sensibles peuvent apparaître dans les journaux des connecteurs si un plugin ne définit pas ces valeurs comme secrètes. Kafka Connect traite les valeurs de configuration non définies de la même manière que toute autre valeur en texte brut. Pour en savoir plus, consultez Empêcher l'apparition de secrets dans les journaux des connecteurs.

  • Par défaut, MSK Connect redémarre fréquemment un connecteur lorsque celui-ci utilise un fournisseur de configuration. Pour désactiver ce comportement de redémarrage, vous pouvez définir la valeur config.action.reload sur none dans la configuration de votre connecteur.

Créez un plugin personnalisé et téléchargez-le sur S3

Pour créer un plugin personnalisé, créez un fichier zip contenant le connecteur msk-config-provider en exécutant les commandes suivantes sur votre machine locale.

Pour créer un plugin personnalisé en utilisant une fenêtre de terminal et Debezium comme connecteur

Utilisez les commandes AWS CLI pour exécuter des commandes en tant que superutilisateur avec des informations d'identification vous permettant d'accéder à votre compartiment AWS S3. Pour plus d'informations sur l'installation et la configuration du AWS CLI, reportez-vous à la section Getting started with the AWS CLI dans le guide de AWS Command Line Interface l'utilisateur. Pour plus d'informations sur l'utilisation AWS CLI d'Amazon S3, consultez la section Utilisation d'Amazon S3 avec Amazon S3 AWS CLI dans le guide de AWS Command Line Interface l'utilisateur.

  1. Dans une fenêtre de terminal, créez un dossier nommé custom-plugin dans votre espace de travail à l'aide de la commande suivante.

    mkdir custom-plugin && cd custom-plugin
  2. Téléchargez la dernière version stable du plug-in My SQL Connector depuis le site de Debezium à l'aide de la commande suivante.

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

    Extrayez le fichier gzip téléchargé dans le dossier custom-plugin à l'aide de la commande suivante.

    tar xzf debezium-connector-mysql-2.2.0.Final-plugin.tar.gz
  3. Téléchargez le fichier zip du fournisseur de MSK configuration à l'aide de la commande suivante.

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

    Extrayez le fichier zip téléchargé dans le dossier custom-plugin à l'aide de la commande suivante.

    unzip msk-config-providers-0.1.0-with-dependencies.zip
  4. Compressez le contenu du fournisseur de MSK configuration de l'étape ci-dessus et du connecteur personnalisé dans un seul fichier nommécustom-plugin.zip.

    zip -r ../custom-plugin.zip *
  5. Chargez le fichier sur S3 pour référence ultérieure.

    aws s3 cp ../custom-plugin.zip s3:<S3_URI_BUCKET_LOCATION>
  6. Sur la MSK console Amazon, dans la section MSKConnect, choisissez Custom Plugin, puis Create custom plugin et parcourez le s3 : <S3_URI_BUCKET_LOCATION> Compartiment S3 pour sélectionner le ZIP fichier de plugin personnalisé que vous venez de télécharger.

    Amazon S3 bucket interface showing a single custom-plugin.zip file in the debezium folder.
  7. Entrez debezium-custom-plugin comme nom du plugin. Si vous le souhaitez, saisissez une description et choisissez Créer un plugin personnalisé.

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

Configuration des paramètres et des autorisations pour différents fournisseurs

Vous pouvez configurer les valeurs des paramètres dans les trois services suivants :

  • Secrets Manager

  • Systems Manager Parameter Store

  • S3 - Simple Storage Service

Sélectionnez l'un des onglets ci-dessous pour obtenir des instructions sur la configuration des paramètres et des autorisations pertinentes pour ce service.

Configure in Secrets Manager
Pour configurer les valeurs de paramètres dans Secrets Manager
  1. Ouvrez la console Secrets Manager.

  2. Créez un nouveau secret pour stocker vos informations d'identification ou vos secrets. Pour obtenir des instructions, voir Création d'un AWS Secrets Manager secret dans le guide de AWS Secrets Manager l'utilisateur.

  3. Copiez votre secretARN.

  4. Ajoutez les autorisations Secrets Manager de l'exemple de politique suivant à votre rôle d'exécution du service. Remplacez <arn:aws:secretsmanager:us-east-1:123456789000:secret:MySecret-1234> avec la ARN révélation de ton secret.

  5. Ajoutez la configuration du worker et les instructions relatives au connecteur.

    { "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. Pour utiliser le fournisseur de configuration Secrets Manager, copiez les lignes de code suivantes dans la zone de texte de configuration du worker à l'étape 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. Pour utiliser le fournisseur de configuration Secrets Manager, copiez les lignes de code suivantes dans la zone de texte de configuration du worker à l'étape 4.

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

Vous pouvez également utiliser l'étape ci-dessus avec d'autres fournisseurs de configuration.

Configure in Systems Manager Parameter Store
Pour configurer et utiliser des valeurs de paramètres dans Systems Manager Parameter Store
  1. Ouvrez la console Systems Manager.

  2. Dans le panneau de navigation, choisissez Stockage de paramètres.

  3. Créez un nouveau paramètre à stocker dans le Systems Manager. Pour obtenir des instructions, reportez-vous à la section Créer un paramètre Systems Manager (console) dans le Guide de AWS Systems Manager l'utilisateur.

  4. Copiez ceux de vos paramètresARN.

  5. Ajoutez les autorisations Systems Manager de l'exemple de politique suivant à votre rôle d'exécution du service. Remplacez <arn:aws:ssm:us-east-1:123456789000:parameter/MyParameterName> avec le ARN de votre paramètre.

    { "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. Pour utiliser le fournisseur de configuration Parameter Store, copiez les lignes de code suivantes dans la zone de texte de configuration du worker à l'étape 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. Pour utiliser le fournisseur de configuration Parameter Store, copiez les lignes de code suivantes dans la zone de texte de configuration du worker à l'étape 5.

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

    Vous pouvez également grouper les deux étapes ci-dessus avec d'autres fournisseurs de configuration.

Configure in Amazon S3
Pour configurer des objets/fichiers dans Amazon S3
  1. Ouvrez la console Amazon S3.

  2. Chargez votre objet dans un compartiment dans S3. Pour obtenir des instructions, consultez Chargement d'objets.

  3. Copiez celui de votre objetARN.

  4. Ajoutez les autorisations de lecture d'objets Amazon S3 de l'exemple de politique suivant à votre rôle d'exécution du service. Remplacer <arn:aws:s3:::MY_S3_BUCKET/path/to/custom-plugin.zip> avec celui ARN de votre objet.

    { "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. Pour utiliser le fournisseur de configuration Amazon S3, copiez les lignes de code suivantes dans la zone de texte de configuration du worker à l'étape 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. Pour utiliser le fournisseur de configuration Amazon S3, copiez les lignes de code suivantes dans la zone de texte de configuration du worker à l'étape 4.

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

    Vous pouvez également grouper les deux étapes ci-dessus avec d'autres fournisseurs de configuration.

Créez une configuration de worker personnalisée avec des informations sur votre fournisseur de configuration

  1. Sélectionnez Configurations de travail dans la section Amazon MSK Connect.

  2. Sélectionnez Créer une configuration de worker.

  3. Entrez SourceDebeziumCustomConfig dans la zone de texte Nom de la configuration du worker. La description est facultative.

  4. Copiez le code de configuration approprié en fonction des fournisseurs souhaités, puis collez-le dans la zone de texte Configuration du worker.

  5. Voici un exemple de configuration de worker pour les trois fournisseurs :

    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. Cliquez sur Créer une configuration de worker.

Création du connecteur

  1. Créez un nouveau connecteur en suivant les instructions de la section Créer un nouveau connecteur.

  2. Choisissez le fichier custom-plugin.zip que vous avez chargé dans votre compartiment S3 dans la section Créez un plugin personnalisé et téléchargez-le sur S3 comme source du plugin personnalisé.

  3. Copiez le code de configuration approprié en fonction des fournisseurs souhaités, puis collez-le dans le champ Configuration du connecteur.

  4. Voici un exemple de configuration de connecteur pour les trois fournisseurs :

    #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. Sélectionnez Utiliser une configuration personnalisée et choisissez dans le SourceDebeziumCustomConfigmenu déroulant Configuration du travailleur.

  6. Suivez les étapes restantes indiquées dans les instructions de la section Créer un connecteur.