Saltar al contenido

¿Cómo soluciono los errores de permiso de la función Lambda «KMS Exception»?

6 minutos de lectura
0

Mi función de AWS Lambda devolvió el error «KMS Exception», «You are not authorized to perform» o «Access to KMS is not allowed».

Resolución

Actualiza los permisos de AWS Key Management Service (AWS KMS) de tu identidad de AWS Identity and Access Management (IAM) en función del mensaje de error. Si la clave de AWS KMS y el rol de IAM pertenecen a cuentas de AWS diferentes, se deben actualizar la política de IAM y la política de claves de AWS KMS.

Nota: Si se muestran errores al ejecutar comandos de la Interfaz de la línea de comandos de AWS (AWS CLI), consulta Solución de problemas de AWS CLI. Además, asegúrate de utilizar la versión más reciente de la AWS CLI.

Resolución de errores «KMS Exception: UnrecognizedClientExceptionKMS Message»

El siguiente error se produce cuando se elimina el rol de ejecución de una función de Lambda y, a continuación, se vuelve a crear con el mismo nombre, pero con 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 AWS KMS key settings. KMS Exception: UnrecognizedClientExceptionKMS Message: The security token included in the request is invalid».

Para resolver el error, debes restablecer la concesión de.AWS KMS para el rol de ejecución de la función.

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

  1. Para obtener el nombre de recurso de Amazon (ARN) del rol de ejecución actual de la función y la clave de AWS KMS, ejecuta el siguiente comando get-function-configuration:
    aws lambda get-function-configuration --function-name your-function-name
    Nota: Sustituye yourFunctionName por el nombre de la función.
  2. Para restablecer la concesión de AWS KMS, realiza una de las siguientes acciones:
    Para actualizar el rol de ejecución de la función a un valor temporal diferente, ejecuta el siguiente comando update-function-configuration:
    aws lambda update-function-configuration --function-name yourFunctionName --role temporaryValue
    Nota: Sustituye temporaryValue por el ARN del rol de ejecución temporal.
    Para volver a actualizar el rol de ejecución de la función al rol de ejecución original, ejecuta el siguiente comando update-function-configuration:
    aws lambda update-function-configuration --function-name yourFunctionName --role originalValue
    Nota: Sustituye originalValue por el ARN del rol de ejecución original.
    Alternativa:
    Para actualizar la clave de AWS KMS de la función a un valor temporal diferente, ejecuta el siguiente comando update-function-configuration:
    aws lambda update-function-configuration --function-name yourFunctionName --kms-key-arn temporaryValue
    Nota: Sustituye temporaryValue por un ARN de clave de AWS KMS temporal. Para usar una clave de servicio predeterminada, define el parámetro kms-key-arn en "".
    Para volver a actualizar la clave de AWS KMS de la función al ARN de la clave de AWS KMS original, ejecuta el siguiente comando update-function-configuration:
    aws lambda update-function-configuration --function-name yourFunctionName --kms-key-arn originalValue
    
    Nota: Sustituye originalValue por el ARN original de la clave de AWS KMS.

Resolución de errores «KMS Exception: AccessDeniedException KMS Message»

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

Para resolver el error, agrega la siguiente instrucción de política a tu usuario o rol de IAM:

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

Nota: Sustituye your-KMS-key-arn por el ARN de la clave de AWS KMS.

Para obtener instrucciones, consulta Adición de permisos a un usuario (consola).

Resolución de errores «You are not authorized to perform»

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

Para resolver este tipo de errores, comprueba que tu usuario o rol de IAM tenga los permisos necesarios para realizar las siguientes acciones de la API de AWS KMS:

Para obtener instrucciones, consulta Adición de permisos a un usuario (consola).

Ejemplo de instrucción de política de IAM que concede los permisos necesarios para acceder a una clave de AWS KMS administrada por el 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: El valor del recurso debe ser "*". La acción kms:ListAliases no admite permisos de bajo nivel. Además, asegúrate de sustituir «your-kms-key-arn» por el ARN de tu clave de AWS KMS.

Resolución de errores «Access to KMS is not allowed»

El siguiente error indica que una entidad de IAM no tiene permisos para obtener los secretos de AWS Secrets Manager:

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

Asegúrate de que tu usuario o rol de IAM tenga los permisos necesarios para realizar las siguientes acciones de la API de AWS KMS:

Para obtener más información, consulta ¿Cómo soluciono los errores de acceso a las claves de AWS KMS después de intentar recuperar un secreto cifrado de Secrets Manager?

Información relacionada

¿Cómo soluciono los errores de los códigos de estado HTTP 502 y HTTP 500 (del lado del servidor) de AWS Lambda?

¿Cómo puedo solucionar los errores en la función de Lambda?

OFICIAL DE AWSActualizada hace 7 meses