

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 教學課程：使用組態提供者將敏感資訊外部化
<a name="msk-connect-config-provider"></a>

此範例說明如何使用開放原始碼組態供應商將 Amazon MSK Connect 的敏感資訊外部化。組態供應商讓您可在連接器或工作程序組態中指定變數 (而非純文字)，而在連接器中執行的工作程序會在執行期解析這些變數。此做法可避免系統以純文字方式儲存憑證和其他秘密。範例中的組態提供者支援從 AWS Secrets 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 《 使用者指南*》中的 [CLI AWS 入門](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-getting-started.html)。如需搭配 Amazon S3 使用 AWS CLI 的詳細資訊，請參閱*AWS Command Line Interface 《 使用者指南*》中的[搭配 AWS CLI 使用 Amazon S3](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 Plug-in** 的最新穩定版本。

   ```
   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_tw/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_tw/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 來取代 *<arn:aws:ssm:us-east-1:123456789000:parameter/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"
               }
           ]
       }
   ```

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 中設定物件/檔案**

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 Object Read 許可新增至您的[服務執行角色](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)中指示的其餘步驟進行。