Connexion des réseaux sortants aux ressources d’un VPC - AWS Lambda

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Connexion des réseaux sortants aux ressources d’un VPC

Vous pouvez configurer une fonction Lambda pour qu’elle se connecte aux sous-réseaux privés d’un cloud privé virtuel (Virtual Private Cloud ; VPC) de votre compte AWS . Utilisez Amazon Virtual Private Cloud (Amazon VPC) afin de créer un réseau privé pour des ressources telles que des bases de données, des instances de mémoire cache ou des services internes. Connectez votre fonction au VPC pour accéder à des ressources privées pendant l’exécution de la fonction. Cette section fournit un résumé des connexions VPC de Lambda. Pour plus de détails sur les réseaux VPC dans Lambda, consultez Réseaux privés avec VPC.

Astuce

Pour configurer votre fonction Lambda afin d’accéder à un VPC et à un sous-réseau, vous pouvez utiliser la console Lambda ou l’API.

Reportez-vous à la VpcConfig section CreateFunctionci-dessous pour configurer votre fonction. Voir Configuration de l’accès VPC (console) et Configuration de l’accès VPC (API) pour les étapes détaillées.

Lorsque vous connectez une fonction à un VPC, Lambda affecte votre fonction à une ENI Hyperplane (interface réseau Elastic) pour chaque sous-réseau dans la configuration VPC de votre fonction. Lambda crée une ENI Hyperplane la première fois qu’une combinaison unique de sous-réseau et de groupe de sécurité est définie pour une fonction activée par VPC dans un compte.

Bien que Lambda crée une Hyperplane ENI, vous ne pouvez pas effectuer d’opérations supplémentaires qui ciblent la fonction, telles que la création de versions ou la mise à jour du code de la fonction. Pour les nouvelles fonctions, vous ne pouvez pas invoquer la fonction jusqu’à ce que son état passe de Pending à Active. Pour les fonctions existantes, vous pouvez toujours invoquer une version précédente pendant la mise à jour. Pour plus de détails sur le cycle de vie d’une ENI Hyperplane, consultez ENI Hyperplane Lambda.

Les fonctions Lambda ne peuvent pas se connecter directement à un VPC avec la location d’instance dédiée. Pour vous connecter à des ressources dans un VPC dédié, associez-les à un deuxième VPC avec une location par défaut.

Gestion des connexions VPC

Plusieurs fonctions peuvent partager une interface réseau si elles partagent le même sous-réseau et le même groupe de sécurité. La connexion de fonctions supplémentaires à la même configuration VPC (sous-réseau et groupe de sécurité) disposant d’une interface réseau gérée par Lambda est beaucoup plus rapide que la création d’une nouvelle interface réseau.

Si vos fonctions ne sont pas actives pendant une longue période, Lambda récupère ses interfaces réseau, et les fonctions deviennent Idle. Pour réactiver une fonction inactive, invoquez-la. Cette invocation échoue et la fonction entre à nouveau dans un état Pending jusqu’à ce qu’une interface réseau soit disponible.

Si vous mettez à jour votre fonction pour accéder à un autre VPC, elle met fin à la connectivité de l’ENI Hyperplane vers le VPC précédent. Le processus de mise à jour de la connectivité à un nouveau VPC peut prendre plusieurs minutes. Pendant ce temps, Lambda connecte les invocations de fonction au VPC précédent. Une fois la mise à jour terminée, les nouvelles invocations commencent à utiliser le nouveau VPC et la fonction Lambda n’est plus connectée à l’ancien VPC.

Pour les opérations de courte durée de vie, telles que les requêtes DynamoDB, la surcharge de latence de la configuration d’une connexion TCP peut être supérieure à l’opération elle-même. Pour garantir la réutilisation des connexions pour les fonctions à courte durée de vie ou rarement invoquées, nous vous recommandons d’utiliser la fonction TCP keep-alive pour les connexions créées lors de l’initialisation de votre fonction, afin d’éviter de créer de nouvelles connexions pour les invocations ultérieures. Pour plus d’informations sur la réutilisation des connexions à l’aide de keep-alive, consultez la documentation Lambda sur la réutilisation des connexions.

Rôle d’exécution et autorisations utilisateur

Lambda utilise les autorisations de votre fonction pour créer et gérer des interfaces réseau. Pour que vous puissiez vous connecter à un VPC, le rôle d’exécution de votre fonction doit avoir les autorisations suivantes :

Autorisations du rôle d’exécution
  • EC2 : CreateNetworkInterface

  • ec2 : DescribeNetworkInterfaces — Cette action ne fonctionne que si elle est autorisée sur toutes les ressources ("Resource": "*").

  • EC2 : DescribeSubnets

  • ec2 : DeleteNetworkInterface — Si vous ne spécifiez pas d'ID de ressource pour DeleteNetworkInterfacele rôle d'exécution, votre fonction ne pourra peut-être pas accéder au VPC. Spécifiez un ID de ressource unique ou incluez tous les ID de ressources ; par exemple, "Resource": "arn:aws:ec2:us-west-2:123456789012:*/*".

  • EC2 : AssignPrivateIpAddresses

  • EC2 : UnassignPrivateIpAddresses

Ces autorisations sont incluses dans la politique AWS gérée AWSLambdaVPCAccessExecutionRole. Notez que ces autorisations sont uniquement nécessaires pour créer des ENI, et non pour invoquer votre fonction VPC. En d’autres termes, vous pouvez toujours invoquer votre fonction VPC avec succès, même si vous supprimez ces autorisations de votre rôle d’exécution. Pour dissocier complètement votre fonction Lambda du VPC, mettez à jour les paramètres de configuration VPC de la fonction à l'aide de la console ou de l'API. UpdateFunctionConfiguration

Lorsque vous configurez la connectivité VPC, Lambda utilise vos autorisations pour vérifier les ressources réseau. Pour configurer une fonction afin de vous connecter à un VPC, votre utilisateur a besoin des autorisations suivantes :

Autorisations des utilisateurs
  • EC2 : DescribeSecurityGroups

  • EC2 : DescribeSubnets

  • EC2 : DescribeVpcs

Configuration de l’accès VPC (console)

Si vos autorisations IAM vous permettent uniquement de créer des fonctions Lambda qui se connectent à votre VPC, vous devez configurer celui-ci lorsque vous créez la fonction. Si vos autorisations IAM vous permettent de créer des fonctions qui ne sont pas connectées à votre VPC, vous pouvez ajouter la configuration VPC après avoir créé la fonction.

Pour configurer un VPC lorsque vous créez une fonction
  1. Ouvrez la page Functions (Fonctions) de la console Lambda.

  2. Choisissez Créer une fonction.

  3. Sous Informations de base, dans Nom de fonction, entrez un nom pour votre fonction.

  4. Développez Advanced settings (Paramètres avancés).

  5. Sélectionnez Activer le VPC, puis choisissez le VPC auquel vous voulez que la fonction accède.

  6. (Facultatif) Pour autoriser le trafic IPv6 sortant, sélectionnez Autoriser le trafic IPv6 pour les sous-réseaux à double pile.

  7. Choisissez des sous-réseaux et des groupes de sécurité. Si vous avez sélectionné Autoriser le trafic IPv6 pour les sous-réseaux à double pile, tous les sous-réseaux sélectionnés doivent avoir un bloc CIDR IPv4 et un bloc CIDR IPv6.

    Note

    Pour accéder aux ressources privées, connectez votre fonction à des sous-réseaux privés. Si votre fonction a besoin d’un accès à Internet, utilisez la traduction d’adresses réseau (NAT). La connexion d’une fonction à un sous-réseau public ne lui donne pas accès à Internet ou à une adresse IP publique.

  8. Sélectionnez Create function (Créer une fonction).

Pour configurer un VPC pour une fonction existante
  1. Ouvrez la page Functions (Fonctions) de la console Lambda.

  2. Choisissez une fonction.

  3. Sélectionnez Configuration, puis VPC.

  4. Sous VPC, choisissez Modifier.

  5. Choisissez le VPC auquel vous voulez que la fonction accède.

  6. (Facultatif) Pour autoriser le trafic IPv6 sortant, sélectionnez Autoriser le trafic IPv6 pour les sous-réseaux à double pile.

  7. Choisissez des sous-réseaux et des groupes de sécurité. Si vous avez sélectionné Autoriser le trafic IPv6 pour les sous-réseaux à double pile, tous les sous-réseaux sélectionnés doivent avoir un bloc CIDR IPv4 et un bloc CIDR IPv6.

    Note

    Pour accéder aux ressources privées, connectez votre fonction à des sous-réseaux privés. Si votre fonction a besoin d’un accès à Internet, utilisez la traduction d’adresses réseau (NAT). La connexion d’une fonction à un sous-réseau public ne lui donne pas accès à Internet ou à une adresse IP publique.

  8. Choisissez Save (Enregistrer).

Configuration de l’accès VPC (API)

Pour connecter une fonction Lambda à un VPC, vous pouvez utiliser les opérations d’API suivantes :

Pour créer une fonction et la connecter à un VPC à l'aide de AWS Command Line Interface (AWS CLI), vous pouvez utiliser la create-function commande avec l'VpcConfigoption. L’exemple suivant crée une fonction avec une connexion VPC. La fonction a accès à deux sous-réseaux et à un groupe de sécurité et autorise le trafic IPv6 sortant.

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

Pour connecter une fonction existante à un VPC, utilisez la commande update-function-configuration avec l’option vpc-config.

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

Pour déconnecter votre fonction d’un VPC, mettez à jour la configuration de la fonction avec une liste vide de sous-réseaux et de groupes de sécurité.

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

Utilisation des clés de condition IAM pour les paramètres du VPC

Vous pouvez utiliser des clés de condition spécifiques de Lambda pour les paramètres du VPC afin de fournir des contrôles d’autorisation supplémentaires pour vos fonctions Lambda. Par exemple, vous pouvez exiger que toutes les fonctions de votre organisation soient connectées à un VPC. Vous pouvez également spécifier les sous-réseaux et les groupes de sécurité que les utilisateurs de la fonction peuvent et ne peuvent pas utiliser.

Lambda prend également en charge les clés de condition suivantes dans les stratégies IAM :

  • lambda : VpcIds — Autoriser ou refuser un ou plusieurs VPC.

  • lambda : SubnetIds — Autoriser ou refuser un ou plusieurs sous-réseaux.

  • lambda : SecurityGroupIds — Autoriser ou refuser un ou plusieurs groupes de sécurité.

L'API Lambda fonctionne CreateFunctionet UpdateFunctionConfigurationprend en charge ces clés de condition. Pour de plus amples informations sur l’utilisation de clés de condition dans des stratégies IAM, consultez Éléments de politique JSON IAM : Condition dans le Guide de l’utilisateur IAM.

Astuce

Si votre fonction inclut déjà une configuration VPC à partir d’une demande d’API précédente, vous pouvez envoyer une demande UpdateFunctionConfiguration sans la configuration du VPC.

Exemple de stratégies avec des clés de condition pour les paramètres du VPC

Les exemples suivants montrent comment utiliser les clés de condition pour les paramètres du VPC. Après avoir créé une instruction de politique avec les restrictions souhaitées, ajoutez l’instruction de politique pour l’utilisateur ou le rôle cible.

Assurez-vous que les utilisateurs déploient uniquement les fonctions connectées au VPC

Pour vous assurer que tous les utilisateurs déploient uniquement des fonctions connectées au VPC, vous pouvez refuser les opérations de création et de mise à jour de fonctions qui n’incluent pas d’ID de VPC valide.

Notez que l’ID de VPC n’est pas un paramètre d’entrée pour la demande CreateFunction ou UpdateFunctionConfiguration. Lambda récupère la valeur de l’ID de VPC en fonction des paramètres du sous-réseau et du groupe de sécurité.

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

Refuser aux utilisateurs l’accès à des VPC, des sous-réseaux ou des groupes de sécurité spécifiques

Pour refuser aux utilisateurs l’accès à des VPC spécifiques, utilisez StringEquals pour vérifier la valeur de la condition lambda:VpcIds. L’exemple suivant refuse aux utilisateurs l’accès à vpc-1 et vpc-2.

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

Pour refuser aux utilisateurs l’accès à des sous-réseaux spécifiques, utilisez StringEquals pour vérifier la valeur de la condition lambda:SubnetIds. L’exemple suivant refuse aux utilisateurs l’accès à subnet-1 et subnet-2.

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

Pour refuser aux utilisateurs l’accès à des groupes de sécurité spécifiques, utilisez StringEquals pour vérifier la valeur de la condition lambda:SecurityGroupIds. L’exemple suivant refuse aux utilisateurs l’accès à sg-1 et sg-2.

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

Autoriser les utilisateurs à créer et à mettre à jour des fonctions avec des paramètres VPC spécifiques

Pour permettre aux utilisateurs d’accéder à des VPC spécifiques, utilisez StringEquals pour vérifier la valeur de la condition lambda:VpcIds. L’exemple suivant permet aux utilisateurs d’accéder à vpc-1 et vpc-2.

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

Pour permettre aux utilisateurs d’accéder à des sous-réseaux spécifiques, utilisez StringEquals pour vérifier la valeur de la condition lambda:SubnetIds. L’exemple suivant permet aux utilisateurs d’accéder à subnet-1 et subnet-2.

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

Pour permettre aux utilisateurs d’accéder à des groupes de sécurité spécifiques, utilisez StringEquals pour vérifier la valeur de la condition lambda:SecurityGroupIds. L’exemple suivant permet aux utilisateurs d’accéder à sg-1 et sg-2.

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

Accès à Internet et aux services pour des fonctions connectées à un VPC

Par défaut, Lambda exécute vos fonctions dans un VPC sécurisé avec accès aux AWS services et à Internet. Lambda possède son propre VPC qui n’est pas connecté au VPC par défaut de votre compte. Lorsque vous connectez une fonction à un VPC de votre compte, la fonction n’a pas accès à Internet, sauf si votre VPC le lui fournit.

Note

Plusieurs AWS services proposent des points de terminaison VPC. Vous pouvez utiliser les points de terminaison VPC pour vous connecter à AWS des services depuis un VPC sans accès à Internet.

L’accès à Internet depuis un sous-réseau privé nécessite la traduction d’adresses réseau (NAT). Pour accorder à votre fonction l’accès à Internet, acheminez le trafic sortant vers une passerelle NAT dans un sous-réseau public. La passerelle NAT possède une adresse IP publique et peut se connecter à Internet via la passerelle Internet du VPC. Une connexion de passerelle NAT inactive sera interrompue après 350 secondes d’inactivité. Pour en savoir plus, consultez Comment puis-je donner un accès Internet à ma fonction Lambda dans un VPC ?

Didacticiels de VPC

Dans les didacticiels suivants, vous connectez une fonction Lambda à des ressources dans votre VPC.

Exemples de configurations de VPC

Vous pouvez utiliser les exemples de AWS CloudFormation modèles suivants pour créer des configurations VPC à utiliser avec les fonctions Lambda. Deux modèles sont disponibles dans le GitHub référentiel de ce guide :

  • vpc-private.yaml – VPC avec deux sous-réseaux privés et des points de terminaison de VPC pour Amazon Simple Storage Service (Amazon S3) et Amazon DynamoDB. Utilisez ce modèle afin de créer un VPC pour les fonctions qui n’ont pas besoin d’un accès Internet. Cette configuration prend en charge l’utilisation du Simple Storage Service (Amazon S3) et de DynamoDB avec les kits de développement AWS SDK, ainsi que l’accès aux ressources de base de données dans le même VPC via une connexion réseau locale.

  • vpc-privatepublic.yaml – VPC avec deux sous-réseaux privés, des points de terminaison de VPC, un sous-réseau public avec une passerelle NAT, et une passerelle Internet. Le trafic lié à Internet depuis les fonctions des sous-réseaux privés est acheminé vers la passerelle NAT à l’aide d’une table de routage.

Pour créer un VPC à l'aide d'un modèle, sur la page Stacks de la AWS CloudFormation console, choisissez Create stack, puis suivez les instructions de l'assistant Create stack.