Come posso risolvere gli errori KMSAccessDeniedException da AWS Lambda?

Ultimo aggiornamento: 15/11/2021

La mia funzione AWS Lambda restituisce un errore KMSAccessDeniedException. In che modo posso risolvere il problema?

Breve descrizione

Aggiorna le autorizzazioni AWS Key Management Service (AWS KMS) della tua identità AWS Identity and Access Management (IAM) in base al messaggio di errore.

Importante: se la chiave AWS KMS e il ruolo IAM appartengono ad account AWS diversi, è necessario aggiornare sia la policy IAM che la policy della chiave KMS.

Per ulteriori informazioni sulle chiavi AWS KMS e sulla gestione delle policy, consulta Chiavi KMS gestite da AWS e chiavi gestite dai clienti.

Risoluzione

Nota: se ricevi messaggi di errore durante l'esecuzione dei comandi AWS Command Line Interface (AWS CLI), assicurati di utilizzare la versione più recente di AWS CLI.

Per risolvere gli errori "KMS Exception: UnrecognizedClientExceptionKMS Message"

Il seguente errore si verifica in genere quando il ruolo di esecuzione di una funzione viene eliminato e poi ricreato utilizzando lo stesso nome, ma con un principal diverso:

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.

Per risolvere l'errore, è necessario reimpostare la concessione AWS KMS per il ruolo di esecuzione della funzione effettuando le seguenti operazioni:

Nota: l'utente IAM che crea e aggiorna la funzione Lambda deve disporre dell'autorizzazione per utilizzare la chiave KMS.

1.    Ottieni l'Amazon Resource Name (ARN) del ruolo di esecuzione corrente della funzione e della chiave KMS tramite il seguente comando AWS CLI:

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

2.    Reimposta la concessione AWS KMS effettuando una delle seguenti operazioni:

Aggiorna il ruolo di esecuzione della funzione a un valore temporaneo diverso tramite il seguente comando update-function-configuration:

Importante: sostituisci temporaryValue con l'ARN del ruolo di esecuzione temporaneo.

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

Quindi, aggiorna il ruolo di esecuzione della funzione al ruolo di esecuzione originale tramite il seguente comando:

Importante: sostituisci originalValue con l'ARN del ruolo di esecuzione originale.

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

-oppure-

Aggiorna la chiave AWS KMS della funzione a un valore temporaneo diverso tramite il seguente comando update-function-configuration:

Importante: sostituisci temporaryValue con l'ARN della chiave KMS temporanea. Per utilizzare una chiave di servizio predefinita, imposta il parametro kms-key-arn su "".

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

Quindi, aggiorna la chiave KMS della funzione all'ARN della chiave KMS originale tramite il seguente comando:

Importante: sostituisci originalValue con l'ARN della chiave KMS originale

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

Per ulteriori informazioni, consulta Policy della chiave in AWS KMS.

Per risolvere gli errori "KMS Exception: AccessDeniedException KMS Message"

Il seguente errore indica che la tua identità IAM non dispone delle autorizzazioni necessarie per eseguire l'operazione 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.

Per risolvere l'errore, aggiungi la seguente istruzione di policy al tuo utente o ruolo IAM:

Importante: sostituisci "your-KMS-key-arn" con l'ARN della tua chiave KMS.

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

Per risolvere gli errori "You are not authorized to perform" (Non disponi dell'autorizzazione necessaria per eseguire)

I seguenti errori indicano che la tua identità IAM non dispone di una delle autorizzazioni necessarie per accedere alla chiave 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.

Nota: le autorizzazioni KMS non sono richieste per la tua identità IAM o il ruolo di esecuzione della funzione se utilizzi la policy della chiave predefinita.

Per risolvere questi tipi di errori, verifica che l'utente o il ruolo IAM disponga delle autorizzazioni necessarie per eseguire le seguenti operazioni:

Per istruzioni, consulta Aggiunta di autorizzazioni a un utente (console) o Modifica della policy di autorizzazione di un ruolo (console), in base al proprio caso d'uso.

Esempio di istruzione di policy IAM che concede le autorizzazioni necessarie per accedere a una chiave KMS gestita dal cliente

Importante: il valore della risorsa deve essere "*". L'operazione kms:ListAliases non supporta autorizzazioni di basso livello. Inoltre, assicurati di sostituire "your-kms-key-arn" con l'ARN della tua chiave 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": "*"
        }
    ]

Questo articolo è stato utile?


Hai bisogno di supporto tecnico o per la fatturazione?