Passer au contenu

Comment résoudre les erreurs d'autorisation « Exception KMS » de la fonction Lambda ?

Lecture de 6 minute(s)
0

Ma fonction AWS Lambda a renvoyé une erreur « Exception KMS », « Vous n'êtes pas autorisé à exécuter » ou « L'accès à KMS n'est pas autorisé ».

Résolution

Mettez à jour les autorisations AWS Key Management Service (AWS KMS) de votre identité Gestion des identités et des accès (IAM) en fonction du message d'erreur. Si la clé AWS KMS et le rôle IAM appartiennent à des comptes AWS différents, la politique IAM et la stratégie clé AWS KMS doivent être mises à jour.

Remarque : Si des erreurs surviennent lorsque vous exécutez des commandes de l'interface de la ligne de commande AWS (AWS CLI), consultez la section Résoudre des erreurs liées à l’AWS CLI. Vérifiez également que vous utilisez bien la version la plus récente de l'interface.

Résoudre les erreurs « KMS Exception: UnrecognizedClientExceptionKMS Message » (Exception KMS : Message UnrecognizedClientExceptionKMS)

L'erreur suivante se produit lorsque le rôle d'exécution d'une fonction Lambda est supprimé, puis recréé sous le même nom, mais avec un principal différent :

« Calling the invoke API action failed with this message: Lambda was unable to decrypt the environment variables because KMS access was denied. Please check the function's AWS KMS key settings. KMS Exception: UnrecognizedClientExceptionKMS Message: The security token included in the request is invalid. » (L'appel de l'action d'API d'invocation a échoué avec ce message : Lambda n'a pas pu déchiffrer les variables d'environnement car l'accès au KMS a été refusé. Vérifiez les paramètres clés AWS KMS de la fonction. Exception KMS : Message KMS UnrecognizedClientException : Le jeton de sécurité inclus dans la requête n’est pas valide.)

Pour résoudre l'erreur, vous devez réinitialiser l'octroi AWS KM pour le rôle d'exécution de la fonction.

Remarque : L'utilisateur IAM qui crée et met à jour la fonction Lambda doit être autorisé à utiliser la clé AWS KMS.

  1. Pour obtenir l’Amazon Resource Name (ARN) du rôle d'exécution actuel de la fonction et la clé AWS KMS, exécutez la commande get-function-configuration suivante :
    aws lambda get-function-configuration --function-name your-function-name
    Remarque : Remplacez yourFunctionName par le nom de votre fonction.
  2. Pour réinitialiser l’octroi AWS KMS, effectuez l'une des opérations suivantes :
    Pour mettre à jour le rôle d'exécution de la fonction vers une valeur temporaire différente, exécutez la commande update-fonction-configuration suivante :
    aws lambda update-function-configuration --function-name yourFunctionName --role temporaryValue
    Remarque : Remplacez temporaryValue par l’ARN du rôle d'exécution temporaire.
    Pour remettre le rôle d'exécution de la fonction au rôle d'exécution d'origine, exécutez la commande update-function-configuration suivante :
    aws lambda update-function-configuration --function-name yourFunctionName --role originalValue
    Remarque : Remplacez originalValue par l’ARN du rôle d'exécution d'origine.
    -ou-
    Pour mettre à jour la clé AWS KMS de la fonction vers une valeur temporaire différente, exécutez la commande update-function-configuration suivante :
    aws lambda update-function-configuration --function-name yourFunctionName --kms-key-arn temporaryValue
    Remarque : Remplacez temporaryValue par un ARN de clé AWS KMS temporaire. Pour utiliser une clé de service par défaut, définissez le paramètre kms-key-arn sur "".
    Pour remettre la clé AWS KMS de la fonction à l'ARN de la clé AWS KMS d'origine, exécutez la commande update-function-configuration suivante :
    aws lambda update-function-configuration --function-name yourFunctionName --kms-key-arn originalValue
    
    Remarque : Remplacez originalValue par l'ARN de la clé AWS KMS d'origine.

Résoudre les erreurs « KMS Exception: AccessDeniedException KMS Message » (Exception KMS : Message KMS AccessDeniedException)

L'erreur suivante indique que votre identité IAM ne dispose pas des autorisations requises pour exécuter l'action d'API kms:Decrypt :

« Lambda was unable to decrypt your environment variables because the KMS access was denied. Please check your KMS permissions. KMS Exception: AccessDeniedException KMS Message: The ciphertext refers to a customer master key that does not exist, does not exist in this region, or you are not allowed to access. » (Lambda n'a pas pu déchiffrer vos variables d'environnement car l'accès á KMS a été refusé. Veuillez vérifier vos autorisations KMS. Exception KMS : Message KMS AccessDeniedException. Le texte chiffré se rapporte à une clé principale client qui n’existe pas, n’existe pas dans cette région ou vous ne disposez pas d’une autorisation d’accès.)

Pour résoudre l'erreur, ajoutez l’instruction de politique suivante à votre utilisateur ou à votre rôle IAM :

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": "kms:Decrypt",
            "Resource": "your-KMS-key-arn"
        }
    ]
}

Remarque : Remplacez your-KMS-key-arn par l'ARN de votre clé AWS KMS.

Pour obtenir des instructions, consultez la section Ajouter des autorisations à un utilisateur (console).

Résoudre les erreurs « Vous ne disposez pas d’une autorisation d’accès »

Les erreurs suivantes indiquent que votre identité IAM ne dispose pas des autorisations requises pour accéder à la clé AWS KMS :

« You are not authorized to perform: kms:Encrypt. » (Vous n'êtes pas autorisé à exécuter : kms:Encrypt.)

« You are not authorized to perform: kms:CreateGrant. » (Vous n'êtes pas autorisé à exécuter : kms:CreateGrant.)

« User: user-arn is not authorized to perform: kms:ListAliases on resource: * with an explicit deny. » (L'utilisateur : user-arn n'est pas autorisé à exécuter : kms:ListAliases sur la ressource : * avec un refus explicite.)

Remarque : Les autorisations AWS KMS ne sont pas requises pour votre identité IAM ou le rôle d'exécution de la fonction si vous utilisez la politique de clé par défaut.

Pour résoudre ces types d'erreurs, vérifiez que votre utilisateur ou votre rôle IAM dispose des autorisations requises pour effectuer les actions d'API AWS KMS suivantes :

Pour obtenir des instructions, consultez la section Ajouter des autorisations à un utilisateur (console).

Exemple d’instruction de politique IAM qui accorde les autorisations requises pour accéder à une clé AWS KMS gérée par le client

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "statement1",
            "Effect": "Allow",
            "Action": [
                "kms:Decrypt",
                "kms:Encrypt",
                "kms:CreateGrant"
            ],
            "Resource": "your-kms-key-arn"
        },
        {
            "Sid": "statement2",
            "Effect": "Allow",
            "Action": "kms:ListAliases",
            "Resource": "*"
        }
    ]
}

Remarque : La valeur de Ressource doit être « * ». L'action kms:ListAliases ne prend pas en charge les autorisations de bas niveau. Assurez-vous également de remplacer « your-kms-key-arn » par votre ARN de clé AWS KMS.

Résoudre les erreurs « L'accès à KMS n'est pas autorisé »

L'erreur suivante indique qu'une entité IAM n'est pas autorisée à obtenir des secrets AWS Secrets Manager :

« Access to KMS is not allowed (Service : AWSSecretsManager; Status Code: 400; Error Code: AccessDeniedException; Request ID: 123a4bcd-56e7-89fg-hij0-1kl2m3456n78) » (L’accès à KMS n’est pas autorisé (Service : AWSSecretsManager ; Code d’état : 400 ; Code d’erreur : AccessDeniedException ; ID de requête : 123a4bcd-56e7-89fg-hij0-1kl2m3456n78)

Assurez-vous que votre utilisateur ou votre rôle IAM dispose des autorisations requises pour effectuer les actions d'API AWS KMS suivantes :

Pour en savoir plus, consultez la section Comment puis-je résoudre les erreurs d'accès à la clé AWS KMS après avoir essayé de récupérer un secret Secrets Manager chiffré ?

Informations connexes

Comment puis-je résoudre les erreurs de code de statut HTTP 502 et HTTP 500 (côté serveur) provenant d'AWS Lambda ?

Comment puis-je corriger les défaillances de la fonction Lambda ?

AWS OFFICIELA mis à jour il y a un an