Permettre aux fonctions Lambda d'accéder 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.

Permettre aux fonctions Lambda d'accéder aux ressources d'un Amazon VPC

Avec Amazon Virtual Private Cloud (AmazonVPC), vous pouvez créer des réseaux privés Compte AWS pour héberger des ressources telles que des instances Amazon Elastic Compute Cloud (AmazonEC2), des instances Amazon Relational Database Service (RDSAmazon) et des instances ElastiCache Amazon. Vous pouvez donner à votre fonction Lambda l'accès aux ressources hébergées sur un Amazon en VPC attachant votre fonction 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 AWS Command Line Interface ()AWS CLI ou. AWS SAM

Note

Chaque fonction Lambda s'exécute dans une VPC fonction détenue et gérée 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 n'VPCa aucun effet sur le système géré par Lambda dans lequel VPC votre fonction est exécutée.

IAMAutorisations requises

Pour associer une fonction Lambda à un Amazon VPC dans votre environnement, Compte AWS Lambda a besoin d'autorisations pour créer et gérer les interfaces réseau qu'elle 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, consultezComprendre 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 nouvelle fonction dans la console Lambda et que vous l'associez à une, VPC Lambda ajoute automatiquement cette politique d'autorisation pour vous.

Si vous préférez créer votre propre politique d'IAMautorisations, veillez à ajouter 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 auVPC. Spécifiez un ID de ressource unique ou incluez toutes les ressourcesIDs, 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 appeler votre fonction. Vous pouvez toujours invoquer votre fonction avec succès lorsqu'elle est attachée à un AmazonVPC, même si vous supprimez ces autorisations du rôle d'exécution de votre fonction.

Pour associer votre fonction à unVPC, Lambda doit également vérifier les ressources réseau à l'aide de votre rôle IAM d'utilisateur. Assurez-vous que votre rôle d'utilisateur dispose des IAM autorisations suivantes :

  • EC2 : DescribeSecurityGroups

  • EC2 : DescribeSubnets

  • EC2 : DescribeVpcs

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, vous accordez également implicitement ces autorisations au code de votre fonction. Cela signifie que votre code de fonction est capable de passer ces EC2 API appels Amazon. Pour obtenir des conseils sur le respect des meilleures pratiques en matière de sécurité, consultezBonnes pratiques de sécurité.

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

Associez votre fonction à un Amazon VPC dans votre ordinateur à Compte AWS l'aide de la console Lambda, du AWS CLI ou. AWS SAM Si vous utilisez le AWS CLI ou AWS SAM, ou si vous associez une fonction existante à une console VPC utilisant 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 à une instance VPC dotée d'une location d'instance dédiée. Pour vous connecter aux ressources d'un espace dédiéVPC, connectez-le à une seconde VPC avec une location par défaut.

Lambda console
Pour associer une fonction à un Amazon VPC lorsque vous le créez
  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 VPC paramètres de la fonction en procédant comme suit :

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

    2. Sélectionnez Activer VPC, puis sélectionnez celui VPC auquel vous souhaitez associer la fonction.

    3. (Facultatif) Pour autoriser le IPv6trafic 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 IPv4 CIDR bloc et un bloc. IPv6 CIDR

      Note

      Pour accéder aux ressources privées, connectez votre fonction à des sous-réseaux privés. Si votre fonction nécessite un accès à Internet, consultezActiver l'accès à Internet pour les VPC fonctions Lambda connectées. 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 choisissez VPC.

  3. Choisissez Modifier.

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

  5. (Facultatif) Pour autoriser le IPv6trafic 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 IPv4 CIDR bloc et un bloc. IPv6 CIDR

    Note

    Pour accéder aux ressources privées, connectez votre fonction à des sous-réseaux privés. Si votre fonction nécessite un accès à Internet, consultezActiver l'accès à Internet pour les VPC fonctions Lambda connectées. 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 associer une fonction à un Amazon VPC lorsque vous le créez
  • Pour créer une fonction Lambda et l'associer à unVPC, exécutez la commande suivante CLIcreate-function.

    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

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

Pour associer une fonction existante à un Amazon VPC
  • Pour associer une fonction existante à unVPC, exécutez la CLI update-function-configuration commande 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'unVPC, exécutez la update-function-configuration CLI commande suivante avec une liste vide de VPC sous-réseaux et de groupes de sécurité.

    aws lambda update-function-configuration --function-name my-function \ --vpc-config SubnetIds=[],SecurityGroupIds=[]
AWS SAM
Pour associer votre fonction à un VPC
  • Pour associer une fonction Lambda à un AmazonVPC, ajoutez la VpcConfig propriété à votre définition de fonction, comme indiqué dans 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 VPC de votre AWS SAM entrée, consultez AWS: : EC2 : : VPC dans le guide de AWS CloudFormation l'utilisateur.

Accès à Internet lorsqu'il est connecté à un VPC

Par défaut, les fonctions Lambda ont accès à l'Internet public. Lorsque vous associez votre fonction à unVPC, elle ne peut accéder qu'aux ressources disponibles dans celui-ciVPC. Pour permettre à votre fonction d'accéder à Internet, vous devez également configurer le pour VPC qu'elle ait accès à Internet. Pour en savoir plus, consultez Activer l'accès à Internet pour les VPC fonctions Lambda connectées.

IPv6soutien

Votre fonction peut se connecter aux ressources des VPC sous-réseaux à double pile. 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 aVPC, 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 dans aVPC, les connexions sortantes pour les fonctions qui ne sont pas connectées à aVPC, ni les IPv6 connexions entrantes utilisant des points de terminaison (). IPv6 VPC 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 VPC configuration Lambda est conforme aux meilleures pratiques, suivez les conseils des sections suivantes.

Bonnes pratiques de sécurité

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

Pour suivre le principe du moindre privilège d'accès, ajoutez une politique de refus, comme dans l'exemple suivant, au rôle d'exécution de votre fonction. Cette politique empêche votre fonction de passer des appels à 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: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 votreVPC. 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 une couche de sécurité supplémentaire pour votreVPC. Pour obtenir des directives générales sur les meilleures pratiques de sécurité lors de l'utilisation d'AmazonVPCs, consultez les meilleures pratiques de sécurité pour vous VPC dans le guide de l'utilisateur d'Amazon Virtual Private Cloud.

Bonnes pratiques en matière de performances

Lorsque vous attachez votre fonction à unVPC, Lambda vérifie s'il existe une ressource réseau disponible (HyperplaneENI) à laquelle elle peut se connecter. Les hyperplans ENIs sont associés à une combinaison particulière de groupes de sécurité et de VPC sous-réseaux. Si vous avez déjà attaché une fonction à unVPC, le fait de spécifier les mêmes sous-réseaux et groupes de sécurité lorsque vous associez une autre fonction signifie que Lambda peut partager les ressources du réseau et éviter d'avoir à créer un nouvel hyperplan. ENI 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

Un hyperplan ENI 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 associez 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, le fait de connaître leur fonctionnement peut vous aider à comprendre le comportement de votre fonction lorsque vous l'associez à unVPC.

La première fois que vous attachez une fonction à une combinaison VPC de sous-réseau et de groupe de sécurité en particulier, Lambda crée un hyperplan. ENI Les autres fonctions de votre compte qui utilisent la même combinaison de sous-réseau et de groupe de sécurité peuvent également l'utiliser. 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 Chaque Hyperplane ENI prend en charge jusqu'à 65 000 connexions/ports. Si le nombre de connexions dépasse cette limite, Lambda adapte le nombre de connexions ENIs automatiquement en fonction du trafic réseau et des exigences de simultanéité.

Pour les nouvelles fonctions, pendant que Lambda crée un hyperplanENI, votre fonction reste à l'état En attente et vous ne pouvez pas l'invoquer. Votre fonction passe à l'état actif uniquement lorsque l'hyperplan ENI est prêt, ce qui peut prendre plusieurs minutes. Pour les fonctions existantes, vous ne pouvez pas effectuer d'opérations supplémentaires ciblant la fonction, telles que la création de versions ou la mise à jour du code de la fonction, mais vous pouvez continuer à invoquer les versions précédentes de la fonction.

Note

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'appel échouera et la fonction reviendra à l'état En attente jusqu'à ce que Lambda ait terminé la création ou l'allocation d'un hyperplan. ENI Pour plus d'informations sur les états des fonctions Lambda, consultez. États de la fonction Lambda

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

Vous pouvez utiliser des clés de condition spécifiques à Lambda pour les VPC paramètres 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 à unVPC. 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 en charge les clés de condition suivantes dans IAM les politiques :

  • lambda : VpcIds — Autoriser ou refuser un ou plusieursVPCs.

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

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

Les API opérations CreateFunctionLambda prennent en UpdateFunctionConfigurationcharge ces clés de condition. Pour plus d'informations sur l'utilisation des clés de condition dans IAM les politiques, voir Éléments de IAM JSON politique : condition dans le guide de IAM l'utilisateur.

Astuce

Si votre fonction inclut déjà une VPC configuration issue d'une API demande précédente, vous pouvez envoyer une UpdateFunctionConfiguration demande sans cette VPC configuration.

Exemples de politiques avec des clés de condition pour VPC les paramètres

Les exemples suivants montrent comment utiliser les clés de condition pour VPC les paramètres. 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 VPC fonctions connectées

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

Notez que VPC l'ID n'est pas un paramètre d'entrée pour la UpdateFunctionConfiguration demande CreateFunction or. Lambda récupère la valeur de l'VPCID 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écifiqueVPCs, 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"] } } } ] }

Permettre aux utilisateurs de créer et de mettre à jour des fonctions avec des VPC paramètres spécifiques

Pour autoriser les utilisateurs à accéder à une condition spécifiqueVPCs, 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 VPC

Dans les didacticiels suivants, vous allez connecter une fonction Lambda aux ressources de votre. VPC