

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

# 教程：使用配置提供程序将敏感信息外部化
<a name="msk-connect-config-provider"></a>

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

## 注意事项
<a name="msk-connect-config-providers-considerations"></a>

将 MSK 配置提供程序与 Amazon MSK Connect 配合使用时，请考虑以下事项：
+ 向 IAM 服务执行角色分配使用配置提供程序时的适当权限。
+ 在工作程序配置中定义配置提供程序及其在连接器配置中的实现。
+ 如果插件未将敏感配置值定义为秘密，则这些值可能会出现在连接器日志中。Kafka Connect 对未定义的配置值的处理方式与任何其他明文值相同。要了解更多信息，请参阅[防止连接器日志中出现秘密](msk-connect-logging.md#msk-connect-logging-secrets)。
+ 默认情况下，当连接器使用配置提供程序时，MSK Connect 会经常重新启动该连接器。要关闭此重启行为，可以在连接器配置中将 `config.action.reload` 值设置为 `none`。

## 创建自定义插件并上传到 S3
<a name="msk-connect-config-providers-create-custom-plugin"></a>

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

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

使用 AWS CLI 以拥有允许您访问 AWS S3 存储桶的凭据的超级用户身份运行命令。有关安装和设置 AWS CLI 的信息，请参阅《*AWS Command Line Interface 用户指南》*[中的 AWS CLI 入门](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-getting-started.html)。有关在 Amazon S3 中使用 AWS CLI 的信息，请参阅*AWS Command Line Interface 用户指南*中的[将 Amazon S3 与 AWS CLI 配合使用](https://docs.aws.amazon.com/cli/latest/userguide/cli-services-s3.html)。

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

   ```
   mkdir custom-plugin && cd custom-plugin
   ```

1. 使用以下命令从 [Debezium 网站](https://debezium.io/releases/)下载最新稳定版本的 **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
   ```

1. 使用以下命令下载 [MSK 配置提供程序 zip 文件](https://github.com/aws-samples/msk-config-providers/releases/download/r0.4.0/msk-config-providers-0.4.0-with-dependencies.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
   ```

1. 将上述步骤中的 MSK 配置提供程序和自定义连接器的内容压缩到名为 `custom-plugin.zip` 的单个文件中。

   ```
   zip -r ../custom-plugin.zip * 
   ```

1. 将文件上传到 S3 以供日后参考。

   ```
   aws s3 cp ../custom-plugin.zip s3:<S3_URI_BUCKET_LOCATION>
   ```

1. 在 Amazon MSK 控制台的 **MSK Connect** 部分下，选择**自定义插件**，然后选择**创建自定义插件**并浏览 **s3: < *S3\$1URI\$1BUCKET\$1LOCATION* >** S3 存储桶以选择您刚刚上传的自定义插件 ZIP 文件。  
![\[Amazon S3 bucket interface showing a single custom-plugin.zip file in the debezium folder.\]](http://docs.aws.amazon.com/zh_cn/msk/latest/developerguide/images/s3-object-browser.png)

1. 对于插件名称，输入 **debezium-custom-plugin**。或者，输入描述并选择**创建自定义插件**。  
![\[Amazon S3 bucket interface showing a single custom-plugin.zip file in the debezium folder.\]](http://docs.aws.amazon.com/zh_cn/msk/latest/developerguide/images/create-custom-plugin.png)

## 为不同的提供程序配置参数和权限
<a name="msk-connect-config-providers"></a>

您可以在以下三个服务中配置参数值：
+ Secrets Manager 
+ Systems Manager Parameter Store
+ S3 – Simple Storage Service

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

------
#### [ Configure in Secrets Manager ]

**在 Secrets Manager 中配置参数值**

1. 打开 [Secrets Manager 控制台](https://console.aws.amazon.com/secretsmanager/)。

1. 创建新密钥来存储凭证或密钥。有关说明，请参阅《*AWS Secrets Manager 用户指南》*中的[创建 AWS Secrets Manager 密钥](https://docs.aws.amazon.com/secretsmanager/latest/userguide/create_secret.html)。

1. 复制密钥的 ARN。

1. 将以下示例策略中的 Secrets Manager 权限添加到您的[服务执行角色](https://docs.aws.amazon.com/msk/latest/developerguide/msk-connect-service-execution-role.html)。将示例 ARN `arn:aws:secretsmanager:us-east-1:123456789012:secret:MySecret-1234` 替换为密钥的 ARN。

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

   ```
   {
           "Version":"2012-10-17",		 	 	 
           "Statement": [
               {
                   "Effect": "Allow",
                   "Action": [
                       "secretsmanager:GetResourcePolicy",
                       "secretsmanager:GetSecretValue",
                       "secretsmanager:DescribeSecret",
                       "secretsmanager:ListSecretVersionIds"
                   ],
                   "Resource": [
                   "arn:aws:secretsmanager:us-east-1:123456789012:secret:MySecret-1234"
                   ]
               }
           ]
       }
   ```

1. 要使用 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
   ```

1. 对于 Secrets Manager 配置提供程序，请在步骤 4 中复制连接器配置的以下几行代码。

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

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

------
#### [ Configure in Systems Manager Parameter Store ]

**在 Systems Manager Parameter Store 中配置参数值**

1. 打开 [Systems Manager 控制台](https://console.aws.amazon.com/systems-manager/)。

1. 在导航窗格中，选择 **Parameter Store**。

1. 创建要存储在 Systems Manager 中的新参数。有关说明，请参阅《 AWS Systems Manager 用户指南》中的 “[创建 Systems Manager 参数（控制台）](https://docs.aws.amazon.com/systems-manager/latest/userguide/parameter-create-console.html)”。

1. 复制参数的 ARN。

1. 将以下示例策略中的 Systems Manager 权限添加到您的[服务执行角色](https://docs.aws.amazon.com/msk/latest/developerguide/msk-connect-service-execution-role.html)。*<arn:aws:ssm:us-east-1:123456789000:parameter/MyParameterName>*替换为参数的 ARN。  
****  

   ```
   {
           "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"
               }
           ]
       }
   ```

1. 要使用 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
   ```

1. 对于 Parameter Store 配置提供程序，请在步骤 5 中复制连接器配置的以下几行代码。

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

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

------
#### [ Configure in Amazon S3 ]

**要在 Amazon S3 objects/files 中进行配置**

1. 打开 [Amazon S3 控制台](https://console.aws.amazon.com/s3/)。

1. 将对象上传到 S3 中的存储桶。有关说明，请参阅[上传对象](https://docs.aws.amazon.com/AmazonS3/latest/userguide/upload-objects.html)。

1. 复制对象的 ARN。

1. 将以下示例策略中的 Amazon S3 对象读取权限添加到您的[服务执行角色](https://docs.aws.amazon.com/msk/latest/developerguide/msk-connect-service-execution-role.html)。将示例 ARN `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>"
               }
           ]
       }
   ```

1. 要使用 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
   ```

1. 对于 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}
   ```

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

------

## 使用与配置提供程序有关的信息创建自定义工作程序配置
<a name="msk-connect-config-providers-create-custom-config"></a>

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

1. 选择**创建工作程序配置**。

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

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

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

   ```
   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
   ```

1. 单击“创建工作程序配置”。

## 创建连接器
<a name="msk-connect-config-providers-create-connector"></a>

1. 按照[创建新连接器](https://docs.aws.amazon.com/msk/latest/developerguide/mkc-create-connector.html)中的说明，创建新连接器。

1. 选择您在 [创建自定义插件并上传到 S3](#msk-connect-config-providers-create-custom-plugin) 中上传到 S3 存储桶中的 `custom-plugin.zip` 文件作为自定义插件的来源。

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

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

   ```
   #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}
   ```

1. 选择 “**使用自定义配置”，**然后**SourceDebeziumCustomConfig**从 “**工作器配置**” 下拉列表中进行选择。

1. 按照[创建连接器](https://docs.aws.amazon.com/msk/latest/developerguide/mkc-create-connector.html)中说明的其余步骤进行操作。