Externalizando informações confidenciais usando provedores de configuração - Amazon Managed Streaming for Apache Kafka

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Externalizando informações confidenciais usando provedores de configuração

Este exemplo mostra como externalizar informações confidenciais para o Amazon MSK Connect usando um provedor de configuração de código aberto. Um provedor de configuração permite que você especifique variáveis, em vez de texto simples, em uma configuração de conector ou de operador, e os operadores em execução em seu conector resolvem essas variáveis em runtime. Isso evita que credenciais e outros segredos sejam armazenados em texto simples. O provedor de configuração no exemplo suporta a recuperação de parâmetros de configuração do AWS Secrets Manager, Amazon S3 e Systems Manager (SSM). Na Etapa 2, você verá como configurar o armazenamento e a recuperação de informações confidenciais para o serviço que deseja configurar.

Etapa 1: criar um plug-in personalizado e fazer o upload para o S3

Para criar um plug-in personalizado, crie um arquivo zip que contenha o conector e o msk-config-provider executando os seguintes comandos em sua máquina local.

Para criar um plug-in personalizado usando uma janela de terminal e o Debezium como conector

Use a AWS CLI para executar comandos como superusuário com credenciais que permitem acessar seu bucket do S3. AWS Para obter informações sobre como instalar e configurar a AWS CLI, consulte Introdução à AWS CLI no Guia do usuário.AWS Command Line Interface Para obter informações sobre o uso da AWS CLI com o Amazon S3, consulte Usando o Amazon S3 com a AWS CLI no Guia do usuário.AWS Command Line Interface

  1. Em uma janela de terminal, crie uma pasta nomeada custom-plugin no seu espaço de trabalho usando o comando a seguir.

    mkdir custom-plugin && cd custom-plugin
  2. Baixe a versão estável mais recente do plug-in MySQL Connector no site do Debezium usando o comando a seguir.

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

    Extraia o arquivo gzip baixado na pasta custom-plugin usando o comando a seguir.

    tar xzf debezium-connector-mysql-2.2.0.Final-plugin.tar.gz
  3. Baixe o arquivo zip do provedor de configuração do MSK usando o comando a seguir.

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

    Extraia o arquivo zip baixado na custom-plugin pasta usando o comando a seguir.

    unzip msk-config-providers-0.1.0-with-dependencies.zip
  4. Compacte o conteúdo do provedor de configuração do MSK da etapa acima e do conector personalizado em um só arquivo chamado custom-plugin.zip.

    zip -r ../custom-plugin.zip *
  5. Faça upload do arquivo para o S3 para referência posterior.

    aws s3 cp ../custom-plugin.zip s3:<S3_URI_BUCKET_LOCATION>
  6. No console do Amazon MSK, na seção MSK Connect, escolha Plug-in personalizado, depois escolha Criar plug-in personalizado e navegue no bucket s3:<S3_URI_BUCKET_LOCATION> do S3 para selecionar o arquivo ZIP do plug-in personalizado que você acabou de enviar.

    Amazon S3 bucket interface showing a single custom-plugin.zip file in the debezium folder.
  7. Insira debezium-custom-plugin para o nome do plug-in. Opcionalmente, insira uma descrição e escolha Criar um plug-in personalizado.

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

Etapa 2: configurar parâmetros e permissões para diferentes provedores

Você pode configurar valores de parâmetros nestes três serviços:

  • Secrets Manager 

  • Systems Manager Parameter Store

  • S3: Simple Storage Service

Selecione uma das guias abaixo para obter instruções sobre como configurar parâmetros e permissões relevantes para esse serviço.

Configure in Secrets Manager
Para configurar valores de parâmetros no Secrets Manager
  1. Abra o console do Secrets Manager.

  2. Crie um novo segredo para armazenar suas credenciais ou segredos. Para obter instruções, consulte Criar um AWS Secrets Manager segredo no Guia AWS Secrets Manager do usuário.

  3. Copie o ARN do seu segredo.

  4. Adicione as permissões do Secrets Manager do exemplo de política a seguir ao seu perfil de execução de serviço. Substitua <arn:aws:secretsmanager:us-east- 1:123456789000:secret: -1234> pelo ARN do seu segredo. MySecret

  5. Adicione a configuração do operador e as instruções do 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 usar o provedor de configuração do Secrets Manager, copie as seguintes linhas de código na caixa de texto de configuração do operador na Etapa 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 o provedor de configuração do Secrets Manager, copie as seguintes linhas de código na configuração do conector na Etapa 4.

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

Você também pode usar a etapa acima com mais provedores de configuração.

Configure in Systems Manager Parameter Store
Para configurar valores de parâmetros no Systems Manager Parameter Store
  1. Abra o console do Systems Manager.

  2. No painel de navegação, selecione Parameter Store (Repositório de parâmetros).

  3. Crie um novo parâmetro para armazenar no Systems Manager. Para obter instruções, consulte Criar um parâmetro do Systems Manager (console) no Guia AWS Systems Manager do usuário.

  4. Copie o ARN do seu parâmetro.

  5. Adicione as permissões do Systems Manager do exemplo de política a seguir ao seu perfil de execução de serviço. Substitua <arn:aws:ssm:us-east- 1:123456789000:parameter/ > pelo ARN do seu parâmetro. MyParameterName

    { "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 usar o provedor de configuração do Parameter Store, copie as seguintes linhas de código na caixa de texto de configuração do operador na Etapa 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 o provedor de configuração do Parameter Store, copie as seguintes linhas de código na configuração do conector na Etapa 5.

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

    Você também pode agrupar as duas etapas acima com mais provedores de configuração.

Configure in Amazon S3
Para configurar objetos/arquivos no Amazon S3
  1. Abra o console Amazon S3.

  2. Carregue um objeto para um bucket no S3. Para obter instruções, consulte Carregar objetos.

  3. Copie o ARN do seu objeto.

  4. Adicione as permissões de leitura de objeto do Amazon S3 do exemplo de política a seguir ao seu perfil de execução de serviço. Substitua <arn:aws:s3:::MY_S3_BUCKET/path/to/custom-plugin.zip> pelo ARN do seu 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 usar o provedor de configuração do Amazon S3, copie as seguintes linhas de código na caixa de texto de configuração do operador na Etapa 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 o provedor de configuração do Amazon S3, copie as seguintes linhas de código na configuração do conector na Etapa 4.

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

    Você também pode agrupar as duas etapas acima com mais provedores de configuração.

Etapa 3: criar uma configuração personalizada de operador com informações sobre seu provedor de configuração

  1. Selecione as Configurações do operador na seção Amazon MSK Connect.

  2. Selecione Criar configuração de operador.

  3. Digite SourceDebeziumCustomConfig na caixa de texto Nome da configuração do operador. A descrição é opcional.

  4. Copie o código de configuração relevante com base nos provedores desejados e cole-o na caixa de texto de Configuração do operador.

  5. Este é um exemplo da configuração de operador para todos os três provedores:

    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. Clique em Criar configuração de operador.

Etapa 4: criar o conector

  1. Crie um novo conector usando as instruções em Criar um novo conector.

  2. Escolha o arquivo custom-plugin.zip que você enviou para o bucket do S3 em Etapa 1: criar um plug-in personalizado e fazer o upload para o S3 como origem do plug-in personalizado.

  3. Copie o código de configuração relevante com base nos provedores desejados e cole-o no campo Configuração do conector.

  4. Este é um exemplo da configuração do conector para todos os três provedores:

    #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. Selecione Usar uma configuração personalizada e escolha SourceDebeziumCustomConfigno menu suspenso Configuração do trabalhador.

  6. Siga as etapas restantes das instruções em Criar conector.

Considerações

Considere o seguinte ao usar o provedor de configuração do MSK com o Amazon MSK Connect:

  • Atribua as permissões adequadas ao usar os provedores de configuração para o perfil de execução de serviços do IAM.

  • Defina os provedores de configuração nas configurações de trabalho e sua implementação na configuração do conector.

  • Valores confidenciais de configuração podem aparecer nos registros do conector se um plug-in não definir esses valores como secretos. O Kafka Connect trata valores de configuração indefinidos da mesma forma que qualquer outro valor de texto simples. Para saber mais, consulte Como evitar que segredos apareçam nos logs do conector.

  • Por padrão, o MSK Connect reinicia frequentemente um conector quando o conector usa um provedor de configuração. Para desativar esse comportamento de reinicialização, você pode definir o valor config.action.reload como none na configuração do conector.