¿Cómo resuelvo los errores KMSAccessDeniedException de AWS Lambda?

Última actualización: 15/11/2021

La función AWS Lambda devuelve un error KMSAccessDeniedException. ¿Cómo soluciono este problema?

Descripción breve

Actualice los permisos de AWS Key Management Service (AWS KMS) de la identidad de AWS Identity and Access Management (IAM) según el mensaje de error.

Importante: Si la clave de AWS KMS y el rol de IAM pertenecen a cuentas de AWS diferentes, debe actualizar tanto la política de IAM como la política de claves de KMS.

Para obtener más información sobre las claves de AWS KMS y la administración de políticas, consulte Claves de KMS administradas por AWS y claves administradas por el cliente.

Resolución

Nota: Si recibe errores al ejecutar comandos de AWS Command Line Interface (AWS CLI), asegúrese de que está utilizando la versión más reciente de AWS CLI.

Cómo resolver errores “KMS Exception: UnrecognizedClientExceptionKMS Message”

El siguiente error suele producirse al eliminar el rol de ejecución de una función y luego volver a crearlo con el mismo nombre pero una entidad principal diferente:

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.

Para resolver el error, debe restablecer la concesión de AWS KMS para el rol de ejecución de la función de la siguiente manera:

Nota: El usuario de IAM que crea y actualiza la función de Lambda debe contar con el permiso para usar la clave de KMS.

1.    Ejecute el siguiente comando de AWS CLI para obtener el nombre de recurso de Amazon (ARN) del rol de ejecución actual de la función y la clave de KMS:

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

2.    Reinicie la concesión de AWS KMS de una de las siguientes formas:

Actualice el rol de ejecución de la función con un valor temporal diferente. Para ello, ejecute el siguiente comando update-function-configuration:

Importante: Reemplace temporaryValue con el ARN del rol de ejecución temporal.

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

A continuación, actualice el rol de ejecución de la función al rol de ejecución original con el siguiente comando:

Importante: Reemplace originalValue con el ARN del rol de ejecución original.

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

De forma alternativa, realice lo siguiente:

Actualice la clave de AWS KMS de la función con un valor temporal diferente mediante el siguiente comando update-function-configuration:

Importante: Reemplace temporaryValue con un ARN de clave de KMS temporal. Para usar una clave de servicio predeterminada, establezca el parámetro kms-key-arn en "".

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

A continuación, actualice la clave de KMS de la función al ARN de la clave de KMS original con el siguiente comando:

Importante: Reemplace originalValue con el ARN de la clave de KMS original.

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

Para obtener más información, consulte Políticas de claves en AWS KMS.

Cómo resolver errores “KMS Exception: AccessDeniedException KMS Message”

El siguiente error indica que la identidad de IAM no cuenta con los permisos necesarios para realizar la acción de la API de 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.

Para resolver el error, agregue la siguiente declaración de política al rol o usuario de IAM:

Importante: Reemplace your-KMS-key-arn con el ARN de la clave de KMS.

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

Para obtener instrucciones, consulte Agregar permisos a un usuario (consola) o Modificar una política de permisos de roles (consola) según el caso de uso.

Cómo resolver errores “You are not authorized to perform”

Los siguientes errores indican que su identidad de IAM no cuenta con uno de los permisos necesarios para acceder a la clave de 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: Los permisos de KMS no son necesarios en su identidad de IAM ni en el rol de ejecución de la función si usa la política de claves predeterminada.

Para resolver este tipo de errores, compruebe que el usuario o el rol de IAM cuenten con los permisos necesarios a fin de realizar las siguientes acciones:

Para obtener instrucciones, consulte Agregar permisos a un usuario (consola) o Modificar una política de permisos de roles (consola) según el caso de uso.

Ejemplo de una declaración de política de IAM que concede los permisos necesarios para acceder a una clave de KMS administrada por el cliente

Importante: El valor del recurso debe ser “*”. La acción kms:ListAliases no admite permisos de bajo nivel. Además, asegúrese de reemplazar your-kms-key-arn con el ARN de la clave de 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": "*"
        }
    ]

¿Le resultó útil este artículo?


¿Necesita asistencia técnica o con la facturación?