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

6 minutos de lectura
0

La función de AWS Lambda devuelve un error “KMSAccessDeniedException”.

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 AWS KMS.

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

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 de Lambda 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 AWS 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 AWS 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 AWS KMS:

Nota: Reemplace yourFunctionName por el nombre de su función.

$ 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

o

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 AWS 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 AWS KMS de la función al ARN de la clave de AWS KMS original con el siguiente comando:

Importante: Reemplace originalValue con el ARN de la clave de AWS 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 AWS 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 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 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 de la API de AWS KMS:

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

Cómo resolver los errores “No se permite el acceso a KMS”

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úrese de que su 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, consulte ¿Cómo puedo resolver problemas para acceder a un secreto cifrado de AWS Secrets Manager?


Información relacionada

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

¿Cómo soluciono los problemas derivados de errores en una función de Lambda?

OFICIAL DE AWS
OFICIAL DE AWSActualizada hace un año