Konfiguration Ihres Amazon-MSK-Clusters und Ihres Amazon-VPC-Netzwerks für Lambda - AWS Lambda

Konfiguration Ihres Amazon-MSK-Clusters und Ihres Amazon-VPC-Netzwerks für Lambda

Um Ihre AWS Lambda-Funktion mit Ihrem Amazon-MSK-Cluster zu verbinden, müssen Sie Ihren Cluster und die Amazon Virtual Private Cloud (VPC), in der er sich befindet, korrekt konfigurieren. Auf dieser Seite wird beschrieben, wie Sie Ihren Cluster und Ihre VPC konfigurieren. Wenn Ihr Cluster und Ihre VPC bereits ordnungsgemäß konfiguriert sind, lesen Sie unter Konfigurieren von Amazon MSK-Ereignisquellen für Lambda nach, wie Sie die Zuordnung von Ereignisquellen konfigurieren.

Überblick über die Anforderungen an die Netzwerkkonfiguration für Lambda- und MSK-Integrationen

Die für eine Lambda- und MSK-Integration erforderliche Netzwerkkonfiguration hängt von der Netzwerkarchitektur Ihrer Anwendung ab. An dieser Integration sind drei Hauptressourcen beteiligt: der Amazon-MSK-Cluster, die Lambda-Funktion und die Lambda-Zuordnung von Ereignisquellen. Jede dieser Ressourcen befindet sich in einer anderen VPC:

  • Ihr Amazon-MSK-Cluster befindet sich normalerweise in einem privaten Subnetz einer VPC, die Sie verwalten.

  • Ihre Lambda-Funktion befindet sich in einer von AWS verwalteten VPC, die Lambda gehört.

  • Ihre Lambda-Zuordnung von Ereignisquellen befindet sich in einer anderen von AWS verwalteten VPC, die Lambda gehört, getrennt von der VPC, die Ihre Funktion enthält.

Die Zuordnung von Ereignisquellen ist die Zwischenressource zwischen dem MSK-Cluster und der Lambda-Funktion. Die Zuordnung von Ereignisquellen hat zwei Hauptaufgaben. Zunächst fragt sie Ihren MSK-Cluster nach neuen Nachrichten ab. Anschließend wird Ihre Lambda-Funktion mit diesen Nachrichten aufgerufen. Da sich diese drei Ressourcen in unterschiedlichen VPCs befinden, erfordern sowohl der Abruf- als auch der Aufrufvorgang VPC-übergreifende Netzwerkaufrufe.

Die Anforderungen an die Netzwerkkonfiguration für Ihre Zuordnung von Ereignisquellen hängen davon ab, ob der Bereitstellungsmodus oder der On-Demand-Modus verwendet wird, wie im folgenden Diagramm dargestellt:

Vergleich der Netzwerkaufrufe für Kafka-ESMs im On-Demand-Modus versus im bereitgestellten Modus

Die Art und Weise, wie die Lambda-Zuordnung von Ereignisquellen Ihren MSK-Cluster nach neuen Nachrichten abfragt, ist in beiden Modi dieselbe. Um eine Verbindung zwischen Ihrer Zuordnung von Ereignisquellen und Ihrem MSK-Cluster herzustellen, erstellt Lambda in Ihrem privaten Subnetz eine Hyperplane-ENI (oder verwendet eine vorhandene, falls verfügbar), um eine sichere Verbindung herzustellen. Wie im Diagramm dargestellt, verwendet diese Hyperplane-ENI die Subnetz- und Sicherheitsgruppenkonfiguration Ihres MSK-Clusters, nicht Ihre Lambda-Funktion.

Nachdem Sie die Nachricht vom Cluster abgerufen haben, ist die Art und Weise, wie Lambda Ihre Funktion aufruft, in jedem Modus unterschiedlich:

  • Im Bereitstellungsmodus verarbeitet Lambda automatisch die Verbindung zwischen der VPC für die Zuordnung von Ereignisquellen und der Funktions-VPC. Sie benötigen also keine zusätzlichen Netzwerkkomponenten, um Ihre Funktion erfolgreich aufzurufen.

  • Im On-Demand-Modus ruft Ihre Lambda-Zuordnung von Ereignisquellen Ihre Funktion über einen Pfad durch Ihre vom Kunden verwaltete VPC auf. Aus diesem Grund müssen Sie entweder ein NAT-Gateway im öffentlichen Subnetz Ihrer VPC oder AWS PrivateLink-Endpunkte im privaten Subnetz der VPC konfigurieren, die Zugriff auf Lambda, AWS Security Token Service (STS) und optional AWS Secrets Manager bieten. Die korrekte Konfiguration einer dieser Optionen ermöglicht eine Verbindung zwischen Ihrer VPC und der von Lambda verwalteten Laufzeit-VPC, die zum Aufrufen Ihrer Funktion erforderlich ist.

Ein NAT-Gateway ermöglicht Ressourcen in Ihrem privaten Subnetz den Zugriff auf das öffentliche Internet. Bei dieser Konfiguration wird Ihr Datenverkehr über das Internet geleitet, bevor die Lambda-Funktion aufgerufen wird. AWS PrivateLink-Endpunkte ermöglichen es privaten Subnetzen, sich sicher mit AWS-Services oder anderen privaten VPC-Ressourcen zu verbinden, ohne das öffentliche Internet zu nutzen. Weitere Informationen zur Konfiguration dieser Ressourcen finden Sie unter Konfiguration eines NAT-Gateways für eine MSK-Ereignisquelle oder Konfiguration von AWS PrivateLink-Endpunkten für eine MSK-Ereignisquelle.

Bisher gingen wir davon aus, dass sich Ihr MSK-Cluster in einem privaten Subnetz innerhalb Ihrer VPC befindet, was der häufigste Fall ist. Selbst wenn sich Ihr MSK-Cluster in einem öffentlichen Subnetz innerhalb Ihrer VPC befindet, müssen Sie AWS PrivateLink-Endpunkte konfigurieren, um eine sichere Verbindung zu gewährleisten. In der folgenden Tabelle sind die Anforderungen an die Netzwerkkonfiguration zusammengefasst, je nachdem, wie Sie Ihren MSK-Cluster und die Lambda-Zuordnung von Ereignisquellen konfigurieren:

Standort des MSK-Clusters (in der vom Kunden verwalteten VPC) Skalierungsmodus der Lambda-Zuordnung von Ereignisquellen Erforderliche Netzwerkkonfiguration

Privates Subnetz

On-Demand-Modus

NAT-Gateway (im öffentlichen Subnetz Ihrer VPC) oder AWS PrivateLink-Endpunkte (im privaten Subnetz Ihrer VPC), um Zugriff auf Lambda, AWS STS und optional Secrets Manager zu ermöglichen.

Öffentliches Subnetz

On-Demand-Modus

AWS PrivateLink-Endpunkte (im öffentlichen Subnetz Ihrer VPC), um Zugriff auf Lambda, AWS STS und optional Secrets Manager zu ermöglichen.

Privates Subnetz

Modus bereitgestellter Kapazität

Keine

Öffentliches Subnetz

Modus bereitgestellter Kapazität

Keine

Darüber hinaus müssen die mit Ihrem MSK-Cluster verknüpften Sicherheitsgruppen den Datenverkehr über die richtigen Ports zulassen. Stellen Sie sicher, dass Sie die folgenden Regeln für Sicherheitsgruppen konfiguriert haben:

  • Regeln für eingehenden Datenverkehr – Erlauben Sie den gesamten Datenverkehr auf dem standardmäßigen Broker-Port. Der von MSK verwendete Port hängt vom Authentifizierungstyp des Clusters ab: 9098 für IAM-Authentifizierung, 9096 für SASL/SCRAM und 9094 für TLS. Alternativ können Sie eine selbstreferenzierende Regel für Sicherheitsgruppen verwenden, um den Zugriff von Instances innerhalb derselben Sicherheitsgruppe zuzulassen.

  • Regeln für ausgehenden Datenverkehr – Erlauben Sie den gesamten Datenverkehr an Port 443 für externe Ziele, wenn Ihre Funktion mit anderen AWS-Services kommunizieren muss. Alternativ können Sie eine selbstreferenzierende Regel für Sicherheitsgruppen verwenden, um den Zugriff auf den Broker einzuschränken, wenn Sie nicht mit anderen AWS-Services kommunizieren müssen.

  • Regeln für eingehenden Datenverkehr auf Amazon-VPC-Endpunkten – Wenn Sie einen Amazon-VPC-Endpunkt verwenden, muss die mit dem Endpunkt verbundene Sicherheitsgruppe eingehenden Datenverkehr auf Port 443 von der Sicherheitsgruppe des Clusters zulassen.

Konfiguration eines NAT-Gateways für eine MSK-Ereignisquelle

Sie können ein NAT-Gateway so konfigurieren, dass Ihre Zuordnung von Ereignisquellen Nachrichten von Ihrem Cluster abfragen und die Funktion über einen Pfad durch Ihre VPC aufrufen kann. Dies ist nur erforderlich, wenn Ihre Zuordnung von Ereignisquellen den On-Demand-Modus verwendet und sich Ihr Cluster in einem privaten Subnetz Ihrer VPC befindet. Wenn sich Ihr Cluster in einem öffentlichen Subnetz Ihrer VPC befindet oder Ihre Zuordnung von Ereignisquellen den Bereitstellungsmodus verwendet, müssen Sie kein NAT-Gateway konfigurieren.

Ein NAT-Gateway ermöglicht Ressourcen in einem privaten Subnetz den Zugriff auf das öffentliche Internet. Wenn Sie eine private Verbindung zu Lambda benötigen, finden Sie stattdessen weitere Informationen unter Konfiguration von AWS PrivateLink-Endpunkten für eine MSK-Ereignisquelle.

Nachdem Sie Ihr NAT-Gateway konfiguriert haben, müssen Sie die entsprechenden Routing-Tabellen konfigurieren. Dadurch kann der Datenverkehr aus Ihrem privaten Subnetz über das NAT-Gateway in das öffentliche Internet geleitet werden.

Diagramm einer vom Kunden verwalteten VPC, die ein NAT-Gateway verwendet, um den Datenverkehr vom privaten Subnetz in das öffentliche Internet weiterzuleiten.

Die folgenden Schritte führen Sie durch die Konfiguration eines NAT-Gateways über die Konsole. Wiederholen Sie diese Schritte bei Bedarf für jede Availability Zone (AZ).

So konfigurieren Sie ein NAT-Gateway und das richtige Routing (Konsole)
  1. Folgen Sie den Schritten unter Erstellen eines NAT-Gateways und beachten Sie dabei Folgendes:

    • NAT-Gateways sollten sich immer in einem öffentlichen Subnetz befinden. Erstellen Sie NAT-Gateways mit öffentlicher Konnektivität.

    • Wenn Ihr MSK-Cluster über mehrere AZs repliziert wird, erstellen Sie ein NAT-Gateway pro AZ. In jeder AZ sollte Ihre VPC beispielsweise ein privates Subnetz mit Ihrem Cluster und ein öffentliches Subnetz mit Ihrem NAT-Gateway haben. Bei einem Setup mit drei AZs verfügen Sie über drei private Subnetze, drei öffentliche Subnetze und drei NAT-Gateways.

  2. Nachdem Sie Ihr NAT-Gateway erstellt haben, öffnen Sie die Amazon VPC-Konsole und wählen Sie im linken Menü Routing-Tabellen aus.

  3. Klicken Sie auf Create Route Table (Routing-Tabelle erstellen).

  4. Ordnen Sie diese Routing-Tabelle der VPC zu, die Ihren MSK-Cluster enthält. Geben Sie optional einen Namen für Ihre Routing-Tabelle ein.

  5. Klicken Sie auf Create Route Table (Routing-Tabelle erstellen).

  6. Wählen Sie die Routing-Tabelle aus, die Sie gerade erstellt haben.

  7. Wählen Sie auf der Registerkarte Subnetzzuordnungen die Option Subnetzzuordnungen bearbeiten aus.

    • Ordnen Sie diese Routing-Tabelle dem privaten Subnetz zu, das Ihren MSK-Cluster enthält.

  8. Wählen Sie Routen bearbeiten aus.

  9. Wählen Sie Route hinzufügen aus:

    1. Geben Sie für Ziel die Zeichenfolge 0.0.0.0/0 an.

    2. Wählen Sie für Ziel die Option NAT-Gateway aus.

    3. Wählen Sie im Suchfeld das in Schritt 1 erstellte NAT-Gateway aus. Dies sollte das NAT-Gateway in derselben AZ sein wie das private Subnetz, das Ihren MSK-Cluster enthält (das private Subnetz, das Sie dieser Routing-Tabelle in Schritt 6 zugeordnet haben).

  10. Wählen Sie Änderungen speichern aus.

Sie können AWS PrivateLink-Endpunkte so konfigurieren, dass sie Nachrichten von Ihrem Cluster abfragen, und die Funktion über einen Pfad durch Ihre VPC aufrufen. Diese Endpunkte sollten Ihrem MSK-Cluster den Zugriff auf Folgendes ermöglichen:

Die Konfiguration von PrivateLink-Endpunkten ist nur erforderlich, wenn Ihre Zuordnung von Ereignisquellen den On-Demand-Modus verwendet. Wenn Ihre Zuordnung von Ereignisquellen den Bereitstellungsmodus verwendet, richtet Lambda die erforderlichen Verbindungen für Sie ein.

PrivateLink-Endpunkte ermöglichen einen sicheren, privaten Zugriff auf AWS-Services über AWS PrivateLink. Alternativ können Sie ein NAT-Gateway konfigurieren, um Ihrem MSK-Cluster Zugriff auf das öffentliche Internet zu ermöglichen (siehe Konfiguration eines NAT-Gateways für eine MSK-Ereignisquelle).

Nachdem Sie Ihre VPC-Endpunkte konfiguriert haben, sollte Ihr MSK-Cluster direkten und privaten Zugriff auf Lambda, STS und optional Secrets Manager haben.

Diagramm einer vom Kunden verwalteten VPC mit AWS PrivateLink-Endpunkten für den Zugriff auf AWS-Services.

Die folgenden Schritte führen Sie durch die Konfiguration eines PrivateLink-Endpunkts über die Konsole. Wiederholen Sie diese Schritte nach Bedarf für jeden Endpunkt (Lambda, STS, Secrets Manager).

So konfigurieren Sie VPC-PrivateLink-Endpunkte (Konsole)
  1. Öffnen Sie die Amazon VPC-Konsole und wählen Sie im linken Menü Endpunkte aus.

  2. Wählen Sie Endpunkt erstellen aus.

  3. Geben Sie optional einen Namen für Ihren Endpunkt ein.

  4. Wählen Sie für Typ die Option AWS-Services aus.

  5. Beginnen Sie unter Services mit der Eingabe des Namens des Service. Um beispielsweise einen Endpunkt für die Verbindung mit Lambda zu erstellen, geben Sie lambda in das Suchfeld ein.

  6. In den Ergebnissen sollte der Service-Endpunkt in der aktuellen Region angezeigt werden. In der Region USA Ost (Nord-Virginia) sollte beispielsweise com.amazonaws.us-east-2.lambda angezeigt werden. Wählen Sie diesen Service aus.

  7. Wählen Sie unter Netzwerkeinstellungen die VPC aus, die Ihren MSK-Cluster enthält.

  8. Wählen Sie unter Subnetze die AZs aus, in denen sich Ihr MSK-Cluster befindet.

    • Wählen Sie für jede AZ unter Subnetz-ID das private Subnetz aus, das Ihren MSK-Cluster enthält.

  9. Wählen Sie unter Sicherheitsgruppen die Ihrem MSK-Cluster zugeordneten Sicherheitsgruppen aus.

  10. Wählen Sie Endpunkt erstellen aus.

Standardmäßig verfügen Amazon VPC-Endpunkte über offene IAM-Richtlinien, die einen umfassenden Zugriff auf Ressourcen ermöglichen. Es empfiehlt sich, diese Richtlinien auf die Durchführung der erforderlichen Aktionen über diesen Endpunkt zu beschränken. Für Ihren Secrets-Manager-Endpunkt können Sie beispielsweise dessen Richtlinie so ändern, dass nur die Ausführungsrolle Ihrer Funktion auf das Secret zugreifen kann.

Beispiel VPC-Endpunktrichtlinie – Secrets-Manager-Endpunkt
{ "Statement": [ { "Action": "secretsmanager:GetSecretValue", "Effect": "Allow", "Principal": { "AWS": [ "arn:aws::iam::123456789012:role/my-role" ] }, "Resource": "arn:aws::secretsmanager:us-west-2:123456789012:secret:my-secret" } ] }

Für die AWS STS- und Lambda-Endpunkte können Sie den aufrufenden Prinzipal auf den Lambda-Service-Prinzipal beschränken. Stellen Sie jedoch sicher, dass Sie in diesen Richtlinien "Resource": "*" verwenden.

Beispiel VPC-Endpunktrichtlinie – AWS STS-Endpunkt
{ "Statement": [ { "Action": "sts:AssumeRole", "Effect": "Allow", "Principal": { "Service": [ "lambda.amazonaws.com" ] }, "Resource": "*" } ] }
Beispiel VPC-Endpunktrichtlinie – Lambda-Endpunkt
{ "Statement": [ { "Action": "lambda:InvokeFunction", "Effect": "Allow", "Principal": { "Service": [ "lambda.amazonaws.com" ] }, "Resource": "*" } ] }