教學課程:使用組態提供者將敏感資訊外部化 - Amazon Managed Streaming for Apache Kafka

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

教學課程:使用組態提供者將敏感資訊外部化

此範例示範如何使用開放原始碼組態提供者將 Amazon MSK Connect 的敏感資訊外部化。組態供應商讓您可在連接器或工作程序組態中指定變數 (而非純文字),而在連接器中執行的工作程序會在執行期解析這些變數。此做法可避免系統以純文字方式儲存憑證和其他秘密。範例中的組態提供者支援從 AWS Secrets Manager、Amazon S3 和 Systems Manager () 擷取組態參數SSM。在步驟 2 中,您可以了解如何設定服務的儲存和敏感資訊擷取。

考量事項

搭配 MSK Amazon MSK Connect 使用組態提供者時,請考慮下列事項:

  • 使用組態提供者至IAM服務執行角色時,請指派適當的許可。

  • 在工作程序組態中定義組態供應商,並在連接器組態中定義其實作。

  • 如果外掛程式未將這些值定義為秘密,則敏感組態值可能會顯示在連接器日誌中。Kafka Connect 會將未定義的組態值視為與任何其他純文字值相同。如需進一步了解,請參閱 避免秘密顯示在連接器日誌中

  • 根據預設,MSKConnect 會在連接器使用組態提供者時經常重新啟動連接器。若要關閉此重新啟動行為,您可以在連接器組態中將 config.action.reload 值設定為 none

建立自訂外掛程式並上傳至 S3

若要建立自訂外掛程式,請在本機電腦上 msk-config-provider執行下列命令,以建立包含連接器和 的 zip 檔案。

使用終端機視窗和 Debezium 作為連接器來建立自訂外掛程式

使用 AWS CLI以超級使用者身分執行命令,其中包含可讓您存取 AWS S3 儲存貯體的憑證。如需安裝和設定 的資訊 AWS CLI,請參閱 AWS Command Line Interface 使用者指南 中的 入門 AWS CLI。如需搭配 AWS CLIAmazon S3 使用 的資訊,請參閱 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檔案。

    Amazon S3 bucket interface showing a single custom-plugin.zip file in the debezium folder.
  7. 輸入 debezium-custom-plugin 作為外掛程式名稱。輸入描述 (選用),然後選擇建立自訂外掛程式

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

設定不同供應商的參數和許可

您可以在以下三項服務中設定參數值:

  • 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 許可新增至您的服務執行角色。Replace (取代) <arn:aws:secretsmanager:us-east-1:123456789000:secret:MySecret-1234> 機密ARN的 。

  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 許可新增至您的服務執行角色。Replace (取代) <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" } ] }
  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 Object Read 許可新增至您的服務執行角色。取代 <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}

    您也可以將更多組態供應商綁定上述兩個步驟。

使用您組態供應商的資訊來建立自訂工作程序組態

  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. 按一下「建立工作程序組態」。

建立連接器

  1. 根據建立新連接器中的指示來建立新連接器。

  2. 選擇您在 建立自訂外掛程式並上傳至 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. 依照建立連接器中指示的其餘步驟進行。