Externalisation d'informations sensibles à l'aide des 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.

Externalisation d'informations sensibles à l'aide des 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.

Étape 1 : Créer un plugin personnalisé et le charger 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 la 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 de la AWS CLI, consultez 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 de l' AWS interface de ligne de commande avec Amazon S3, consultez la section Utilisation d'Amazon S3 avec l' AWS interface de ligne de commande 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 du connecteur MySQL depuis le site 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 configuration MSK à 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 configuration MSK à partir 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 console Amazon MSK, dans la section MSK Connect, choisissez Plugin personnalisé, puis choisissez Créer un plugin personnalisé et parcourez le compartiment S3 s3:<S3_URI_BUCKET_LOCATION> pour sélectionner le fichier ZIP du 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.

Étape 2 : Configurer les paramètres et les 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 l'ARN de votre secret.

  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 : -1234> par l'ARN de votre secret. MySecret

  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 l'ARN de votre paramètre.

  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- MyParameterName 1:123456789000:parameter/ > par l'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 l'ARN de votre objet.

  4. Ajoutez les autorisations de lecture d'objets Amazon S3 de l'exemple de politique suivant à votre rôle d'exécution du service. Remplacez <arn:aws:s3:::MY_S3_BUCKET/path/to/custom-plugin.zip> par l'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.

Étape 3 : Créer une configuration de worker personnalisée avec des informations sur votre fournisseur de configuration

  1. Sélectionnez Configurations de worker 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.

Étape 4 : Créer un 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 Étape 1 : Créer un plugin personnalisé et le charger 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.

Considérations

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

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

  • 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, veuillez consulter la section 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.