Externalisierung vertraulicher Informationen mithilfe von Konfigurationsanbietern - Amazon Managed Streaming für Apache Kafka

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Externalisierung vertraulicher Informationen mithilfe von Konfigurationsanbietern

Dieses Beispiel zeigt, wie vertrauliche Informationen für Amazon MSK Connect mithilfe eines Open-Source-Konfigurationsanbieters externalisiert werden. Mit einem Konfigurationsanbieter können Sie Variablen anstelle von Klartext in einer Konnektor- oder Worker-Konfiguration angeben, und Worker, die im Konnektor ausgeführt werden, lösen diese Variablen zur Laufzeit auf. Dadurch wird verhindert, dass Anmeldeinformationen und andere Secrets im Klartext gespeichert werden. Der Konfigurationsanbieter im Beispiel unterstützt das Abrufen von Konfigurationsparametern von AWS Secrets Manager, Amazon S3 und Systems Manager (SSM). In Schritt 2 erfahren Sie, wie Sie das Speichern und Abrufen vertraulicher Informationen für den Service einrichten, den Sie konfigurieren möchten.

Schritt 1: Ein benutzerdefiniertes Plugin erstellen und auf S3 hochladen

Um ein benutzerdefiniertes Plugin zu erstellen, erstellen Sie eine ZIP-Datei, die den Connector enthält, und führen Sie die msk-config-provider folgenden Befehle auf Ihrem lokalen Computer aus.

So erstellen Sie ein benutzerdefiniertes Plugin mit einem Terminalfenster und Debezium als Konnektor

Verwenden Sie die AWS CLI, um Befehle als Superuser mit Anmeldeinformationen auszuführen, mit denen Sie auf Ihren AWS S3-Bucket zugreifen können. Informationen zur Installation und Einrichtung der AWS CLI finden Sie unter Erste Schritte mit der AWS CLI im AWS Command Line Interface Benutzerhandbuch. Informationen zur Verwendung der AWS CLI mit Amazon S3 finden Sie unter Verwenden von Amazon S3 mit der AWS CLI im AWS Command Line Interface Benutzerhandbuch.

  1. Erstellen Sie in einem Terminal-Fenster mit dem folgenden Befehl einen Ordner mit dem Namen custom-plugin in Ihrem Workspace.

    mkdir custom-plugin && cd custom-plugin
  2. Laden Sie die neueste stabile Version des MySQL-Konnektor-Plugins mit dem folgenden Befehl von der Debezium-Website herunter.

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

    Extrahieren Sie die heruntergeladene GZIP-Datei mit dem folgenden Befehl in den Ordner custom-plugin.

    tar xzf debezium-connector-mysql-2.2.0.Final-plugin.tar.gz
  3. Laden Sie die ZIP-Datei des MSK-Konfigurationsanbieters mit dem folgenden Befehl herunter.

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

    Extrahieren Sie die heruntergeladene GZIP-Datei mit dem folgenden Befehl in den Ordner custom-plugin.

    unzip msk-config-providers-0.1.0-with-dependencies.zip
  4. Komprimieren Sie den Inhalt des MSK-Konfigurationsanbieters aus dem obigen Schritt und den benutzerdefinierten Konnektor in einer einzigen Datei mit dem Namen custom-plugin.zip.

    zip -r ../custom-plugin.zip *
  5. Laden Sie die Datei auf S3 hoch, damit sie später referenziert werden kann.

    aws s3 cp ../custom-plugin.zip s3:<S3_URI_BUCKET_LOCATION>
  6. Wählen Sie auf der Amazon-MSK-Konsole im Abschnitt MSK Connect die Option Benutzerdefiniertes Plugin und dann Benutzerdefiniertes Plugin erstellen. Durchsuchen Sie den S3-Bucket unter s3:<S3_URI_BUCKET_LOCATION>, um die benutzerdefinierte Plugin-ZIP-Datei auszuwählen, die Sie gerade hochgeladen haben.

    Amazon S3 bucket interface showing a single custom-plugin.zip file in the debezium folder.
  7. Geben Sie für den Namen des Plugins debezium-custom-plugin ein. Geben Sie optional eine Beschreibung ein und wählen Sie Benutzerdefiniertes Plugin erstellen.

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

Schritt 2: Parameter und Berechtigungen für verschiedene Anbieter konfigurieren

Sie können Parameterwerte in diesen drei Services konfigurieren:

  • Secrets Manager

  • Systems Manager Parameter Store

  • S3 - Simple Storage Service

Wählen Sie eine der folgenden Registerkarten aus, um Anweisungen zur Einrichtung von Parametern und relevanten Berechtigungen für diesen Service zu erhalten.

Configure in Secrets Manager
So konfigurieren Sie Parameterwerte in Secrets Manager
  1. Öffnen Sie die Secrets Manager-Konsole.

  2. Erstellen Sie ein neues Secret, um Ihre Anmeldeinformationen oder Secrets zu speichern. Anweisungen finden Sie unter Create an AWS Secrets Manager Secret im AWS Secrets Manager Benutzerhandbuch.

  3. Kopieren Sie den ARN Ihres Secrets.

  4. Fügen Sie die Secrets-Manager-Berechtigungen aus der folgenden Beispielrichtlinie zu der Service-Ausführungsrolle hinzu. Ersetze <arn:aws:secretsmanager:us-east- 1:123456789000:secret: -1234> durch den ARN deines Secrets. MySecret

  5. Fügen Sie Worker-Konfiguration und Konnektor-Anweisungen hinzu.

    { "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. Um den Secrets-Manager-Konfigurationsanbieter zu verwenden, kopieren Sie die folgenden Code-Zeilen in das Worker-Konfigurations-Textfeld in Schritt 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. Kopieren Sie für den Secrets-Manager-Konfigurationsanbieter die folgenden Code-Zeilen in die Konnektor-Konfiguration in Schritt 4.

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

Sie können den obigen Schritt auch mit weiteren Konfigurationsanbietern verwenden.

Configure in Systems Manager Parameter Store
So konfigurieren Sie Parameterwerte im Systems Manager Parameter Store
  1. Öffnen Sie die Systems Manager-Konsole.

  2. Wählen Sie im Navigationsbereich Parameter Store (Parameterspeicher) aus.

  3. Erstellen Sie einen neuen Parameter, der im Systems Manager gespeichert werden soll. Anweisungen finden Sie im AWS Systems Manager Benutzerhandbuch unter Erstellen eines Systems Manager Manager-Parameters (Konsole).

  4. Kopieren Sie den ARN Ihres Parameters.

  5. Fügen Sie die Systems-Manager-Berechtigungen aus der folgenden Beispielrichtlinie zu der Service-Ausführungsrolle hinzu. Ersetzen Sie <arn:aws:ssm:us-east- 1:123456789000:parameter/ > durch den ARN Ihres Parameters. 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" } ] }
  6. Um den Parameterspeicher-Konfigurationsanbieter zu verwenden, kopieren Sie die folgenden Code-Zeilen in das Worker-Konfigurations-Textfeld in Schritt 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. Kopieren Sie für den Parameterspeicher-Konfigurationsanbieter die folgenden Code-Zeilen in die Konnektor-Konfiguration in Schritt 5.

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

    Sie können den obigen Schritt auch mit weiteren Konfigurationsanbietern bündeln.

Configure in Amazon S3
So konfigurieren Sie Objekte/Dateien in Amazon S3
  1. Öffnen Sie die Amazon S3-Konsole.

  2. Laden Sie Ihr Objekt in einen Bucket in S3 hoch. Eine Anleitung finden Sie unter Hochladen von Objekten.

  3. Kopieren Sie den ARN Ihres Objekts.

  4. Fügen Sie die Amazon-S3-Objekt-Leseberechtigungen aus der folgenden Beispielrichtlinie zu der Service-Ausführungsrolle hinzu. Ersetzen Sie <arn:aws:s3:::MY_S3_BUCKET/path/to/custom-plugin.zip> durch den ARN Ihres Objekts.

    { "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. Um den Amazon-S3-Konfigurationsanbieter zu verwenden, kopieren Sie die folgenden Code-Zeilen in das Worker-Konfigurations-Textfeld in Schritt 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. Kopieren Sie für den Amazon-S3-Konfigurationsanbieter die folgenden Code-Zeilen in die Konnektor-Konfiguration in Schritt 4.

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

    Sie können die obigen zwei Schritte auch mit weiteren Konfigurationsanbietern bündeln.

Schritt 3: Erstellen Sie eine benutzerdefinierte Worker-Konfiguration mit Informationen zu Ihrem Konfigurationsanbieter

  1. Wählen Sie im Abschnitt Amazon MSK Connect die Option Worker-Konfigurationen.

  2. Wählen Sie Worker-Konfiguration erstellen.

  3. Geben Sie SourceDebeziumCustomConfig in das Textfeld für den Namen der Worker-Konfiguration ein. Die Beschreibung ist optional.

  4. Kopieren Sie den entsprechenden Konfigurations-Code basierend auf den gewünschten Anbietern und fügen Sie ihn in das Textfeld Worker-Konfiguration ein.

  5. Dies ist ein Beispiel der Worker-Konfiguration für alle drei Anbieter:

    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. Wählen Sie Worker-Konfiguration erstellen.

Schritt 4: Den Konnektor erstellen

  1. Erstellen Sie einen neuen Konnektor anhand der Anweisungen unter Neuen Konnektor erstellen.

  2. Wählen Sie die custom-plugin.zip-Datei, die Sie in Schritt 1: Ein benutzerdefiniertes Plugin erstellen und auf S3 hochladen als Quelle für das benutzerdefinierte Plugin in Ihren S3-Bucket hochgeladen haben.

  3. Kopieren Sie den entsprechenden Konfigurations-Code basierend auf den gewünschten Anbietern und fügen Sie ihn in das Feld Konnektor-Konfiguration ein.

  4. Dies ist ein Beispiel für die Konnektor-Konfiguration für alle drei Anbieter:

    #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. Wählen Sie Benutzerdefinierte Konfiguration verwenden und wählen Sie eine Option aus der Dropdownliste Worker-Konfiguration aus SourceDebeziumCustomConfig.

  6. Folgen Sie den weiteren Schritten aus den Anweisungen unter Konnektor erstellen.

Überlegungen

Beachten Sie bei der Verwendung des MSK-Konfigurationsanbieters mit Amazon MSK Connect Folgendes:

  • Weisen Sie der IAM-Service-Ausführungsrolle die entsprechenden Berechtigungen zu, wenn Sie die Konfigurationsanbieter verwenden.

  • Definieren Sie die Konfigurationsanbieter in Worker-Konfigurationen und ihre Implementierung in der Konnektor-Konfiguration.

  • Vertrauliche Konfigurationswerte können in Konnektor-Protokollen erscheinen, wenn ein Plugin diese Werte nicht als Secret definiert. Kafka Connect behandelt undefinierte Konfigurationswerte genauso wie jeden anderen Klartext-Wert. Weitere Informationen hierzu finden Sie unter Verhindern, dass Secrets in Konnektor-Protokollen erscheinen.

  • Standardmäßig startet MSK Connect einen Konnektor häufig neu, wenn der Konnektor einen Konfigurationsanbieter verwendet. Um dieses Neustartverhalten zu deaktivieren, können Sie in der Konnektor-Konfiguration den Wert config.action.reload auf none festlegen.