Utilisation des variables d'environnement AWS Lambda - AWS Lambda

Utilisation des variables d'environnement AWS Lambda

Vous pouvez utiliser des variables d'environnement pour stocker les secrets en toute sécurité et ajuster le comportement de votre fonction sans mettre à jour le code. Une variable d'environnement est une paire de chaînes qui sont stockées dans la configuration spécifique à la version d'une fonction. L'exécution de Lambda met les variables d'environnement à la disposition de votre code et définit les variables d'environnement supplémentaires qui contiennent des informations sur la fonction et la demande d'appel.

Vous définissez des variables d'environnement sur la version non publiée de votre fonction en spécifiant une clé et une valeur. Lorsque vous publiez une version, les variables d'environnement sont verrouillées pour cette version ainsi que d'autres configurations spécifiques à la version.

Pour définir des variables d'environnement dans la console Lambda

  1. Ouvrez la page Fonctions de la console Lambda.

  2. Choisissez une fonction.

  3. Sous Variables d'environnement, choisissez Modifier.

  4. Choisissez Ajouter une variable d'environnement.

  5. Entrez une clé et une valeur.

    Prérequis

    • Les clés commencent par une lettre et comportent au moins deux caractères.

    • Les clés contiennent uniquement des lettres, des chiffres et le caractère de soulignement (_).

    • Les clés ne sont pas réservées par Lambda.

    • La taille totale de toutes les variables d'environnement ne dépasse pas 4 Ko.

  6. Choisissez Enregistrer.

Utilisez des variables d'environnement pour transmettre des paramètres spécifiques à l'environnement à votre code. Vous pouvez par exemple avoir deux fonctions avec le même code mais une configuration différente. Une fonction se connecte à une base de données de test et l'autre à une base de données de production. Dans ce cas, vous utilisez des variables d'environnement pour indiquer à la fonction le nom d'hôte, ainsi que d'autres détails de connexion pour la base de données. Vous pouvez également définir une variable d'environnement pour configurer votre environnement de test afin d'utiliser une journalisation ou un suivi plus détaillé.


      Variables d'environnement dans la console Lambda.

Pour récupérer les variables d'environnement dans le code de votre fonction, utilisez la méthode standard pour votre langage de programmation.

Node.js
let region = process.env.AWS_REGION
Python
import os region = os.environ['AWS_REGION']
Ruby
region = ENV["AWS_REGION"]
Java
String region = System.getenv("AWS_REGION");
Go
var region = os.Getenv("AWS_REGION")
C#
string region = Environment.GetEnvironmentVariable("AWS_REGION");
PowerShell
$region = $env:AWS_REGION

Lambda stocke les variables d'environnement en toute sécurité en les chiffrant au repos. Vous pouvez configurer Lambda afin d'utiliser une clé de chiffrement différente, chiffrer les valeurs des variables d'environnement côté client ou définir des variables d'environnement dans un modèle AWS CloudFormation avec AWS Secrets Manager.

Variables d'environnement d'exécution

Les environnements d'exécution Lambda définissent plusieurs variables d'environnement lors de l'initialisation. La plupart des variables d'environnement fournissent des informations sur la fonction ou l'exécution. Les clés de ces variables d'environnement sont réservées et ne peuvent pas être définies dans la configuration de la fonction.

Variables d'environnement réservées

  • _HANDLER – Emplacement de gestionnaire configuré au niveau de la fonction.

  • AWS_REGION – Région AWS où la fonction Lambda est exécutée.

  • AWS_EXECUTION_ENVIdentifiant d'exécution, doté du préfixe AWS_Lambda_—par exemple, AWS_Lambda_java8.

  • AWS_LAMBDA_FUNCTION_NAME – Nom de la fonction.

  • AWS_LAMBDA_FUNCTION_MEMORY_SIZE – Quantité de mémoire disponible pour la fonction en Mo.

  • AWS_LAMBDA_FUNCTION_VERSION – Version de la fonction en cours d'exécution.

  • AWS_LAMBDA_LOG_GROUP_NAME, AWS_LAMBDA_LOG_STREAM_NAME – Nom du groupe Amazon CloudWatch Logs et du flux pour la fonction.

  • AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY, AWS_SESSION_TOKEN – Clés d'accès obtenues à partir du rôle d'exécution de la fonction.

  • AWS_LAMBDA_RUNTIME_API – (Environnement d'exécution personnalisé) Hôte et port de l'API d'exécution.

  • LAMBDA_TASK_ROOT – Chemin vers le code de la fonction Lambda.

  • LAMBDA_RUNTIME_DIR – Chemin vers les bibliothèques d'exécution.

  • TZ – Fuseau horaire de l'environnement (UTC). L'environnement d'exécution utilise NTP pour synchroniser l'horloge système.

Les variables d'environnement supplémentaires suivantes ne sont pas réservées et peuvent être étendues dans la configuration de la fonction.

Variables d'environnement non réservées

  • LANG – Paramètres régionaux de l'environnement d'exécution (en_US.UTF-8).

  • PATH – Chemin d'exécution (/usr/local/bin:/usr/bin/:/bin:/opt/bin).

  • LD_LIBRARY_PATH – Chemin de la bibliothèque système (/lib64:/usr/lib64:$LAMBDA_RUNTIME_DIR:$LAMBDA_RUNTIME_DIR/lib:$LAMBDA_TASK_ROOT:$LAMBDA_TASK_ROOT/lib:/opt/lib).

  • NODE_PATH – (Node.js) Chemin de la bibliothèque Node.js (/opt/nodejs/node12/node_modules/:/opt/nodejs/node_modules:$LAMBDA_RUNTIME_DIR/node_modules).

  • PYTHONPATH – (Python 2.7, 3.6, 3.8) Chemin de la bibliothèque Python ($LAMBDA_RUNTIME_DIR).

  • GEM_PATH – (Ruby) Chemin de la bibliothèque Ruby ($LAMBDA_TASK_ROOT/vendor/bundle/ruby/2.5.0:/opt/ruby/gems/2.5.0).

  • _X_AMZN_TRACE_IDEn-tête de suivi X-Ray.

  • AWS_XRAY_CONTEXT_MISSING – Pour le suivi X-Ray, Lambda définit cette valeur sur LOG_ERROR pour éviter de générer des erreurs d'exécution à partir du kit SDK X-Ray.

  • AWS_XRAY_DAEMON_ADDRESS – Pour le suivi X-Ray, adresse IP et port du démon X-Ray

Les valeurs d'exemple affichées reflètent les derniers moteurs d'exécution. La présence de variables spécifiques ou leurs valeurs peuvent varier dans les anciens environnements d'exécution.

Sécurisation des variables d'environnement

Lambda chiffre les variables d'environnement à l'aide d'une clé que le service crée dans votre compte (une clé CMK gérée par AWS). Cette clé est utilisée gratuitement. Vous pouvez également choisir de fournir votre propre clé afin qu'elle soit utilisée par Lambda à la place de la clé par défaut.

Lorsque vous fournissez la clé, seuls les utilisateurs de votre compte ayant accès à la clé peuvent afficher ou gérer les variables d'environnement sur la fonction. Votre organisation peut également avoir des exigences internes ou externes pour gérer les clés utilisées pour le chiffrement et pour contrôler leur rotation.

Pour utiliser une clé CMK gérée par le client

  1. Ouvrez la page Fonctions de la console Lambda.

  2. Choisissez une fonction.

  3. Sous Variables d'environnement, choisissez Modifier.

  4. Développez Configuration du chiffrement.

  5. Choisissez Utiliser une clé principale client.

  6. Choisissez votre clé CMK gérée par le client.

  7. Choisissez Enregistrer.

Les clés CMK gérés par le client entraînent des frais AWS KMS standard.

Aucune autorisation AWS KMS n'est requise pour votre utilisateur ou le rôle d'exécution de la fonction pour utiliser la clé de chiffrement par défaut. Vous devez disposer des autorisations appropriées pour pouvoir utiliser une clé CMK gérée par le client. Lambda exploite ces autorisations pour créer un octroi sur la clé. Cela permet à Lambda de l'utiliser pour le chiffrement.

  • kms:ListAliases – Permet d'afficher les clés dans la console Lambda.

  • kms:CreateGrant, kms:Encrypt – Permet de configurer une clé CMK gérée par le client au niveau d'une fonction.

  • kms:Decrypt – Permet d'afficher et de gérer les variables d'environnement chiffrées à l'aide d'une clé CMK gérée par le client.

Vous pouvez obtenir ces autorisations à partir de votre compte d'utilisateur ou à partir de la stratégie d'autorisation basée sur les ressources d'une clé. ListAliases est fourni par les stratégies gérées pour Lambda. Les stratégies de clé accordent les autorisations restantes aux utilisateurs du groupe Key users (Utilisateurs de clés).

Les utilisateurs sans autorisation Decrypt peuvent gérer les fonctions, mais ils ne peuvent pas afficher les variables d'environnement ni les gérer dans la console Lambda. Pour empêcher un utilisateur d'afficher des variables d'environnement, ajoutez une instruction aux autorisations de cet utilisateur afin de refuser l'accès à la clé par défaut, à une clé gérée par le client ou à toutes les clés.

Exemple Stratégie IAM – Refuser l'accès en fonction de l'ARN de la clé

{ "Version": "2012-10-17", "Statement": [ { "Sid": "VisualEditor0", "Effect": "Deny", "Action": [ "kms:Decrypt" ], "Resource": "arn:aws:kms:us-east-2:123456789012:key/3be10e2d-xmpl-4be4-bc9d-0405a71945cc" } ] }

        Message d'erreur pour l'utilisateur sans autorisations de déchiffrement dans la console Lambda.

Pour plus d’informations sur la gestion des autorisations des clés, consultez Utilisation de stratégies de clé dans AWS KMS.

Vous pouvez également chiffrer les valeurs des variables d'environnement côté client avant de les envoyer à Lambda, et les déchiffrer dans le code de votre fonction. Les valeurs secrètes sont ainsi masquées dans la console Lambda et dans la sortie de l'API, même pour les utilisateurs autorisés à utiliser la clé. Dans votre code, vous récupérez la valeur chiffrée de l'environnement et la déchiffrez à l'aide de l'API AWS KMS.

Pour chiffrer des variables d'environnement côté client

  1. Ouvrez la page Fonctions de la console Lambda.

  2. Choisissez une fonction.

  3. Sous Variables d'environnement, choisissez Modifier.

  4. Développez Configuration du chiffrement.

  5. Choisissez Enable helpers for encryption in transit (Activer les assistants pour le chiffrement en transit).

  6. Choisissez Chiffrer en regard d'une variable pour chiffrer sa valeur.

  7. Choisissez Enregistrer.

Note

Lorsque vous utilisez les assistants de chiffrement de la console, votre fonction a besoin d'une autorisation pour appeler l'opération d'API kms:Decrypt dans son rôle d'exécution.

Pour afficher un exemple de code pour la langue de votre fonction, choisissez Code en regard d'une variable d'environnement. L'exemple de code montre comment récupérer une variable d'environnement dans une fonction et déchiffrer sa valeur.

Une autre option consiste à stocker les mots de passe dans des secrets AWS Secrets Manager. Vous pouvez référencer le secret dans vos modèles AWS CloudFormation pour définir des mots de passe sur les bases de données. Vous pouvez également définir la valeur d'une variable d'environnement sur la fonction Lambda. Pour obtenir un exemple, veuillez consulter la section suivante.

Configuration de variables d'environnement avec l'API Lambda

Pour gérer les variables d'environnement avec l'AWS CLI ou un kit SDK AWS, utilisez les opérations d'API suivantes.

L'exemple suivant définit deux variables d'environnement sur une fonction nommée my-function.

$ aws lambda update-function-configuration --function-name my-function \ --environment "Variables={BUCKET=my-bucket,KEY=file.txt}"

Lorsque vous appliquez des variables d'environnement avec la commande update-function-configuration, l'ensemble du contenu de la structure Variables est remplacé. Pour conserver les variables d'environnement existantes lorsque vous en ajoutez une nouvelle, incluez toutes les valeurs existantes dans votre demande.

Pour obtenir la configuration actuelle, utilisez la commande get-function-configuration.

$ aws lambda get-function-configuration --function-name my-function { "FunctionName": "my-function", "FunctionArn": "arn:aws:lambda:us-east-2:123456789012:function:my-function", "Runtime": "nodejs12.x", "Role": "arn:aws:iam::123456789012:role/lambda-role", "Environment": { "Variables": { "BUCKET": "my-bucket", "KEY": "file.txt" } }, "RevisionId": "0894d3c1-2a3d-4d48-bf7f-abade99f3c15", ... }

Pour vous assurer que les valeurs ne changent pas entre la lecture et la mise à jour de la configuration, vous pouvez transmettre l'ID de révision de la sortie de get-function-configuration en tant que paramètre à update-function-configuration.

Pour configurer la clé de chiffrement d'une fonction, définissez l'option KMSKeyARN.

$ aws lambda update-function-configuration --function-name my-function \ --kms-key-arn arn:aws:kms:us-east-2:123456789012:key/055efbb4-xmpl-4336-ba9c-538c7d31f599

Exemples de code et de modèles

Des exemples d'applications dans le référentiel GitHub de ce manuel illustrent l'utilisation de variables d'environnement dans le code et les modèles AWS CloudFormation de fonctions.

Exemples d'applications

  • Fonction vide – Créez une fonction et une rubrique Amazon SNS dans le même modèle. Transmettez le nom de la rubrique à la fonction dans une variable d'environnement. Lisez les variables d'environnement dans le code (plusieurs langues).

  • RDS MySQL – Créez un VPC et une instance de base de données Amazon RDS dans un modèle, avec un mot de passe stocké dans Secrets Manager. Dans le modèle d'application, importez les détails de la base de données à partir de la pile VPC, lisez le mot de passe depuis Secrets Manager et transmettez l'ensemble de la configuration de connexion à la fonction dans les variables d'environnement.