Comment résoudre les erreurs KMSAccessDeniedException à partir d'AWS Lambda ?

Date de la dernière mise à jour : 15/11/2021

Ma fonction AWS Lambda renvoie une erreur KMSAccessDeniedException. Comment résoudre ce problème ?

Brève description

Mettez à jour les autorisations AWS Key Management Service (AWS KMS) de votre identité AWS Identity and Access Management (IAM) en fonction du message d'erreur.

Important : si la clé AWS KMS et le rôle IAM appartiennent à des comptes AWS différents, la politique IAM et la politique de la clé KMS doivent toutes deux être mises à jour.

Pour plus d'informations sur les clés AWS KMS et la gestion des politiques, consultez Clés KMS gérées par AWS et clés gérées par le client.

Solution

Remarque : si vous recevez des messages d'erreurs lors de l'exécution de commandes AWS Command Line Interface (AWS CLI), vérifiez que vous utilisez la version la plus récente d'AWS CLI.

Pour résoudre les erreurs « KMS Exception: UnrecognizedClientExceptionKMS Message »

L'erreur suivante se produit généralement lorsque le rôle d'exécution d'une fonction est supprimé, puis recréé en utilisant 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 KMS key settings. KMS Exception: UnrecognizedClientExceptionKMS Message: The security token included in the request is invalid.

Pour résoudre l'erreur, vous devez réinitialiser l'autorisation AWS KMS pour le rôle d'exécution de la fonction en procédant comme suit :

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

1.    Obtenez l'Amazon Resource Name (ARN) du rôle d'exécution actuel de la fonction et de la clé KMS, en exécutant la commande AWS CLI suivante :

$ aws lambda get-function-configuration --function-name yourFunctionName

2.    Réinitialisez l'autorisation KMS d'AWS en effectuant l'une des opérations suivantes :

Mettez à jour le rôle d'exécution de la fonction à une valeur différente et temporaire, en exécutant la commande update-function-configuration suivante :

Important : remplacez temporaryValue par l'ARN du rôle d'exécution temporaire.

$ aws lambda update-function-configuration --function-name yourFunctionName --role temporaryValue

Ensuite, mettez à jour le rôle d'exécution de la fonction pour revenir au rôle d'exécution original en exécutant la commande suivante :

Important : remplacez originalValue par l'ARN du rôle d'exécution d'origine.

$ aws lambda update-function-configuration --function-name yourFunctionName --role originalValue

-ou-

Mettez à jour la clé KMS AWS de la fonction avec une valeur différente et temporaire, en exécutant la commande update-function-configuration suivante :

Important : remplacez temporaryValue par un ARN de clé KMS temporaire. Pour utiliser une clé de service par défaut, définissez le paramètre kms-key-arn sur "".

$ aws lambda update-function-configuration --function-name yourFunctionName --kms-key-arn temporaryValue

Ensuite, mettez à jour la clé KMS de la fonction pour revenir à l'ARN de la clé KMS d'origine en exécutant la commande suivante :

Important : remplacez originalValue par l'ARN de la clé KMS d'origine

$ aws lambda update-function-configuration --function-name yourFunctionName --kms-key-arn originalValue

Pour plus d'informations, consultez Politiques de clés dans AWS KMS.

Pour résoudre les erreurs « KMS Exception: AccessDeniedException KMS Message »

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.

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

Important : remplacez "your-KMS-key-arn" par votre ARN de clé KMS.

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

Pour obtenir des instructions, consultez Ajout d'autorisations à un utilisateur (console) ou Modification d'une politique d'autorisations de rôle (console), en fonction de votre cas d'utilisation..

Pour résoudre les erreurs « You are not authorized to perform » (Vous n'êtes pas autorisé à effectuer)

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

You are not authorized to perform: kms:Encrypt.
You are not authorized to perform: kms:CreateGrant.
User: user-arn is not authorized to perform: kms:ListAliases on resource: * with an explicit deny.

Remarque : les autorisations 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 suivantes :

Pour obtenir des instructions, consultez Ajout d'autorisations à un utilisateur (console) ou Modification d'une politique d'autorisations de rôle (console), en fonction de votre cas d'utilisation..

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

Important : la valeur de la 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 l'ARN de votre clé KMS.

"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": "*"
        }
    ]

Cet article vous a-t-il été utile ?


Besoin d'aide pour une question technique ou de facturation ?