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.
Chiffrement AWS Lambda données d'exécution durables
Grâce à des fonctions AWS Lambda durables, vous pouvez créer des applications résilientes en plusieurs étapes qui s'exécutent jusqu'à un an, en utilisant des points de contrôle pour récupérer chaque exécution en cas d'échec en rejouant le travail terminé.
Lambda chiffre toujours les données d'exécution durables au repos. Vous pouvez également configurer votre propre clé gérée par le AWS KMS client sur la fonction de contrôle de rotation, de visibilité des audits ou de conformité. Avec une clé gérée par le client, seuls les principaux que vous autorisez peuvent lire les données d'exécution.
Comment fonctionne le chiffrement
Une exécution durable Lambda utilise la même clé KMS avec laquelle elle a commencé pendant toute sa durée de vie. La modification ou la suppression de la touche de la fonction n'affecte que les exécutions qui démarrent après la modification. Découvrez Lorsque la clé gérée par le client n'est pas disponible comment se comporte une exécution durable lorsque sa clé n'est pas disponible.
Les clés gérées par le client entraînent des AWS KMS frais standard. Pour plus d’informations sur la tarification, consultez Tarification AWS Key Management Service
Qu'est-ce qui est crypté
Lorsque vous configurez une clé gérée par le client sur une fonction durable, Lambda utilise cette clé pour chiffrer les données d'exécution durables suivantes au repos :
La charge utile d'entrée que vous transmettez à chaque
Invokedemande.Les données des points de contrôle sont conservées par l'
CheckpointDurableExecutionAPI, notamment les résultats des étapes, les erreurs d'étape et les entrées d'appel chaînées.Résultats d'exécution et erreurs.
Résultats des rappels et erreurs que vous soumettez par le biais de
SendDurableExecutionCallbackSuccessetSendDurableExecutionCallbackFailure.
Function-level et les clés d'exécution durables sont indépendantes
Le niveau de fonction KMSKeyArn qui chiffre les variables d'environnement, les packages de déploiement .zip et les SnapStartinstantanés est distinct de DurableConfig celui qui chiffre les données d'KMSKeyArnexécution durables. Régler l'un ne définit pas l'autre. Vous pouvez utiliser la même clé KMS pour les deux, ou vous pouvez utiliser des clés KMS différentes.
Configurer le chiffrement des clés géré par le client
La configuration du chiffrement par clé géré par le client pour une fonction durable est un processus en trois étapes. Effectuez les étapes suivantes dans l'ordre.
Création d’une clé gérée par le client
Les fonctions durables prennent en charge le chiffrement symétrique des clés KMS dans la même AWS région que la fonction. Cross-Region les touches ne sont pas prises en charge. Pour créer une clé symétrique gérée par le client, suivez les étapes de création de clés KMS de chiffrement symétriques décrites dans le guide du AWS Key Management Service développeur.
Permissions
Vous accordez AWS KMS des autorisations par le biais de la politique clé de la clé KMS.
La configuration d'une clé gérée par le client nécessite AWS KMS des autorisations sur le principal qui crée ou met à jour la fonction. L'invocation d'une fonction durable ne nécessite aucune AWS KMS autorisation de la part de l'appelant ; Lambda effectue le chiffrement avec son principal de service.
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 politique clé. Dans une politique de clé, Resource: "*" fait uniquement référence à la clé KMS à laquelle la politique est attachée, et non à toutes les clés KMS de votre compte.
La politique clé d'une fonction durable accorde à chaque principal uniquement les AWS KMS actions dont il a besoin, définies par l'ARN du service et de la fonction. Les sections suivantes décrivent les instructions, les conditions et un exemple complet.
Déclarations de politique requises
La politique accorde les fonctionnalités suivantes :
Activez les autorisations des utilisateurs IAM. Accorde au root du compte un accès inconditionnel à la gestion de la clé. Cette instruction n'impose aucune condition, car son étendue vous empêcherait de faire pivoter, de mettre à jour ou de supprimer la clé.
Autorisez Lambda à utiliser cette clé pour des fonctions durables. Accorde le principal
kms:GenerateDataKeydu service Lambda et.kms:DecryptAutorisez le rôle d'exécution de la fonction à déchiffrer les données d'exécution durables. Accorde le rôle d'exécution
kms:Decryptpour lire l'état et faire avancer l'exécution.Permettez à l'auteur de la fonction de décrire cette clé. Des subventions
kms:DescribeKeypour que Lambda puisse valider que la clé est symétrique et activée pendant ou.CreateFunctionUpdateFunctionConfigurationAutorisez l'auteur de la fonction à valider cette clé pour une fonction spécifique.
kms:DecryptAinsi, Lambda peut valider les autorisations clés et l'accès avec le contexte de chiffrement de la fonction pendantCreateFunctionou.kms:GenerateDataKeyUpdateFunctionConfigurationCela confirme que la politique des touches accepte les appels pour cette fonction spécifique avant que la fonction ne soit créée ou mise à jour.Permettez aux opérateurs d'exécution durables. Accorde des opérateurs
kms:Decryptpour les appels versGetDurableExecutionIncludeExecutionData=true,GetDurableExecutionHistoryavecGetDurableExecutionState,StopDurableExecution, et les API de rappel.
Il est recommandé d'utiliser des principes distincts pour le rôle d'exécution, l'auteur de la fonction et l'opérateur d'exécution durable afin que chaque identité ne dispose que des fonctionnalités dont elle a besoin.
Conditions politiques recommandées
La politique utilise les conditions suivantes pour limiter l'accès :
kms:ViaServicerestreint l'utilisation des clés aux demandes acheminées via Lambda. L'application de cette méthode aux instructions du rôle d'exécution, de l'auteur de la fonction et de l'opérateur les empêche d'utiliser directement la clé AWS KMS.aws:SourceArnetaws:SourceAccountprotégez-vous contre le problème de confusion entre les services adjoints. Lambda transmet ces valeurs lorsqu'il appelle AWS KMS en utilisant ses propres informations d'identification de service. Cette condition s'applique uniquement à la déclaration principale du service Lambda. Les instructions relatives au rôle d'exécution, à l'auteur de la fonction et à l'opérateur appellent AWS KMS avec les informations d'identification de la session d'accès direct de l'appelant, qui ne contiennent pas ces en-têtes.kms:EncryptionContext:aws:lambda:FunctionArnpermet d'accéder à la clé d'une fonction spécifique. Lambda ajoute cela au contexte de chiffrement de chaque AWS KMS appel pour des données d'exécution durables.
L'exemple suivant combine les instructions et les conditions ci-dessus.
Exemple Politique clé pour des fonctions durables
{ "Version": "2012-10-17", "Statement": [ { "Sid": "Enable IAM User Permissions", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:root" }, "Action": "kms:*", "Resource": "*" }, { "Sid": "Allow Lambda to use this key for durable functions", "Effect": "Allow", "Principal": { "Service": "lambda.amazonaws.com" }, "Action": [ "kms:GenerateDataKey", "kms:Decrypt" ], "Resource": "*", "Condition": { "StringEquals": { "aws:SourceAccount": "111122223333", "aws:SourceArn": "arn:aws:lambda:us-east-1:111122223333:function:myDurableFunction", "kms:EncryptionContext:aws:lambda:FunctionArn": "arn:aws:lambda:us-east-1:111122223333:function:myDurableFunction" } } }, { "Sid": "Allow the function execution role to decrypt durable execution data", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:role/myDurableFunctionRole" }, "Action": "kms:Decrypt", "Resource": "*", "Condition": { "StringEquals": { "kms:ViaService": "lambda.us-east-1.amazonaws.com", "kms:EncryptionContext:aws:lambda:FunctionArn": "arn:aws:lambda:us-east-1:111122223333:function:myDurableFunction" } } }, { "Sid": "Allow the function author to describe this key", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:role/FunctionAuthor" }, "Action": "kms:DescribeKey", "Resource": "*", "Condition": { "StringEquals": { "kms:ViaService": "lambda.us-east-1.amazonaws.com" } } }, { "Sid": "Allow the function author to validate this key for a specific function", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:role/FunctionAuthor" }, "Action": [ "kms:GenerateDataKey", "kms:Decrypt" ], "Resource": "*", "Condition": { "StringEquals": { "kms:ViaService": "lambda.us-east-1.amazonaws.com", "kms:EncryptionContext:aws:lambda:FunctionArn": "arn:aws:lambda:us-east-1:111122223333:function:myDurableFunction" } } }, { "Sid": "Allow durable execution operators", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:role/DurableExecutionOperator" }, "Action": "kms:Decrypt", "Resource": "*", "Condition": { "StringEquals": { "kms:ViaService": "lambda.us-east-1.amazonaws.com", "kms:EncryptionContext:aws:lambda:FunctionArn": "arn:aws:lambda:us-east-1:111122223333:function:myDurableFunction" } } } ] }
Pour plus d'informations sur les politiques AWS KMS clés, consultez Comment modifier une politique clé dans le Guide du AWS Key Management Service développeur.
Configuration d'une clé gérée par le client sur une fonction durable
Vous configurez la clé gérée par le client pour des données d'exécution durables via le KMSKeyArn champ de l'DurableConfigobjet. Réglez-le lorsque vous créez la fonction avec CreateFunction; mettez-le à jour sur une fonction durable existante avec UpdateFunctionConfiguration.
Important
Chaque exécution durable utilise la clé gérée par le client qui a été configurée sur la fonction lors de son démarrage. La modification ou la suppression de la clé n'affecte que les exécutions qui démarrent après la modification ; les exécutions en cours continuent d'utiliser la clé avec laquelle elles ont débuté jusqu'à ce qu'elles se terminent ou échouent.
Lecture de données d'exécution durables
Deux API de lecture renvoient des données d'exécution durables :
GetDurableExecutionrenvoie l'état actuel d'une seule exécution, y compris sa charge utile d'entrée, les dernières données de point de contrôle et les informations relatives aux résultats ou aux erreurs.GetDurableExecutionHistoryrenvoie la liste ordonnée des événements émis par l'exécution, indiquant les entrées et les résultats des points de contrôle, les entrées et les résultats des appels en chaîne, ainsi que le résultat final.
Les deux API acceptent un paramètre de IncludeExecutionData requête. Dans IncludeExecutionData ce castrue, Lambda utilise les informations d'identification de l'appelant pour appeler la clé gérée par kms:Decrypt le client. Lambda renvoie ensuite les données d'exécution déchiffrées dans la réponse. L'identité de l'appelant doit figurer kms:Decrypt sur la clé gérée par le client.
Dans IncludeExecutionData ce casfalse, Lambda n'appelle AWS KMS ni ne déchiffre les données d'exécution, et la réponse est définie sur. ExecutionDataIncluded false La réponse inclut toujoursDurableConfig, ce qui fait écho à la clé ARN gérée par le client utilisée par l'exécution. IncludeExecutionDataest défini par défaut surfalse, de sorte que les appelants qui n'ont besoin que de métadonnées n'ont pas besoin d' AWS KMS autorisations.
Exemple : GetDurableExecution réponse avec IncludeExecutionData=false
{ "DurableExecutionArn": "arn:aws:lambda:us-east-1:111122223333:function:myDurableFunction:execution:exec-abc123", "DurableExecutionName": "exec-abc123", "FunctionArn": "arn:aws:lambda:us-east-1:111122223333:function:myDurableFunction", "StartTimestamp": 1733256000, "Status": "RUNNING", "ExecutionDataIncluded": false, "DurableConfig": { "ExecutionTimeout": 3600, "KMSKeyArn": "arn:aws:kms:us-east-1:111122223333:key/key-id", "RetentionPeriodInDays": 30 } }
Invoques enchaînées
Lorsqu'une fonction durable utilise un appel enchaîné pour appeler une autre fonction durable, Lambda traite l'exécution enfant comme une exécution durable indépendante : elle possède son propre identifiant d'exécution, son propre flux de points de contrôle et sa propre clé gérée par le client. La configuration des clés gérées par le client du parent n'a aucun effet sur les données de l'enfant, et la configuration des clés gérées par le client de l'enfant n'a aucun effet sur les données du parent.
Permissions
Le responsable du service Lambda doit avoir kms:GenerateDataKey et kms:Decrypt sur la clé gérée par le client de la fonction enfant. Si les fonctions parent et enfant utilisent des clés gérées par le client différentes, vous accordez au principal du service l'accès à chaque clé séparément. Le rôle d'exécution de la fonction parent n'a pas besoin d'autorisations sur la clé gérée par le client de l'enfant.
Identifier quelle clé a chiffré quelle exécution
Les deux GetDurableExecution et ListDurableExecutionsByFunction renvoyez l'ARN de la clé gérée par le client qui a chiffré chaque exécution. Utilisez ces API pour vérifier quelle clé était active au début de l'exécution d'un parent ou d'un enfant.
Mise en cache des clés de données
Pour réduire le volume d' AWS KMS appels et améliorer la disponibilité en cas d'interruption de service, Lambda met en cache une clé de données générée à partir de votre clé gérée par le client pendant 15 minutes maximum. Lorsque le cache est chaud, Lambda réutilise la même clé de données entre les opérations d'une exécution et entre les exécutions démarrées pendant la fenêtre de cache.
Cost
Per-execution AWS KMS le coût reste faible car Lambda appelle GenerateDataKey au plus une fois par fenêtre de cache, et non une fois par point de contrôle. Lorsque les taux de demandes sont élevés, le coût par exécution diminue encore car un plus grand nombre d'exécutions partagent chaque clé de données mise en cache. Vous êtes facturé pour les AWS KMS appels que Lambda passe réellement, et non pour chaque point de contrôle ou chaque lecture.
Stabilité statique
Les clés de données restent en cache pendant 15 minutes maximum. Les modifications apportées à votre clé prennent effet lors de la prochaine actualisation du cache. Pendant les interruptions de service prolongées, Lambda continue de servir à partir du cache, ce qui permet de poursuivre les exécutions en cours.
CloudTrail
La mise en cache des clés de données signifie que vous voyez moins d'GenerateDataKeyévénements CloudTrail que d'exécutions ou de points de contrôle. Voir par Surveillance des clés KMS pour des fonctions durables exemple les événements.
Lorsque la clé gérée par le client n'est pas disponible
Si la clé gérée par le client avec laquelle une exécution a débuté est désactivée, si sa suppression est planifiée ou si son accès est révoqué par le biais de la politique des clés, l'exécution ne peut pas progresser davantage. Au point de contrôle suivant, Lambda échoue à l'exécution avec une AWS KMS erreur non réessayable. Le rétablissement de l'accès à la clé ne reprend pas automatiquement l'exécution. Vous devez lancer une nouvelle exécution.
Les API qui lisent ou écrivent des charges utiles échouent également lorsque la clé n'est pas disponible. Ils peuvent renvoyer l'une des exceptions suivantes :
KMSAccessDeniedException: Lambda n'a pas pu déchiffrer les données d'exécution durables car l'accès à la clé KMS a été refusé.KMSDisabledException: Lambda n'a pas pu déchiffrer les données d'exécution durables car la clé KMS est désactivée.KMSInvalidStateException: Lambda n'a pas pu déchiffrer les données d'exécution durables car l'état de la clé KMS n'est pas valide pour.DecryptKMSNotFoundException: Lambda n'a pas pu déchiffrer les données d'exécution durables car la clé KMS est introuvable.
La restauration de l'accès à la clé KMS permet à ces API de lecture de réussir à nouveau pour les exécutions qui ont déjà échoué. Les exécutions échouées restent des échecs ; vous devez recommencer une nouvelle exécution.
Pour inspecter les métadonnées d'exécution lorsque la clé KMS n'est pas disponible, appelez GetDurableExecution leIncludeExecutionData=false. Cela renvoie l'état de l'exécution, les horodatages et DurableConfig (y compris l'ARN de la clé KMS) sans appel. AWS KMS
Comme Lambda met en cache les clés de données, la désactivation d'une clé ne prend pas effet immédiatement. Pour en savoir plus, consultez Mise en cache des clés de données.
Important
La suppression d'une clé KMS dont dépendent toujours les exécutions en cours ou conservées détruit définitivement ces exécutions et leur historique.
Surveillance des clés KMS pour des fonctions durables
Lorsque vous utilisez une clé gérée par le client dotée d'une fonction durable, vous pouvez l'utiliser AWS CloudTrailpour suivre les AWS KMS appels que Lambda passe en votre nom. Pour obtenir des conseils généraux sur les AWS KMS événements de recherche, consultez la section Activité des AWS KMS API de recherche.
Pour vérifier que Lambda utilise votre clé comme prévu, recherchez les champs suivants dans chaque événement :
eventName: l'un desGenerateDataKeyDecrypt, ouDescribeKeyeventSource:kms.amazonaws.com.rproxy.goskope.comuserIdentity.invokedBy:lambda.amazonaws.com.rproxy.goskope.comrequestParameters.encryptionContext.aws:lambda:FunctionArn: l'ARN de la fonction durable
Les exemples suivants sont CloudTrail des événements issus d'un UpdateFunctionConfiguration appel CreateFunction ou qui configure une clé gérée par le client sur une fonction durable. Lambda émet trois AWS KMS appels pour valider la clé : une clé réelleDescribeKey, une clé à sec GenerateDataKey et. Decrypt