Comment accorder l'accès à Internet à une fonction Lambda connectée à un Amazon VPC ?

Dernière mise à jour : 23/11/2022

Je souhaite autoriser ma fonction AWS Lambda, connectée à un Amazon Virtual Private Cloud (Amazon VPC); à accéder à Internet. Comment puis-je procéder ?

Brève description

L'accès à Internet à partir d'un sous-réseau privé nécessite la conversion d'adresse réseau (NAT). Pour donner accès à Internet à une fonction Lambda connectée à un VPC Amazon, acheminez son trafic sortant vers une passerelle NAT ou une instance NAT dans un sous-réseau public.

Pour plus d'informations, consultez Passerelles Internet dans le guide de l'utilisateur d'un VPC Amazon. Pour consulter un exemple de configuration, accédez àVPC avec sous-réseaux public et privé (NAT).

Pour résoudre les problèmes d'accès à Internet avec les fonctions Lambda connectées à un VPC Amazon

Voir Comment résoudre les problèmes d'appel d'une fonction Lambda avec une notification d'événement Simple Storage Service (Amazon S3) à l'aide de Systems Manager Automation ?

Remarque : Vous pouvez également utiliser des points de terminaison d’un VPC pour vous connecter aux services AWS pris en charge depuis un VPC Amazon sans accès à Internet. Lambda ne peut pas être placé dans un sous-réseau public doté d'une passerelle Internet, car il n'est pas possible d'attribuer une adresse IP publique à une fonction Lambda. Pour accéder à l'Internet public à partir d'une fonction compatible VPC, vous devez placer la fonction dans un sous-réseau privé qui utilise une passerelle NAT, une instance NAT ou une autre route par défaut gérée par le client pour l'accès public à Internet.

Résolution

(Facultatif) Créer un VPC Amazon VPC à l'aide de l'assistant VPC dans la console de gestion AWS

Remarque : si vous utilisez l'assistant VPC pour créer un VPC Amazon, vous pouvez passer directement à la section Création d'un rôle d'exécution Lambda pour votre VPC.

1.    Ouvrez l'assistant VPC dans la console de gestion AWS.

2.    Choisissez VPC with Public and Private Subnets (VPC avec des sous-réseaux public et privé). Les nouveaux sous-réseau public et sous-réseau privé, y compris la passerelle Internet et la passerelle NAT associées, apparaissent dans la console du VPC Amazon.

Créer un sous-réseau public et un ou plusieurs sous-réseaux privés dans votre VPC Amazon

Pour connaître les instructions, consultez la section Créer un sous-réseau dans votre VPC pour créer chacun de vos sous-réseaux.

Lorsque vous créez les sous-réseaux, pour Name tag (Nom de l'identification), saisissez un nom pour chaque sous-réseau, qui l'identifie comme sous-réseau public ou privé. Par exemple :Sous-réseau public, Lambda privée 1 et Lambda privée 2.

Remarque : il est recommandé de créer plusieurs sous-réseaux privés dans différentes zones de disponibilité. Cette pratique crée de la redondance et permet au service Lambda de maintenir la haute disponibilité pour votre fonction.

Créer une passerelle Internet et l'attacher à votre VPC

Pour connaître les instructions, consultez la section Création et attachement d'une passerelle Internet.

Créer une passerelle NAT

Pour connaître les instructions, consultez la section Création d'une passerelle NAT. Lorsque vous créez la passerelle NAT, pour Subnet (Sous-réseau), choisissez le sous-réseau que vous souhaitez rendre public. (Dans l'exemple précédent :Sous-réseau public.)

Remarque : pour tester la configuration de votre passerelle NAT, consultez Tester la passerelle NAT publique dans le guide de l'utilisateur d'un VPC Amazon.

Créer deux tables de routage personnalisées : une pour votre sous-réseau public et une pour votre sous-réseau privé

Remarque : une fonction Lambda connectée à VPC sélectionne de façon aléatoire un sous-réseau associé lors de l'envoi de demandes. Tous les sous-réseaux que votre fonction utilise doivent avoir la même configuration pour éviter les erreurs aléatoires causées par Lambda utilisant un sous-réseau incorrectement configuré.

Pour connaître les instructions, reportez-vous à la section Création d'une table de routage personnalisée. Lorsque vous créez les tables de routage, pour Name tag (Nom de l'identification), saisissez un nom pour chaque table de routage, qui vous aide à identifier le sous-réseau auquel elle est associée. Par exemple :Sous-réseau public et Lambda privée.

Pour chaque table de routage, veillez à effectuer les opérations suivantes :

Pour la table de routage du sous-réseau public

1.    Associez la table de routage du sous-réseau public (Public subnet (Sous-réseau public)) au sous-réseau que vous souhaitez rendre public.

2.    Ajoutez un nouvel acheminement à la table de routage qui inclut les configurations suivantes :
Dans le champ Destination, saisissez 0.0.0.0/0.
Dans le champ Target (Cible), sélectionnez Internet Gateway (Passerelle Internet), puis l'ID (igw-123example) de la passerelle Internet que vous avez créée. Choisissez Save routes (Enregistrer les acheminements).

Pour la table de routage du sous-réseau privé

1.    Associez la table de routage du sous-réseau privé (Lambda privée) aux sous-réseaux privés.

2.    Ajoutez un nouvel acheminement à la table de routage qui inclut les configurations suivantes :
Dans le champ Destination, saisissez 0.0.0.0/0.
Pour Target (Cible), choisissez NAT Gateway (Passerelle NAT). Ensuite, choisissez l'ID de la passerelle NAT (nat-123exemple) que vous avez créée.
Important : si vous utilisez une instance NAT, choisissez Network Interface (Interface réseau). Choisissez Save routes (Enregistrer les acheminements).

Remarque : assurez-vous que les acheminements vers votre passerelle NAT sont actifs. Si la passerelle NAT est supprimée et que vous n'avez pas mis à jour les acheminements, ils ont l'état blackhole (trou noir). Pour plus d'informations, consultez Mise à jour de votre table de routage.

Vérifiez que ACL réseau autorise les demandes sortantes de votre fonction Lambda et le trafic entrant si nécessaire

La liste de contrôle d'accès réseau par défaut de votre VPC Amazon autorise tout le trafic entrant et sortant. Si vous modifiez les règles de l'ACL réseau, assurez-vous que vous autorisez toujours les demandes sortantes de votre fonction Lambda.

Assurez-vous également que votre ACL réseau autorise le trafic entrant suivant en fonction de la configuration de votre VPC :

Remarque : pour plus d'informations, consultez Confidentialité du trafic inter-réseau dans Amazon VPC.

Créer un rôle d'exécution Lambda pour votre VPC

1.    Ouvrez la page Roles (Rôles) dans la console AWS Identity and Access Management (IAM).

2.    Choisissez Create role (Créer un rôle). La page Create role (Créer un rôle) s'ouvre.

3.    Sur la page, procédez comme suit :
Pour Select type of trusted entity (Sélectionner le type d'entité de confiance), choisissez AWS service (Service AWS).
Pour Common use cases (Cas d'utilisation courants), choisissez Lambda.
Choisissez Next: Permissions (Étape suivante : autorisations).
Sous Attach permissions policies (Attacher les politiques d'autorisations), recherchez AWSLambdaVPCAccessExecutionRole.
Sélectionnez la politique portant ce nom. Choisissez Next: Tags (Étape suivante : identifications).
(Facultatif) Ajoutez des identifications pour votre cas d'utilisation.
Choisissez Next: Review (Étape suivante : vérification).
Pour Role name (Nom du rôle), saisissez un nom pour le rôle d'exécution Lambda. Par exemple, exécution_base_vpc-lambda.
(Facultatif) Pour Role Description (Description du rôle), saisissez la description du rôle. Choisissez Create role (Créer un rôle).

Pour plus d'informations, consultez Rôle d'exécution AWS Lambda et Création d'un rôle d'exécution dans la console IAM.

Configurez votre fonction Lambda pour qu'elle se connecte à votre VPC Amazon

1.    Ouvrez la page Functions (Fonctions) dans la console Lambda.

2.    Choisissez le nom de la fonction que vous souhaitez connecter à votre VPC Amazon.

3.    Choisissez Configuration.

4.    Sous Execution role (Rôle d'exécution) pour Existing role (Rôle existant), choisissez le rôle d'exécution Lambda que vous avez créé précédemment.

5.    Sous VPC, choisissez Edit ( (Modifier)). Ensuite, procédez comme suit :
Pour Virtual Private Cloud (VPC), sélectionnez votre VPC.
Pour le champ Subnets (Sous-réseaux), sélectionnez les sous-réseaux privés que vous avez créés. Identifiez-les par leurs ID de sous-réseau (ainsi que les noms, si vous les avez nommés).
Pour le champ Security groups (Groupes de sécurité), sélectionnez un groupe de sécurité.
Remarque : le groupe de sécurité par défaut autorise tout le trafic Internet sortant et s'avère être suffisant pour la plupart des cas d'utilisation. Pour plus d'informations, consultez la section Groupes de sécurité pour votre VPC. Choisissez Save (Enregistrer).