Chiffrement des packages de déploiement Lambda au format .zip
Lambda fournit toujours le chiffrement côté serveur au repos pour les packages de déploiement .zip et les détails de configuration des fonctions avec une AWS KMS key. Par défaut, Lambda utilise une Clé détenue par AWS. Si ce comportement par défaut convient à votre flux de travail, vous n’avez pas besoin de configurer quoi que ce soit d’autre. AWS ne vous facture pas l’utilisation de cette clé.
Si vous préférez, vous pouvez fournir une clé gérée par le client AWS KMSà la place. Vous pouvez procéder ainsi pour contrôler la rotation de la clé KMS ou pour répondre aux exigences de votre organisation en matière de gestion des clés KMS. Lorsque vous utilisez une clé gérée par le client, seuls les utilisateurs de votre compte ayant accès à la clé KMS peuvent visualiser ou gérer le code ou la configuration de la fonction.
Les clés gérés par le client entraînent des frais AWS KMS standard. Pour plus d’informations, consultez Tarification d’AWS Key Management Service.
Création d’une clé gérée par le client
Vous pouvez créer une clé symétrique gérée par le client à l'aide de la AWS Management Console ou des API AWS KMS.
Pour créer une clé symétrique gérée par le client
Suivez les étapes de la rubrique Create a symmetric encryption KMS key dans le Guide du développeur AWS Key Management Service.
Autorisations
Stratégie de clé
Les stratégies de clé contrôlent l’accès à votre clé gérée par le client. Chaque clé gérée par le client doit avoir exactement une stratégie de clé, qui contient des instructions qui déterminent les personnes pouvant utiliser la clé et comment elles peuvent l’utiliser. Pour plus d’informations, consultez How to change a key policy dans le Guide du développeur AWS Key Management Service.
Lorsque vous utilisez une clé gérée par le client pour chiffrer un package de déploiement .zip, Lambda n’ajoute aucun octroi à la clé. Au lieu de cela, votre stratégie de clé AWS KMS doit autoriser Lambda à appeler les opérations d’API AWS KMS suivantes en votre nom :
L’exemple de stratégie de clé suivant permet à toutes les fonctions Lambda du compte 111122223333 d’appeler les opérations AWS KMS requises pour la clé gérée par le client spécifiée :
Exemple AWS KMSpolitique de clé
- JSON
-
-
{
"Version":"2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": "lambda.amazonaws.com"
},
"Action": [
"kms:GenerateDataKey",
"kms:Decrypt"
],
"Resource": "arn:aws:kms:us-east-1:111122223333:key/key-id",
"Condition": {
"StringLike": {
"kms:EncryptionContext:aws:lambda:FunctionArn": "arn:aws:lambda:us-east-1:111122223333:function:*"
}
}
}
]
}
Pour plus d'informations sur le dépannage des clés d’accès, consultez le Guide du développeur AWS Key Management Service.
Autorisations de principal
Lorsque vous utilisez une clé gérée par le client pour chiffrer un package de déploiement .zip, seuls les principaux ayant accès à cette clé peuvent accéder au package de déploiement .zip. Par exemple, les principaux qui n’ont pas accès à la clé gérée par le client ne peuvent pas télécharger le package .zip à l’aide de l’URL S3 présignée incluse dans la réponse de GetFunction. Une AccessDeniedException est renvoyée dans la section Code de la réponse.
Exemple AWS KMS AccessDeniedException
{
"Code": {
"RepositoryType": "S3",
"Error": {
"ErrorCode": "AccessDeniedException",
"Message": "KMS access is denied. Check your KMS permissions. KMS Exception: AccessDeniedException KMS Message: User: arn:aws:sts::111122223333:assumed-role/LambdaTestRole/session is not authorized to perform: kms:Decrypt on resource: arn:aws:kms:us-east-1:111122223333:key/key-id with an explicit deny in a resource-based policy"
},
"SourceKMSKeyArn": "arn:aws:kms:us-east-1:111122223333:key/key-id"
},
...
Pour obtenir des informations détaillées sur les autorisations pour les clés AWS KMS, consultez Authentication and access control for AWS KMS.
Utilisation d’une clé gérée par le client pour votre package de déploiement .zip
Utilisez les paramètres d’API suivants pour configurer les clés gérées par le client pour les packages de déploiement .zip :
Lorsque SourceKMSKeyArn et KMSKeyArn sont tous deux spécifiés, Lambda utilise la clé KMSKeyArn pour chiffrer la version décompressée du package que Lambda utilise pour invoquer la fonction. Lorsque SourceKMSKeyArn est spécifié mais que KMSKeyArn ne l’est pas, Lambda utilise une Clé gérée par AWSpour chiffrer la version décompressée du package.
- Lambda console
-
Pour ajouter le chiffrement par clé gérée par le client lors de la création d’une fonction
Ouvrez la page Functions (Fonctions) de la console Lambda.
-
Choisissez Créer une fonction.
-
Choisissez Author from scratch (Créer à partir de zéro) ou Container image (Image de conteneur).
-
Sous Basic information (Informations de base), procédez comme suit :
-
Pour Function name (Nom de la fonction), saisissez le nom de la fonction.
-
Pour Runtime, sélectionnez la version du langage à utiliser pour votre fonction.
-
Développez Paramètres avancés, puis sélectionnez Activer le chiffrement avec une clé AWS KMS gérée par le client.
-
Choisissez une clé gérée par le client.
-
Choisissez Créer une fonction.
Pour supprimer le chiffrement par clé gérée par le client ou pour utiliser une autre clé, vous devez télécharger à nouveau le package de déploiement .zip.
Pour ajouter le chiffrement par clé gérée par le client à une fonction existante
Ouvrez la page Functions (Fonctions) de la console Lambda.
-
Choisissez le nom d’une fonction.
-
Dans le volet Source du code, choisissez Charger à partir de.
-
Choisissez un fichier .zip ou un emplacement Amazon S3.
-
Importez le fichier ou saisissez l’emplacement Amazon S3.
-
Choisissez Activer le chiffrement avec une clé gérée AWS KMS par le client.
-
Choisissez une clé gérée par le client.
-
Choisissez Enregistrer.
- AWS CLI
-
Pour ajouter un chiffrement par clé gérée par le client lors de la création d’une fonction
Dans l’exemple create-function suivant :
-
--zip-file : spécifie le chemin local du package de déploiement .zip.
-
--source-kms-key-arn : spécifie la clé gérée par le client pour chiffrer la version compressée du package de déploiement.
-
--kms-key-arn : spécifie la clé gérée par le client pour chiffrer les variables d’environnement et la version décompressée du package de déploiement.
aws lambda create-function \
--function-name myFunction \
--runtime nodejs22.x \
--handler index.handler \
--role arn:aws:iam::111122223333:role/service-role/my-lambda-role \
--zip-file fileb://myFunction.zip \
--source-kms-key-arn arn:aws:kms:us-east-1:111122223333:key/key-id \
--kms-key-arn arn:aws:kms:us-east-1:111122223333:key/key2-id
Dans l’exemple create-function suivant :
-
--code : spécifie l’emplacement du fichier .zip dans un compartiment Amazon S3. Vous devez uniquement utiliser le paramètre S3ObjectVersion pour les objets soumis à la gestion des versions.
-
--source-kms-key-arn : spécifie la clé gérée par le client pour chiffrer la version compressée du package de déploiement.
-
--kms-key-arn : spécifie la clé gérée par le client pour chiffrer les variables d’environnement et la version décompressée du package de déploiement.
aws lambda create-function \
--function-name myFunction \
--runtime nodejs22.x --handler index.handler \
--role arn:aws:iam::111122223333:role/service-role/my-lambda-role \
--code S3Bucket=amzn-s3-demo-bucket,S3Key=myFileName.zip,S3ObjectVersion=myObjectVersion \
--source-kms-key-arn arn:aws:kms:us-east-1:111122223333:key/key-id \
--kms-key-arn arn:aws:kms:us-east-1:111122223333:key/key2-id
Pour ajouter un chiffrement par clé gérée par le client à une fonction existante
Dans l’exemple update-function-code suivant :
-
--zip-file : spécifie le chemin local du package de déploiement .zip.
-
--source-kms-key-arn : spécifie la clé gérée par le client pour chiffrer la version compressée du package de déploiement. Lambda utilise une clé détenue par AWS pour chiffrer le package décompressé pour les invocations de fonctions. Si vous souhaitez utiliser une clé gérée par le client pour chiffrer la version décompressée du package, exécutez la commande update-function-configuration avec l’option --kms-key-arn.
aws lambda update-function-code \
--function-name myFunction \
--zip-file fileb://myFunction.zip \
--source-kms-key-arn arn:aws:kms:us-east-1:111122223333:key/key-id
Dans l’exemple update-function-code suivant :
-
--s3-bucket : spécifie l’emplacement du fichier .zip dans un compartiment Amazon S3.
-
--s3-key : spécifie la clé Amazon S3 du package de déploiement.
-
--s3-object-version : pour les objets versionnés, la version de l’objet de package de déploiement à utiliser.
-
--source-kms-key-arn : spécifie la clé gérée par le client pour chiffrer la version compressée du package de déploiement. Lambda utilise une clé détenue par AWS pour chiffrer le package décompressé pour les invocations de fonctions. Si vous souhaitez utiliser une clé gérée par le client pour chiffrer la version décompressée du package, exécutez la commande update-function-configuration avec l’option --kms-key-arn.
aws lambda update-function-code \
--function-name myFunction \
--s3-bucket amzn-s3-demo-bucket \
--s3-key myFileName.zip \
--s3-object-version myObject Version
--source-kms-key-arn arn:aws:kms:us-east-1:111122223333:key/key-id
Pour supprimer le chiffrement par clé gérée par le client d’une fonction existante
Dans l’exemple update-function-code suivant, --zip-file spécifie le chemin local vers le package de déploiement .zip. Lorsque vous exécutez cette commande sans l’option --source-kms-key-arn, Lambda utilise une clé détenue par AWS pour chiffrer la version compressée du package de déploiement.
aws lambda update-function-code \
--function-name myFunction \
--zip-file fileb://myFunction.zip