Octroi aux fonctions Lambda d’un accès aux ressources d’un Amazon 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.

Octroi aux fonctions Lambda d’un accès aux ressources d’un Amazon VPC

Avec Amazon Virtual Private Cloud (Amazon VPC), vous pouvez créer des réseaux privés Compte AWS pour héberger des ressources telles que des instances Amazon Elastic Compute Cloud (Amazon EC2), des instances Amazon Relational Database Service (Amazon RDS) et des instances Amazon. ElastiCache Vous pouvez donner à votre fonction Lambda l’accès aux ressources hébergées dans un Amazon VPC en attachant votre fonction au VPC via les sous-réseaux privés qui contiennent les ressources. Suivez les instructions des sections suivantes pour associer une fonction Lambda à un Amazon VPC à l'aide de la console Lambda, du () ou. AWS Command Line Interface AWS CLI AWS SAM

Note

Chaque fonction Lambda s’exécute au sein d’un VPC détenu et géré par le service Lambda. Ils VPCs sont gérés automatiquement par Lambda et ne sont pas visibles pour les clients. La configuration de votre fonction pour accéder à d'autres AWS ressources d'un Amazon VPC n'a aucun effet sur le VPC géré par Lambda dans lequel votre fonction exécute.

Autorisations IAM requises

Pour associer une fonction Lambda à un Amazon VPC dans votre VPC, Compte AWS Lambda a besoin d'autorisations pour créer et gérer les interfaces réseau qu'il utilise pour permettre à votre fonction d'accéder aux ressources du VPC.

Les interfaces réseau créées par Lambda sont appelées Hyperplane Elastic Network Interfaces ou Hyperplane. ENIs Pour en savoir plus sur ces interfaces réseau, consultez Comprendre les interfaces réseau élastiques Hyperplane () ENIs.

Vous pouvez accorder à votre fonction les autorisations dont elle a besoin en associant la politique AWS gérée AWSLambdaVPCAccessExecutionRoleau rôle d'exécution de votre fonction. Lorsque vous créez une fonction dans la console Lambda et que vous l’associez à un VPC, Lambda ajoute automatiquement cette politique d’autorisations pour vous.

Si vous préférez créer votre propre politique d’autorisations IAM, veillez à inclure toutes les autorisations suivantes :

  • 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 toutes les ressources IDs, par exemple"Resource": "arn:aws:ec2:us-west-2:123456789012:*/*".

  • EC2 : AssignPrivateIpAddresses

  • EC2 : UnassignPrivateIpAddresses

Notez que le rôle de votre fonction n’a besoin de ces autorisations que pour créer les interfaces réseau, et non pour invoquer votre fonction. Votre fonction peut toujours être invoquée avec succès lorsqu’elle est attachée à un VPC Amazon, même si vous supprimez ces autorisations du rôle d’exécution de votre fonction.

Pour associer votre fonction à un VPC, Lambda doit également vérifier les ressources réseau à l’aide de votre rôle d’utilisateur IAM. Veillez à ce que votre rôle d’utilisateur dispose des autorisations IAM suivantes :

  • EC2 : DescribeSecurityGroups

  • EC2 : DescribeSubnets

  • EC2 : DescribeVpcs

  • EC2 : getSecurityGroup ForVpc

Note

Les EC2 autorisations Amazon que vous accordez au rôle d'exécution de votre fonction sont utilisées par le service Lambda pour associer votre fonction à un VPC. Cependant, ces autorisations sont également accordées implicitement au code de votre fonction. Cela signifie que votre code de fonction est capable d'effectuer ces appels d' EC2 API Amazon. Pour obtenir des conseils sur le respect des pratiques exemplaires en matière de sécurité, consultez Bonnes pratiques de sécurité.

Associer des fonctions Lambda à un Amazon VPC dans votre Compte AWS

Associez votre fonction à un Amazon VPC dans votre ordinateur à l'aide Compte AWS de la console Lambda, du ou. AWS CLI AWS SAM Si vous utilisez le AWS CLI ou AWS SAM, ou si vous attachez une fonction existante à un VPC à l'aide de la console Lambda, assurez-vous que le rôle d'exécution de votre fonction dispose des autorisations nécessaires répertoriées dans la section précédente.

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.

Lambda console
Pour attacher une fonction lors de sa création à un Amazon VPC
  1. Ouvrez la page Fonctions de la console Lambda et choisissez Créer une fonction.

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

  3. Configurez les paramètres VPC pour la fonction en procédant comme suit :

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

    2. Sélectionnez Activer le VPC, puis choisissez le VPC auquel vous souhaitez associer la fonction.

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

    4. Choisissez les sous-réseaux et les groupes de sécurité pour lesquels créer l’interface réseau. Si vous avez sélectionné Autoriser IPv6 le trafic pour les sous-réseaux à double pile, tous les sous-réseaux sélectionnés doivent comporter un bloc IPv4 CIDR 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 Activation de l’accès Internet pour les fonctions Lambda connectées à un VPC. La connexion d’une fonction à un sous-réseau public ne lui donne pas accès à Internet ou à une adresse IP publique.

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

Pour associer une fonction existante à un Amazon VPC
  1. Ouvrez la page Fonctions de la console Lambda et choisissez votre fonction.

  2. Choisissez l’onglet Configuration, puis VPC.

  3. Choisissez Modifier.

  4. Sous VPC, sélectionnez l’Amazon VPC auquel vous souhaitez associer votre fonction.

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

  6. Choisissez les sous-réseaux et les groupes de sécurité pour lesquels créer l’interface réseau. Si vous avez sélectionné Autoriser IPv6 le trafic pour les sous-réseaux à double pile, tous les sous-réseaux sélectionnés doivent comporter un bloc IPv4 CIDR 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 Activation de l’accès Internet pour les fonctions Lambda connectées à un VPC. La connexion d’une fonction à un sous-réseau public ne lui donne pas accès à Internet ou à une adresse IP publique.

  7. Choisissez Save (Enregistrer).

AWS CLI
Pour attacher une fonction lors de sa création à un Amazon VPC
  • Pour créer une fonction Lambda et l’attacher à un VPC, exécutez la commande create-function de la CLI suivante.

    aws lambda create-function --function-name my-function \ --runtime nodejs22.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

    Spécifiez vos propres sous-réseaux et groupes de sécurité et configurez Ipv6AllowedForDualStack sur true ou false en fonction de votre cas d’utilisation.

Pour associer une fonction existante à un Amazon VPC
  • Pour attacher une fonction existante à un VPC, exécutez la commande update-function-configuration de la CLI suivante.

    aws lambda update-function-configuration --function-name my-function \ --vpc-config Ipv6AllowedForDualStack=true, SubnetIds=subnet-071f712345678e7c8,subnet-07fd123456788a036,SecurityGroupIds=sg-085912345678492fb
Pour dissocier votre fonction d’un VPC
  • Pour dissocier votre fonction d’un VPC, exécutez la commande update-function-configuration de la CLI suivante avec une liste vide de sous-réseaux et de groupes de sécurité VPC.

    aws lambda update-function-configuration --function-name my-function \ --vpc-config SubnetIds=[],SecurityGroupIds=[]
AWS SAM
Pour attacher votre fonction à un VPC
  • Pour associer une fonction Lambda à un Amazon VPC, ajoutez la propriété VpcConfig à votre définition de fonction, comme illustré par l’exemple de modèle suivant. Pour plus d'informations sur cette propriété, voir AWS: :Lambda : :Function VpcConfig dans le guide de AWS CloudFormation l'utilisateur (la AWS SAM VpcConfig propriété est transmise directement à la VpcConfig propriété d'une AWS CloudFormation AWS::Lambda::Function ressource).

    AWSTemplateFormatVersion: '2010-09-09' Transform: AWS::Serverless-2016-10-31 Resources: MyFunction: Type: AWS::Serverless::Function Properties: CodeUri: ./lambda_function/ Handler: lambda_function.handler Runtime: python3.12 VpcConfig: SecurityGroupIds: - !Ref MySecurityGroup SubnetIds: - !Ref MySubnet1 - !Ref MySubnet2 Policies: - AWSLambdaVPCAccessExecutionRole MySecurityGroup: Type: AWS::EC2::SecurityGroup Properties: GroupDescription: Security group for Lambda function VpcId: !Ref MyVPC MySubnet1: Type: AWS::EC2::Subnet Properties: VpcId: !Ref MyVPC CidrBlock: 10.0.1.0/24 MySubnet2: Type: AWS::EC2::Subnet Properties: VpcId: !Ref MyVPC CidrBlock: 10.0.2.0/24 MyVPC: Type: AWS::EC2::VPC Properties: CidrBlock: 10.0.0.0/16

    Pour plus d'informations sur la configuration de votre VPC dans AWS SAM, consultez AWS: : EC2 : :VPC dans le guide de l'utilisateur.AWS CloudFormation

Accès à Internet en cas d’attachement à un VPC

Par défaut, les fonctions Lambda ont accès à l’Internet public. Lorsque vous attachez votre fonction à un VPC, son accès est limité aux ressources disponibles au sein de ce VPC. Pour accorder à votre fonction l’accès à Internet, vous devez également configurer le VPC pour qu’il dispose d’un accès à Internet. Pour en savoir plus, consultez Activation de l’accès Internet pour les fonctions Lambda connectées à un VPC.

IPv6 soutien

Votre fonction peut se connecter aux ressources des sous-réseaux VPC à double pile via. IPv6 Cette option est désactivée par défaut. Pour autoriser le IPv6 trafic sortant, utilisez la console ou l'--vpc-config Ipv6AllowedForDualStack=trueoption associée à la fonction ou à la commande de création. update-function-configuration

Note

Pour autoriser le IPv6 trafic sortant dans un VPC, tous les sous-réseaux connectés à la fonction doivent être des sous-réseaux à double pile. Lambda ne prend pas en charge les IPv6 connexions IPv6 sortantes pour les sous-réseaux uniquement d'un VPC, les connexions IPv6 sortantes pour les fonctions qui ne sont pas connectées à un VPC ou les connexions entrantes utilisant des points de terminaison VPC (). IPv6 AWS PrivateLink

Vous pouvez mettre à jour votre code de fonction pour vous connecter explicitement aux ressources du sous-réseau. IPv6 L'exemple Python suivant ouvre un socket et se connecte à un IPv6 serveur.

Exemple — Se connecter au IPv6 serveur
def connect_to_server(event, context): server_address = event['host'] server_port = event['port'] message = event['message'] run_connect_to_server(server_address, server_port, message) def run_connect_to_server(server_address, server_port, message): sock = socket.socket(socket.AF_INET6, socket.SOCK_STREAM, 0) try: # Send data sock.connect((server_address, int(server_port), 0, 0)) sock.sendall(message.encode()) BUFF_SIZE = 4096 data = b'' while True: segment = sock.recv(BUFF_SIZE) data += segment # Either 0 or end of data if len(segment) < BUFF_SIZE: break return data finally: sock.close()

Bonnes pratiques d'utilisation de Lambda avec Amazon VPCs

Pour vous assurer que votre configuration VPC Lambda est conforme aux pratiques exemplaires en la matière, suivez les conseils des sections suivantes.

Bonnes pratiques de sécurité

Pour associer votre fonction Lambda à un VPC, vous devez attribuer un certain nombre d'autorisations Amazon au rôle d'exécution de votre fonction. EC2 Ces autorisations sont nécessaires pour créer les interfaces réseau que votre fonction utilise pour accéder aux ressources du VPC. Cependant, ces autorisations sont également octroyées implicitement au code de votre fonction. Cela signifie que votre code de fonction est autorisé à effectuer ces appels d' EC2 API Amazon.

Pour respecter le principe de l’accès au moindre privilège, ajoutez une politique de rejet au rôle d’exécution de votre fonction, comme dans l’exemple suivant. Cette politique empêche votre fonction d'appeler l'Amazon EC2 APIs que le service Lambda utilise pour associer votre fonction à un VPC.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Deny", "Action": [ "ec2:CreateNetworkInterface", "ec2:DeleteNetworkInterface", "ec2:DescribeNetworkInterfaces", "ec2:DescribeSubnets", "ec2:DetachNetworkInterface", "ec2:AssignPrivateIpAddresses", "ec2:UnassignPrivateIpAddresses" ], "Resource": [ "*" ], "Condition": { "ArnEquals": { "lambda:SourceFunctionArn": [ "arn:aws:lambda:us-west-2:123456789012:function:my_function" ] } } } ] }

AWS fournit des groupes de sécurité et des listes de contrôle d'accès réseau (ACLs) pour renforcer la sécurité de votre VPC. Les groupes de sécurité contrôlent le trafic entrant et sortant pour vos ressources, et le réseau ACLs contrôlent le trafic entrant et sortant pour vos sous-réseaux. Les groupes de sécurité offrent un contrôle d’accès suffisant pour la plupart des sous-réseaux. Vous pouvez utiliser le réseau ACLs si vous souhaitez ajouter une couche de sécurité supplémentaire à votre VPC. Pour obtenir des directives générales sur les meilleures pratiques de sécurité lors de l'utilisation d'Amazon VPCs, consultez les meilleures pratiques de sécurité pour votre VPC dans le guide de l'utilisateur d'Amazon Virtual Private Cloud.

Bonnes pratiques en matière de performances

Lorsque vous attachez votre fonction à un VPC, Lambda vérifie s’il existe une ressource réseau disponible (ENI Hyperplane) à laquelle elle peut se connecter. Les hyperplans ENIs sont associés à une combinaison particulière de groupes de sécurité et de sous-réseaux VPC. Si vous avez déjà attaché une fonction à un VPC, le fait de spécifier les mêmes sous-réseaux et groupes de sécurité lorsque vous attachez une autre fonction signifie que Lambda peut partager les ressources du réseau et éviter d’avoir à créer une ENI Hyperplane. Pour plus d'informations sur Hyperplane ENIs et son cycle de vie, consultezComprendre les interfaces réseau élastiques Hyperplane () ENIs.

Comprendre les interfaces réseau élastiques Hyperplane () ENIs

Une ENI Hyperplane est une ressource gérée qui agit comme une interface réseau entre votre fonction Lambda et les ressources auxquelles vous souhaitez que votre fonction se connecte. Le service Lambda les crée et les gère ENIs automatiquement lorsque vous attachez votre fonction à un VPC.

Les hyperplans ne ENIs sont pas directement visibles pour vous et vous n'avez pas besoin de les configurer ou de les gérer. Cependant, être au fait de leur fonctionnement peut vous aider à comprendre le comportement de votre fonction lorsque vous l’attachez à un VPC.

La première fois que vous attachez une fonction à un VPC à l’aide d’une combinaison particulière de sous-réseau et de groupe de sécurité, Lambda crée une ENI Hyperplane. D’autres fonctions de votre compte qui utilisent la même combinaison de sous-réseau et de groupe de sécurité peuvent également utiliser cette ENI. Dans la mesure du possible, Lambda réutilise les ressources existantes ENIs pour optimiser l'utilisation des ressources et minimiser la création de nouvelles ressources. ENIs Cependant, chaque ENI Hyperplane prend en charge jusqu’à 65 000 connexions/ports. Si le nombre de connexions dépasse cette limite, Lambda adapte le nombre ENIs automatiquement en fonction du trafic réseau et des exigences de simultanéité.

Pour les nouvelles fonctions, pendant que Lambda crée une ENI Hyperplane, votre fonction reste à l’état En attente et vous ne pouvez pas l’invoquer. Votre fonction passe à l’état Actif uniquement lorsque l’ENI Hyperplane est prête, ce qui peut prendre plusieurs minutes. Pour les fonctions existantes, aucune opération supplémentaire ciblant la fonction ne peut être effectuée, comme la création de versions ou la mise à jour du code de la fonction, mais vous pouvez continuer à invoquer les versions antérieures de la fonction.

Note

Dans le cadre de la gestion du cycle de vie d'ENI, Lambda peut supprimer et recréer pour équilibrer la charge du trafic réseau ENIs ou ENIs pour résoudre les problèmes détectés lors des bilans de santé d'ENI.

De plus, si une fonction Lambda reste inactive pendant 30 jours, Lambda récupère tout hyperplan inutilisé ENIs et définit l'état de la fonction sur inactif. La prochaine tentative d’invocation échouera et la fonction entrera à nouveau dans l’état En attente jusqu’à ce que Lambda termine la création ou l’allocation d’une ENI Hyperplane.

Nous recommandons que votre design ne repose pas sur la persistance de ENIs.

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 VPCs.

  • 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 à VPCs des sous-réseaux ou à des groupes de sécurité spécifiques

Pour refuser aux utilisateurs l'accès à une condition spécifique VPCs, utilisez cette option StringEquals pour vérifier la valeur de la lambda:VpcIds condition. 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 autoriser les utilisateurs à accéder à une condition spécifique VPCs, utilisez cette option StringEquals pour vérifier la valeur de la lambda:VpcIds condition. 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"] } } } ] }

Didacticiels de VPC

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