教程:使用配置提供程序将敏感信息外部化
此示例演示了如何使用开源配置提供程序将 Amazon MSK Connect 的敏感信息外部化。配置提供程序允许您在连接器或工作程序配置中指定变量而不是明文,在连接器中运行的工作程序会在运行时系统解析这些变量。这样可以防止凭证和其他密钥以明文形式存储。示例中的配置提供程序支持从 AWS Secrets Manager、Amazon S3 和 Systems Manager(SSM)检索配置参数。在步骤 2 中,您可以看到如何为要配置的服务设置敏感信息的存储和检索。
注意事项
将 MSK 配置提供程序与 Amazon MSK Connect 配合使用时,请考虑以下事项:
向 IAM 服务执行角色分配使用配置提供程序时的适当权限。
在工作程序配置中定义配置提供程序及其在连接器配置中的实现。
-
如果插件未将敏感配置值定义为秘密,则这些值可能会出现在连接器日志中。Kafka Connect 对未定义的配置值的处理方式与任何其他明文值相同。要了解更多信息,请参阅防止连接器日志中出现秘密。
-
默认情况下,当连接器使用配置提供程序时,MSK Connect 会经常重新启动该连接器。要关闭此重启行为,可以在连接器配置中将
config.action.reload值设置为none。
创建自定义插件并上传到 S3
要创建自定义插件,可通过在本地计算机上运行以下命令来创建包含连接器和 msk-config-provider 的 zip 文件。
使用终端窗口和 Debezium 作为连接器创建自定义插件
使用 AWS CLI 以拥有允许您访问 AWS S3 存储桶的凭证的超级用户身份运行命令。有关安装和设置 AWS CLI 的信息,请参阅《AWS Command Line Interface 用户指南》中的开始使用 AWS CLI。有关将 AWS CLI 与 Amazon S3 结合使用的信息,请参阅《AWS Command Line Interface 用户指南》中的将 Amazon S3 与 AWS CLI 结合使用。
-
在终端窗口中,使用以下命令在工作区中创建一个名为
custom-plugin的文件夹。mkdir custom-plugin && cd custom-plugin -
使用以下命令从 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 -
使用以下命令下载 MSK 配置提供程序 zip 文件
。 wget https://github.com/aws-samples/msk-config-providers/releases/download/r0.4.0/msk-config-providers-0.4.0-with-dependencies.zip使用以下命令将下载的 zip 文件提取到
custom-plugin文件夹中。unzip msk-config-providers-0.4.0-with-dependencies.zip -
将上述步骤中的 MSK 配置提供程序和自定义连接器的内容压缩到名为
custom-plugin.zip的单个文件中。zip -r ../custom-plugin.zip * -
将文件上传到 S3 以供日后参考。
aws s3 cp ../custom-plugin.zip s3:<S3_URI_BUCKET_LOCATION> 在 Amazon MSK 控制台的 MSK Connect 部分下,选择自定义插件,然后选择创建自定义插件并浏览 s3:<
S3_URI_BUCKET_LOCATION> S3 存储桶,选择刚刚上传的自定义插件 ZIP 文件。
对于插件名称,输入
debezium-custom-plugin。或者,输入描述并选择创建自定义插件。
为不同的提供程序配置参数和权限
您可以在以下三个服务中配置参数值:
Secrets Manager
Systems Manager Parameter Store
S3 – Simple Storage Service
选择以下选项卡之一,获取有关为该服务设置参数和相关权限的说明。
使用与配置提供程序有关的信息创建自定义工作程序配置
-
在 Amazon MSK Connect 部分下选择工作程序配置。
选择创建工作程序配置。
在“工作程序配置名称”文本框中输入
SourceDebeziumCustomConfig。“描述”是选填项。根据所需的提供程序复制相关的配置代码,然后将其粘贴到工作程序配置文本框中。
以下是所有三个提供程序的工作程序配置示例:
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单击“创建工作程序配置”。
创建连接器
按照创建新连接器中的说明,创建新连接器。
选择您在 创建自定义插件并上传到 S3 中上传到 S3 存储桶中的
custom-plugin.zip文件作为自定义插件的来源。根据所需的提供程序复制相关的配置代码,然后将其粘贴到“工作程序配置”字段中。
以下是所有三个提供程序的连接器配置示例:
#Example implementation for parameter store variable schema.history.internal.kafka.bootstrap.servers=${ssm::MSKBootstrapServerAddress} #Example implementation for secrets manager variable database.user=${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}选择使用自定义配置,然后从工作程序配置下拉列表中选择 SourceDebeziumCustomConfig。
按照创建连接器中说明的其余步骤进行操作。