Verbinden von ausgehenden Netzwerken mit Ressourcen in einer VPC - AWS Lambda

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.

Verbinden von ausgehenden Netzwerken mit Ressourcen in einer VPC

Sie können eine Lambda-Funktion konfigurieren, um Verbindungen mit privaten Subnetzen in einer Virtual Private Cloud (VPC) in Ihrem AWS-Konto herzustellen. Verwenden Sie Amazon Virtual Private Cloud (Amazon VPC) zum Erstellen eines privaten Netzwerks für Ressourcen wie z. B. Datenbanken, Cache-Instances oder interne Services. Verbinden Sie Ihre Funktion mit der VPC, um auf private Ressourcen zuzugreifen, während die Funktion ausgeführt wird. Dieser Abschnitt enthält eine Zusammenfassung der Lambda-VPC-Verbindungen. Weitere Informationen zum VPC-Netzwerk in Lambda finden Sie unter Private Netzwerke mit VPC.

Tipp

Um Ihre Lambda-Funktion für den Zugriff auf eine VPC und ein Subnetz zu konfigurieren, können Sie die Lambda-Konsole oder die API verwenden.

Informationen zum Konfigurieren Ihrer Funktion finden Sie im VpcConfig Abschnitt unter CreateFunction . Detaillierte Schritte finden Sie unter Konfigurieren des VPC-Zugriffs (Konsole) und Konfigurieren des VPC-Zugriffs (API).

Wenn Sie eine Funktion mit einer VPC verbinden, weißt Lambda eine Hyperplane ENI (Elastic-Network-Schnittstelle) für jedes Subnetz in der VPC-Konfiguration Ihrer Funktion zu. Lambda erstellt eine Hyperplane ENI, wenn zum ersten Mal eine eindeutige Kombination aus Subnetz und Sicherheitsgruppe für eine VPC-basierte Funktion in einem Konto definiert wird.

Während Lambda eine Hyperplane ENI erstellt, können Sie keine weiteren Operationen für diese Funktion ausführen, z. B. Versionen erstellen oder den Funktionscode aktualisieren. Bei neuen Funktionen können Sie die Funktion erst dann aufrufen, wenn sich ihr Zustand von Pending zu Active ändert. Bei vorhandenen Funktionen können Sie weiterhin eine frühere Version aufrufen, während die Aktualisierung durchgeführt wird. Details zum Hyperplane-ENI-Lebenszyklus finden Sie unter Lambda Hyperplane ENIs.

Lambda-Funktionen können keine direkte Verbindung mit einer VPC mit Dedicated-Instance-Tenancy herstellen. Zum Herstellen einer Verbindung mit Ressourcen in einer dedizierten VPC verbinden Sie sie mit einer zweiten VPC mit Standard-Tenancy.

Verwalten von VPC-Verbindungen

Mehrere -Funktionen können eine Netzwerkschnittstelle gemeinsam nutzen, wenn die Funktionen dasselbe Subnetz und dieselbe Sicherheitsgruppe verwenden. Das Verbinden zusätzlicher Funktionen mit derselben VPC-Konfiguration (Subnetz und Sicherheitsgruppe), die über eine vorhandene Lambda-verwaltete Netzwerkschnittstelle verfügt, ist viel schneller als das Erstellen einer neuen Netzwerkschnittstelle.

Wenn Ihre Funktionen für einen längeren Zeitraum nicht aktiv sind, fordert Lambda die Netzwerkschnittstellen zurück, und die Funktionen gehen in den Zustand Idle über. Um eine Leerlauffunktion zu reaktivieren, rufen Sie sie auf. Dieser Aufruf schlägt fehl, und die Funktion wechselt wieder in einen Pending-Zustand, bis eine Netzwerkschnittstelle zur Verfügung steht.

Wenn Sie Ihre Funktion aktualisieren, um auf eine andere VPC zuzugreifen, trennt sie die Verbindung von der Hyperplane ENI zur vorherigen VPC. Der Vorgang zum Aktualisieren der Verbindung zu einer neuen VPC kann mehrere Minuten dauern. Während dieser Zeit verbindet Lambda Aufrufe der Funktion mit der vorherigen VPC. Nachdem das Update abgeschlossen ist, wird bei neuen Aufrufen die neue VPC verwendet und die Lambda-Funktion ist nicht mehr mit der älteren VPC verbunden.

Bei kurzlebigen Vorgängen, z. B. DynamoDB-Abfragen, ist der Latenzaufwand beim Einrichten einer TCP-Verbindung möglicherweise höher als der Vorgang selbst. Um die Wiederverwendung der Verbindung für kurzlebige/selten aufgerufene Funktionen sicherzustellen, empfehlen wir Ihnen die Verwendung von TCP-Keep-Alive für Verbindungen, die während der Funktionsinitialisierung erstellt wurden, um zu vermeiden, dass neue Verbindungen für nachfolgende Aufrufe erstellt werden. Weitere Informationen zur Wiederverwendung von Verbindungen mit Keep-Alive finden Sie in der Lambda-Dokumentation zur Wiederverwendung von Verbindungen.

Ausführungsrolle und Benutzerberechtigungen

Lambda verwendet die Berechtigungen Ihrer Funktion, um Netzwerkschnittstellen zu erstellen und zu verwalten. Um eine Verbindung zu einer VPC herzustellen, muss die Ausführungsrolle Ihrer Funktion die folgenden Berechtigungen besitzen.

Berechtigungen für die Ausführungsrolle
  • ec2:CreateNetworkInterface

  • ec2:DescribeNetworkInterfaces – Diese Aktion funktioniert nur, wenn sie für alle Ressourcen () zulässig ist"Resource": "*".

  • ec2:DeleteNetworkInterface – Wenn Sie in DeleteNetworkInterface der Ausführungsrolle keine Ressourcen-ID für angeben, kann Ihre Funktion möglicherweise nicht auf die VPC zugreifen. Geben Sie entweder eine eindeutige Ressourcen-ID an oder schließen Sie alle Ressourcen-IDs ein, z. B. "Resource": "arn:aws:ec2:us-west-2:123456789012:*/*".

  • ec2:AssignPrivateIpAddresses

  • ec2:UnassignPrivateIpAddresses

Diese Berechtigungen sind in der von AWS verwalteten Richtlinie enthaltenAWSLambdaVPCAccessExecutionRole. Beachten Sie, dass diese Berechtigungen nur zum Erstellen von ENIs und nicht zum Aufrufen Ihrer VPC-Funktion erforderlich sind. Mit anderen Worten, Sie können Ihre VPC-Funktion weiterhin erfolgreich aufrufen, selbst wenn Sie diese Berechtigungen aus Ihrer Ausführungsrolle entfernen. Um Ihre Lambda-Funktion vollständig von der VPC zu trennen, aktualisieren Sie die VPC-Konfigurationseinstellungen der Funktion mithilfe der Konsole oder der UpdateFunctionConfiguration API.

Wenn Sie die VPC-Konnektivität konfigurieren, verwendet Lambda Ihre Berechtigungen zur Überprüfung der Netzwerkressourcen. Um eine Funktion für die Herstellung von Verbindungen mit einer VPC zu konfigurieren, benötigt Ihr Benutzer die folgenden Berechtigungen:

Benutzerberechtigungen
  • ec2:DescribeSecurityGroups

  • ec2:DescribeSubnets

  • ec2:DescribeVpcs

Konfigurieren des VPC-Zugriffs (Konsole)

Wenn Sie mit Ihren IAM-Berechtigungen nur Lambda-Funktionen erstellen können, die eine Verbindung mit Ihrer VPC herstellen, müssen Sie die VPC bei Funktionserstellung konfigurieren. Wenn Sie mit Ihren IAM-Berechtigungen Funktionen erstellen können, die nicht mit Ihrer VPC verbunden sind, können Sie die VPC-Konfiguration nach der Funktionserstellung hinzufügen.

So konfigurieren Sie eine VPC bei der Funktionserstellung
  1. Öffnen Sie die Seite Funktionen der Lambda-Konsole.

  2. Wählen Sie Create function (Funktion erstellen).

  3. Geben Sie unter Basic information (Grundlegende Informationen) bei Function name (Funktionsname) einen Namen für Ihre Funktion ein.

  4. Erweiterten Sie Advanced settings (Erweiterte Einstellungen).

  5. Wählen Sie Enable VPC (VPC aktivieren) und wählen Sie dann die VPC aus, auf die die Funktion zugreifen soll.

  6. (Optional) Um ausgehenden IPv6-Verkehr zuzulassen, wählen Sie Allow IPv6 traffic for dual-stack subnets (IPv6-Verkehr für Dual-Stack-Subnetze zulassen) aus.

  7. Wählen Sie Subnetze und Sicherheitsgruppen aus. Wenn Sie Allow IPv6 traffic for dual-stack subnets (IPv6-Verkehr für Dual-Stack-Subnetze zulassen) ausgewählt haben, müssen alle ausgewählten Subnetze einen IPv4-CIDR-Block und einen IPv6-CIDR-Block besitzen.

    Anmerkung

    Verbinden Sie Ihre Funktion für den Zugriff auf private Ressourcen mit privaten Subnetzen. Wenn für Ihre Funktion ein Internetzugang erforderlich ist, verwenden Sie Network Address Translation (NAT, Netzwerkadressenübersetzung). Durch die Verbindung einer Funktion mit einem öffentlichen Subnetz erhält sie weder Internetzugang noch eine öffentliche IP-Adresse.

  8. Wählen Sie Create function (Funktion erstellen).

So konfigurieren Sie eine VPC für eine vorhandene Funktion
  1. Öffnen Sie die Seite Funktionen der Lambda-Konsole.

  2. Wählen Sie eine Funktion aus.

  3. Wählen Sie Konfiguration und dann VPC aus.

  4. Wählen Sie unter VPC die Option Edit (Bearbeiten) aus.

  5. Wählen Sie die VPC, auf die die Funktion zugreifen soll.

  6. (Optional) Um ausgehenden IPv6-Verkehr zuzulassen, wählen Sie Allow IPv6 traffic for dual-stack subnets (IPv6-Verkehr für Dual-Stack-Subnetze zulassen) aus.

  7. Wählen Sie Subnetze und Sicherheitsgruppen aus. Wenn Sie Allow IPv6 traffic for dual-stack subnets (IPv6-Verkehr für Dual-Stack-Subnetze zulassen) ausgewählt haben, müssen alle ausgewählten Subnetze einen IPv4-CIDR-Block und einen IPv6-CIDR-Block besitzen.

    Anmerkung

    Verbinden Sie Ihre Funktion für den Zugriff auf private Ressourcen mit privaten Subnetzen. Wenn für Ihre Funktion ein Internetzugang erforderlich ist, verwenden Sie Network Address Translation (NAT, Netzwerkadressenübersetzung). Durch die Verbindung einer Funktion mit einem öffentlichen Subnetz erhält sie weder Internetzugang noch eine öffentliche IP-Adresse.

  8. Wählen Sie Save aus.

Konfigurieren des VPC-Zugriffs (API)

Um eine Lambda-Funktion mit einer VPC zu verbinden, können Sie die folgenden API-Operationen verwenden:

Um eine Funktion zu erstellen und sie mithilfe der AWS Command Line Interface (AWS CLI) mit einer VPC zu verbinden, können Sie den Befehl create-function mit der Option VpcConfig verwenden. Im folgenden Beispiel wird eine Funktion mit einer VPC-Verbindung erstellt. Die Funktion hat Zugriff auf zwei Subnetze und eine Sicherheitsgruppe und ermöglicht ausgehenden IPv6-Verkehr.

aws lambda create-function --function-name my-function \ --runtime nodejs20.x --handler index.js --zip-file fileb://function.zip \ --role arn:aws:iam::123456789012:role/lambda-role \ --vpc-config Ipv6AllowedForDualStack=true,SubnetIds=subnet-071f712345678e7c8,subnet-07fd123456788a036,SecurityGroupIds=sg-085912345678492fb

Um eine vorhandene Funktion mit einer VPC zu verbinden, verwenden Sie den Befehl update-function-configuration mit der Option vpc-config.

aws lambda update-function-configuration --function-name my-function \ --vpc-config SubnetIds=subnet-071f712345678e7c8,subnet-07fd123456788a036,SecurityGroupIds=sg-085912345678492fb

Um Ihre Funktion von einer VPC zu trennen, aktualisieren Sie die Funktionskonfiguration mit einer leeren Liste der Subnetze und Sicherheitsgruppen.

aws lambda update-function-configuration --function-name my-function \ --vpc-config SubnetIds=[],SecurityGroupIds=[]

Verwenden von IAM-Bedingungsschlüsseln für VPC-Einstellungen

Sie können Lambda-spezifische Bedingungsschlüssel für VPC-Einstellungen verwenden, um zusätzliche Berechtigungssteuerungen für Ihre Lambda-Funktionen bereitzustellen. Sie können beispielsweise festlegen, dass alle Funktionen in Ihrer Organisation mit einer VPC sein müssen. Sie können auch die Subnetze und Sicherheitsgruppen angeben, die die Benutzer der Funktion verwenden können bzw. nicht verwenden können.

Lambda unterstützt die folgenden IAM-Bedingungsschlüssel:

  • lambda:VpcIds – Zulassen oder Verweigern einer oder mehrerer VPCs.

  • lambda:SubnetIds – Ein oder mehrere Subnetze zulassen oder verweigern.

  • lambda:SecurityGroupIds – Zulassen oder Verweigern einer oder mehrerer Sicherheitsgruppen.

Die Lambda-API-Operationen CreateFunction und UpdateFunctionConfiguration unterstützen diese Bedingungsschlüssel. Weitere Informationen zur Verwendung von Bedingungsschlüsseln in IAM-Richtlinien finden Sie unter IAM-JSON-Richtlinienelemente: Bedingung im IAM-Benutzerhandbuch.

Tipp

Wenn Ihre Funktion bereits eine VPC-Konfiguration aus einer früheren API-Anforderung enthält, können Sie eine UpdateFunctionConfiguration-Anforderung ohne die VPC-Konfiguration senden.

Beispielrichtlinien mit Bedingungsschlüsseln für VPC-Einstellungen

In den folgenden Beispielen wird gezeigt, wie Bedingungsschlüssel für VPC-Einstellungen verwendet werden. Nachdem Sie eine Richtlinienanweisung mit den gewünschten Einschränkungen erstellt haben, fügen Sie die Richtlinienanweisung für den -Zielbenutzer oder die Zielrolle an.

Stellen Sie sicher, dass Benutzer nur VPC-verbundene Funktionen bereitstellen

Um sicherzustellen, dass alle Benutzer nur VPC-verbundene Funktionen bereitstellen, können Sie Erstellungs- und Aktualisierungsoperationen von Funktionen verweigern, die keine gültige VPC-ID enthalten.

Beachten Sie, dass die VPC-ID kein Eingabeparameter für die CreateFunction- oder UpdateFunctionConfiguration -Anforderung ist. Lambda ruft den VPC-ID-Wert basierend auf den Subnetz- und Sicherheitsgruppenparametern ab.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "EnforceVPCFunction", "Action": [ "lambda:CreateFunction", "lambda:UpdateFunctionConfiguration" ], "Effect": "Deny", "Resource": "*", "Condition": { "Null": { "lambda:VpcIds": "true" } } } ] }

Benutzern den Zugriff auf bestimmte VPCs, Subnetze oder Sicherheitsgruppen verweigern

Um Benutzern den Zugriff auf bestimmte VPCs StringEquals zu verweigern, überprüfen Sie den Wert der lambda:VpcIds-Bedingung. Im folgenden Beispiel wird Benutzern der Zugriff auf vpc-1 und vpc-2 verweigert.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "EnforceOutOfVPC", "Action": [ "lambda:CreateFunction", "lambda:UpdateFunctionConfiguration" ], "Effect": "Deny", "Resource": "*", "Condition": { "StringEquals": { "lambda:VpcIds": ["vpc-1", "vpc-2"] } } }

Um Benutzern den Zugriff auf bestimmte Subnetze zu verweigern, verwenden Sie StringEquals, um den Wert der lambda:SubnetIds Bedingung zu überprüfen. Im folgenden Beispiel wird Benutzern der Zugriff auf subnet-1 und subnet-2 verweigert.

{ "Sid": "EnforceOutOfSubnet", "Action": [ "lambda:CreateFunction", "lambda:UpdateFunctionConfiguration" ], "Effect": "Deny", "Resource": "*", "Condition": { "ForAnyValue:StringEquals": { "lambda:SubnetIds": ["subnet-1", "subnet-2"] } } }

Um Benutzern den Zugriff auf bestimmte Sicherheitsgruppen zu verweigern, verwenden Sie StringEquals, um den Wert der lambda:SecurityGroupIds-Bedingung zu überprüfen. Im folgenden Beispiel wird Benutzern der Zugriff auf sg-1 und sg-2 verweigert.

{ "Sid": "EnforceOutOfSecurityGroups", "Action": [ "lambda:CreateFunction", "lambda:UpdateFunctionConfiguration" ], "Effect": "Deny", "Resource": "*", "Condition": { "ForAnyValue:StringEquals": { "lambda:SecurityGroupIds": ["sg-1", "sg-2"] } } } ] }

Benutzern das Erstellen und Aktualisieren von Funktionen mit bestimmten VPC-Einstellungen ermöglichen

Um Benutzern den Zugriff auf bestimmte VPCs zu ermöglichen, verwenden Sie StringEquals, um den Wert der lambda:VpcIds-Bedingung zu überprüfen. Im folgenden Beispiel können Benutzer auf vpc-1 und vpc-2 zugreifen.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "EnforceStayInSpecificVpc", "Action": [ "lambda:CreateFunction", "lambda:UpdateFunctionConfiguration" ], "Effect": "Allow", "Resource": "*", "Condition": { "StringEquals": { "lambda:VpcIds": ["vpc-1", "vpc-2"] } } }

Um Benutzern den Zugriff auf bestimmte Subnetze zu ermöglichen, verwenden Sie StringEquals, um den Wert der lambda:SubnetIds-Bedingung zu überprüfen. Im folgenden Beispiel können Benutzer auf subnet-1 und subnet-2 zugreifen.

{ "Sid": "EnforceStayInSpecificSubnets", "Action": [ "lambda:CreateFunction", "lambda:UpdateFunctionConfiguration" ], "Effect": "Allow", "Resource": "*", "Condition": { "ForAllValues:StringEquals": { "lambda:SubnetIds": ["subnet-1", "subnet-2"] } } }

Um Benutzern den Zugriff auf bestimmte Sicherheitsgruppen zu ermöglichen, verwenden Sie StringEquals, um den Wert der lambda:SecurityGroupIds-Bedingung zu überprüfen. Im folgenden Beispiel können Benutzer auf sg-1 und sg-2 zugreifen.

{ "Sid": "EnforceStayInSpecificSecurityGroup", "Action": [ "lambda:CreateFunction", "lambda:UpdateFunctionConfiguration" ], "Effect": "Allow", "Resource": "*", "Condition": { "ForAllValues:StringEquals": { "lambda:SecurityGroupIds": ["sg-1", "sg-2"] } } } ] }

Internet- und Servicezugriff für VPC-verbundene Funktionen

Standardmäßig führt Lambda Ihre Funktionen in einer sicheren VPC mit Zugriff auf AWS-Services und das Internet aus. Lambda besitzt diese VPC, die nicht mit der Standard-VPC Ihres Kontos verbunden ist. Wenn Sie eine Funktion mit einer VPC in Ihrem Konto verbinden, kann die Funktion nicht auf das Internet zugreifen, es sei denn, die VPC ermöglicht den Zugriff.

Anmerkung

Mehrere AWS-Services bieten VPC-Endpunkte. Sie können VPC-Endpunkte verwenden, um Verbindungen zu AWS-Services aus einer VPC ohne Internetzugang herzustellen.

Der Internetzugang aus einem privaten Subnetz erfordert Netzwerkadressübersetzung (Network Address Translation, NAT). Um Ihrer Funktion Zugriff auf das Internet zu gewähren, leiten Sie ausgehenden Datenverkehr an ein NAT-Gateway in einem öffentlichen Subnetz weiter. Das NAT-Gateway verfügt über eine öffentliche IP-Adresse und kann sich über das Internet-Gateway der VPC mit dem Internet verbinden. Bei einer inaktiven NAT-Gateway-Verbindung tritt nach 350 Sekunden eine Zeitüberschreitung auf. Weitere Informationen finden Sie unter Wie erteile ich Internetzugriff auf meine Lambda-Funktion in einer VPC?

VPC-Tutorials

In den folgenden Tutorials verbinden Sie eine Lambda-Funktion mit Ressourcen in Ihrer VPC.

Beispiel-VPC-Konfigurationen

Sie können die folgenden AWS CloudFormation-Beispielvorlagen verwenden, um VPC-Konfigurationen für Lambda-Funktionen zu erstellen. Im GitHub Repository dieses Handbuchs sind zwei Vorlagen verfügbar:

  • vpc-private.yaml— Eine VPC mit zwei privaten Subnetzen und VPC-Endpunkten für Amazon Simple Storage Service (Amazon S3) und Amazon DynamoDB. Verwenden Sie diese Vorlage, um eine VPC für Funktionen zu erstellen, die keinen Internetzugang benötigen. Diese Konfiguration unterstützt die Verwendung von Amazon S3 und DynamoDB mit den AWS-SDKs sowie den Zugriff auf Datenbankressourcen in derselben VPC über eine lokale Netzwerkverbindung.

  • vpc-privatepublic.yaml – Eine VPC mit zwei privaten Subnetzen, VPC-Endpunkten, einem öffentlichen Subnetz mit einem NAT-Gateway und einem Internet-Gateway. Internetgebundener Datenverkehr von Funktionen in den privaten Subnetzen wird unter Verwendung einer Routing-Tabelle an das NAT-Gateway geleitet.

Um eine VPC mithilfe einer Vorlage zu erstellen, wählen Sie auf der Seite Stacks der AWS CloudFormation-Konsole die Option Create stack (Stack erstellen) aus und befolgen dann die Anweisungen des Assistenten zum Erstellen eines Stacks.