Salta al contenuto

Come posso risolvere gli errori di autorizzazione "KMS Exception" di una funzione Lambda?

5 minuti di lettura
0

La mia funzione AWS Lambda ha restituito un errore "KMS Exception", "You are not authorized to perform" o "Access to KMS is not allowed".

Risoluzione

Aggiorna le autorizzazioni del Servizio AWS di gestione delle chiavi (AWS KMS) dell'identità AWS Identity and Access Management (AWS IAM) in base al messaggio di errore. Se la chiave AWS KMS e il ruolo IAM appartengono a diversi account AWS, devi aggiornare sia la policy IAM che la policy della chiave AWS KMS.

Nota: se ricevi errori quando esegui i comandi dell'Interfaccia della linea di comando AWS (AWS CLI), consulta Risoluzione degli errori per AWS CLI. Inoltre, assicurati di utilizzare la versione più recente di AWS CLI.

Risolvi gli errori "KMS Exception: UnrecognizedClientExceptionKMS Message"

L'errore seguente si verifica quando il ruolo di esecuzione di una funzione Lambda viene eliminato e successivamente ricreato con 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 risolverlo, devi reimpostare la concessione di AWS KMS per il ruolo di esecuzione della funzione.

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

  1. Per ottenere il nome della risorsa Amazon (ARN) del ruolo di esecuzione corrente della funzione e della chiave AWS KMS, esegui questo comando get-function-configuration:
    aws lambda get-function-configuration --function-name your-function-name
    Nota: sostituisci yourFunctionName con il nome della tua funzione.
  2. Per reimposta la concessione di AWS KMS, effettua una delle seguenti operazioni:
    Per aggiornare il ruolo di esecuzione della funzione a un valore temporaneo diverso, esegui questo comando update-function-configuration:
    aws lambda update-function-configuration --function-name yourFunctionName --role temporaryValue
    Nota: sostituisci temporaryValue con l'ARN del ruolo di esecuzione temporaneo.
    Per aggiornare il ruolo di esecuzione della funzione al ruolo di esecuzione originale, esegui questo comando update-function-configuration:
    aws lambda update-function-configuration --function-name yourFunctionName --role originalValue
    Nota: sostituisci originalValue con l'ARN del ruolo di esecuzione originale.
    -oppure-
    Per aggiornare la chiave AWS KMS della funzione a un valore temporaneo diverso, esegui questo comando update-function-configuration:
    aws lambda update-function-configuration --function-name yourFunctionName --kms-key-arn temporaryValue
    Nota: sostituisci temporaryValue con l'ARN di una chiave AWS KMS temporanea. Per utilizzare una chiave di servizio predefinita, imposta il parametro kms-key-arn su "".
    Per aggiornare la chiave AWS KMS della funzione all'ARN della chiave AWS KMS originale, esegui questo comando update-function-configuration:
    aws lambda update-function-configuration --function-name yourFunctionName --kms-key-arn originalValue
    
    Nota: sostituisci originalValue con l'ARN della chiave AWS KMS originale.

Risolvi gli errori "KMS Exception: AccessDeniedException KMS Message"

L'errore seguente indica che l'identità IAM non ha le autorizzazioni necessarie per eseguire l'azione 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 risolverlo, aggiungi la seguente istruzione di policy all'utente o al ruolo IAM:

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

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

Per istruzioni, consulta Aggiunta di autorizzazioni a un utente (console).

Risolvi gli errori "You are not authorized to perform"

I seguenti errori indicano che l'identità IAM non ha una delle autorizzazioni richieste 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 l'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 azioni API AWS KMS:

Per istruzioni, consulta Aggiunta di autorizzazioni a un utente (console).

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

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

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

Risolvi gli errori "Access to KMS is not allowed"

L'errore seguente indica che un'entità IAM non ha le autorizzazioni per ottenere segreti di AWS Secrets Manager:

"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 abbia le autorizzazioni necessarie per eseguire le seguenti azioni API in AWS KMS:

Per ulteriori informazioni, consulta Come posso risolvere gli errori di accesso alla chiave AWS KMS dopo aver provato a recuperare un segreto crittografato di Secrets Manager?

Informazioni correlate

Come posso risolvere gli errori dei codici di stato HTTP 502 e HTTP 500 (lato server) di AWS Lambda?

Come faccio a risolvere i problemi relativi alla funzione Lambda?

AWS UFFICIALEAggiornata un anno fa