使用配置提供程序将敏感信息外部化 - Amazon Managed Streaming for Apache Kafka

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

使用配置提供程序将敏感信息外部化

此示例演示了如何使用开源配置提供程序将 Amazon MSK Connect 的敏感信息外部化。配置提供程序允许您在连接器或工作程序配置中指定变量而不是明文,在连接器中运行的工作程序会在运行时系统解析这些变量。这样可以防止凭证和其他密钥以明文形式存储。示例中的配置提供程序支持从 S AWS ecrets Manager、Amazon S3 和 Systems Manager (SSM) 检索配置参数。在步骤 2 中,您可以看到如何为要配置的服务设置敏感信息的存储和检索。

步骤 1:创建自定义插件并上传到 S3

要创建自定义插件,请在本地计算机上运行以下命令 msk-config-provider 来创建一个包含连接器的 zip 文件。

使用终端窗口和 Debezium 作为连接器创建自定义插件

使用 AWS CLI 以拥有允许您访问 AWS S3 存储桶的凭据的超级用户身份运行命令。有关安装和设置 AWS CLI 的信息,请参阅《AWS Command Line Interface 用户指南》中的 AWS CLI 入门。有关在 Amazon S3 中使用 AWS CLI 的信息,请参阅AWS Command Line Interface 用户指南中的将 Amazon S3 与 AWS CLI 配合使用

  1. 在终端窗口中,使用以下命令在工作区中创建一个名为 custom-plugin 的文件夹。

    mkdir custom-plugin && cd custom-plugin
  2. 使用以下命令从 Debezium 网站下载最新稳定版本的 MySQL Connector 插件

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

    使用以下命令将下载的 gzip 文件提取到 custom-plugin 文件夹中。

    tar xzf debezium-connector-mysql-2.2.0.Final-plugin.tar.gz
  3. 使用以下命令下载 MSK 配置提供程序 zip 文件

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

    使用以下命令将下载的 zip 文件提取到 custom-plugin 文件夹中。

    unzip msk-config-providers-0.1.0-with-dependencies.zip
  4. 将上述步骤中的 MSK 配置提供程序和自定义连接器的内容压缩到名为 custom-plugin.zip 的单个文件中。

    zip -r ../custom-plugin.zip *
  5. 将文件上传到 S3 以供日后参考。

    aws s3 cp ../custom-plugin.zip s3:<S3_URI_BUCKET_LOCATION>
  6. 在 Amazon MSK 控制台的 MSK Connect 部分下,选择自定义插件,然后选择创建自定义插件并浏览 s3:<S3_URI_BUCKET_LOCATION> S3 存储桶,选择刚刚上传的自定义插件 ZIP 文件。

  7. 对于插件名称,输入 debezium-custom-plugin。或者,输入描述并选择创建自定义插件

步骤 2:为不同的提供程序配置参数和权限

您可以在以下三个服务中配置参数值:

  • Secrets Manager

  • Systems Manager Parameter Store

  • S3 – Simple Storage Service

选择以下选项卡之一,获取有关为该服务设置参数和相关权限的说明。

Configure in Secrets Manager
在 Secrets Manager 中配置参数值
  1. 打开 Secrets Manager 控制台

  2. 创建新密钥来存储凭证或密钥。有关说明,请参阅《 AWS Secrets Manager 用户指南》中的创建 AWS Secrets Manager 密钥

  3. 复制密钥的 ARN。

  4. 将以下示例策略中的 Secrets Manager 权限添加到您的服务执行角色。将<arn : aws : secretsmanager : us-east-1:123456789000 : secret : -1234>替换为你的密钥的 ARN。MySecret

  5. 添加工作程序配置和连接器说明。

    { "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. 要使用 Secrets Manager 配置提供程序,请在步骤 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. 对于 Secrets Manager 配置提供程序,请在步骤 4 中复制连接器配置的以下几行代码。

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

您也可以将上述步骤与更多配置提供程序一起使用。

Configure in Systems Manager Parameter Store
在 Systems Manager Parameter Store 中配置参数值
  1. 打开 Systems Manager 控制台

  2. 在导航窗格中,选择 Parameter Store

  3. 创建要存储在 Systems Manager 中的新参数。有关说明,请参阅《 AWS Systems Manager 用户指南》中的 “创建 Systems Manager 参数(控制台)”。

  4. 复制参数的 ARN。

  5. 将以下示例策略中的 Systems Manager 权限添加到您的服务执行角色。将 <arn: aws: ssm: us-east-1 MyParameterName :123456789000: parameter/ > 替换为参数的 AR N。

    { "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. 要使用 Parameter Store 配置提供程序,请在步骤 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. 对于 Parameter Store 配置提供程序,请在步骤 5 中复制连接器配置的以下几行代码。

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

    您也可以将上述两个步骤与更多配置提供程序捆绑使用。

Configure in Amazon S3
在 Amazon S3 中配置对象/文件
  1. 打开 Amazon S3 控制台

  2. 将对象上传到 S3 中的存储桶。有关说明,请参阅上传对象

  3. 复制对象的 ARN。

  4. 将以下示例策略中的 Amazon S3 对象读取权限添加到您的服务执行角色。将 <arn:aws:s3:::MY_S3_BUCKET/path/to/custom-plugin.zip> 替换为对象的 ARN。

    { "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. 要使用 Amazon S3 配置提供程序,请在步骤 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. 对于 Amazon S3 配置提供程序,请在步骤 4 中将以下几行代码复制到连接器配置。

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

    您也可以将上述两个步骤与更多配置提供程序捆绑使用。

步骤 3:使用与配置提供程序相关的信息创建自定义工作程序配置

  1. Amazon MSK Connect 部分下选择工作程序配置

  2. 选择创建工作程序配置

  3. 在“工作程序配置名称”文本框中输入 SourceDebeziumCustomConfig。“描述”是选填项。

  4. 根据所需的提供程序复制相关的配置代码,然后将其粘贴到工作程序配置文本框中。

  5. 以下是所有三个提供程序的工作程序配置示例:

    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. 单击“创建工作程序配置”。

步骤 4:创建连接器

  1. 按照创建新连接器中的说明,创建新连接器。

  2. 选择您在 步骤 1:创建自定义插件并上传到 S3 中上传到 S3 存储桶中的 custom-plugin.zip 文件作为自定义插件的来源。

  3. 根据所需的提供程序复制相关的配置代码,然后将其粘贴到“工作程序配置”字段中。

  4. 以下是所有三个提供程序的连接器配置示例:

    #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. 选择 “使用自定义配置”,然后SourceDebeziumCustomConfig从 “工作器配置” 下拉列表中进行选择。

  6. 按照创建连接器中说明的其余步骤进行操作。

注意事项

将 MSK 配置提供程序与 Amazon MSK Connect 配合使用时,请考虑以下事项:

  • 向 IAM 服务执行角色分配使用配置提供程序时的适当权限。

  • 在工作程序配置中定义配置提供程序及其在连接器配置中的实现。

  • 如果插件未将敏感配置值定义为秘密,则这些值可能会出现在连接器日志中。Kafka Connect 对未定义的配置值的处理方式与任何其他明文值相同。要了解更多信息,请参阅防止连接器日志中出现秘密

  • 默认情况下,当连接器使用配置提供程序时,MSK Connect 会经常重新启动该连接器。要关闭此重启行为,可以在连接器配置中将 config.action.reload 值设置为 none