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 si trovano in account AWS diversi, aggiorna 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 relativi ad AWS CLI. Inoltre, assicurati di utilizzare la versione più recente di AWS CLI.

Risolvi gli errori "KMS Exception: UnrecognizedClientExceptionKMS Message"

Se il ruolo di una funzione Lambda viene eliminato e poi ricreato con lo stesso nome ma con un principale diverso, ricevi il seguente errore:

"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 il problema, 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 avere l'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 your-function-name con il nome della tua funzione.
  2. 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 temporary-value
    Nota: sostituisci temporary-value con l'ARN del ruolo di esecuzione temporaneo.
  3. Per aggiornare il ruolo di esecuzione della funzione riportandolo 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.

Risolvi gli errori "KMS Exception: AccessDeniedException KMS Message"

Se l'identità IAM non ha le autorizzazioni necessarie per eseguire l'azione API kms:Decrypt, ricevi il seguente messaggio di errore:

"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 il problema, utilizza la console IAM per aggiungere 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.

Risolvi gli errori "You are not authorized to perform"

Se l'identità IAM non ha le autorizzazioni necessarie per accedere alla chiave AWS KMS, ricevi uno dei seguenti messaggi di errore:

"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 di AWS KMS per l'identità IAM o per il ruolo di esecuzione della funzione non sono richieste se utilizzi la policy della chiave predefinita.

Per risolvere questi tipi di errore, assicurati che l'utente o il ruolo IAM abbia le autorizzazioni necessarie per eseguire queste azioni API di AWS KMS:

Se l'utente o il ruolo IAM non ha le autorizzazioni precedenti, utilizza la console IAM per aggiungerle.

Esempio di policy IAM che concede le autorizzazioni 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"

Se un'entità IAM non ha le autorizzazioni per ottenere segreti di AWS Secrets Manager, ricevi il seguente messaggio di errore:

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

Per risolvere il problema, assicurati che l'utente o il ruolo IAM abbia le autorizzazioni necessarie per eseguire queste azioni API di AWS KMS:

Se l'utente o il ruolo IAM non ha le autorizzazioni precedenti, utilizza la console IAM per aggiungerle.

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 7 mesi fa