In che modo posso risolvere gli errori "KMSAccessDeniedException" da AWS Lambda?

6 minuti di lettura
0

La mia funzione AWS Lambda ha restituito un errore "KMSAccessDeniedException".

Breve descrizione

Aggiorna le autorizzazioni del Servizio di gestione delle chiavi AWS (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 a diversi account AWS, è necessario aggiornare sia la policy IAM che la policy della chiave AWS KMS.

Per ulteriori informazioni sulle chiavi AWS KMS e sulla gestione delle policy, consulta la pagina Chiavi AWS KMS.

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 Lambda viene eliminato e poi ricreato utilizzando lo stesso nome, ma con un principale 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 AWS 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 AWS KMS.

1.    Ottieni il nome della risorsa Amazon (ARN) del ruolo di esecuzione corrente della funzione e la chiave AWS KMS, eseguendo il seguente comando AWS CLI:

Nota: sostituisci yourFunctionName con il nome della tua funzione.

$ 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 AWS 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 AWS KMS della funzione all'ARN della chiave AWS KMS originale eseguendo il seguente comando:

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

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

Per ulteriori informazioni, consulta la pagina Policy delle chiavi 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 dichiarazione di policy al tuo utente o ruolo IAM:

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

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

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

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 AWS 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 AWS KMS non sono richieste per la tua identità IAM o per 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 API AWS KMS:

Per istruzioni, consulta la pagina 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 dichiarazione di policy IAM che concede le autorizzazioni necessarie per accedere a una chiave AWS KMS gestita dal cliente

Importante: il valore della risorsa deve essere "*". L'operazione kms:ListAliases non supporta le autorizzazioni di basso livello. Inoltre, assicurati di sostituire "your-kms-key-arn" con l'ARN della tua chiave AWS KMS.

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

Per risolvere gli errori "Access to KMS is not allowed" (Accesso a KMS non consentito)

L'errore seguente indica che un'entità IAM non dispone delle autorizzazioni per ottenere i segreti di Gestione dei segreti AWS:

Access to KMS is not allowed (Service: AWSSecretsManager; Status Code: 400; Error Code: AccessDeniedException; Request ID: 123a4bcd-56e7-89fg-hij0-1kl2m3456n78)

Assicurati che l'utente o il ruolo IAM disponga delle autorizzazioni necessarie per eseguire le seguenti operazioni API AWS KMS:

Per ulteriori informazioni, consulta la pagina How can I resolve issues accessing an encrypted AWS Secrets Manager secret? (Come posso risolvere i problemi di accesso a un segreto crittografato dalla Gestione dei segreti AWS?)


Informazioni correlate

How do I troubleshoot HTTP 502 and HTTP 500 status code (server-side) errors from AWS Lambda? (Come posso risolvere gli errori del codice di stato HTTP 502 e HTTP 500 (lato server) da AWS Lambda?)

How do I troubleshoot Lambda function failures? (Come posso risolvere gli errori della funzione Lambda?)

AWS UFFICIALE
AWS UFFICIALEAggiornata un anno fa