¿Cómo puedo resolver errores 400 con acceso denegado para el texto cifrado de AWS KMS en AWS Glue?

6 minutos de lectura
0

Aparece un error 400 al ejecutar un rastreador de AWS Glue o un trabajo de ETL de AWS Glue.

Descripción breve

Al utilizar AWS Glue, es posible que, al intentar acceder a recursos de AWS, como los buckets de Amazon Simple Service Solution (Amazon S3), reciba un error que indique lo siguiente:

“El texto cifrado hace referencia a una clave maestra de cliente que no existe, que no existe en esta región o a la cual no se le permite acceder”.

Aparece este error al acceder a cualquier servicio de AWS que esté cifrado con claves de AWS Key Management Service (AWS KMS) mediante tareas o rastreadores de AWS Glue. Lo más probable es que el error se produzca por uno de estos motivos:

  • La entidad principal que intenta acceder a la clave cifrada no tiene los permisos de AWS KMS requeridos
  • La clave de AWS KMS no existe o no existe en una región de AWS específica

Resolución

Nota: Si recibe errores al ejecutar comandos de la Interfaz de la línea de comandos de AWS (AWS CLI), asegúrese de que utiliza la versión más reciente de AWS CLI.

Compruebe si su política de roles de AWS Glue tiene los permisos necesarios

Primero, compruebe que la política de roles de AWS Glue que está utilizando tenga los permisos necesarios para acceder a la clave de AWS KMS del recurso.

Por ejemplo, suponga que tiene un rol de AWS Glue denominado AWSGlue-MyGlueCustomRole. Este rol accede a un bucket de S3 que está cifrado con la clave de AWS KMS arn:aws:kms:us-east-1:XXXXXXXX9645:key/64d3e826-1a87-4cbc-95b8-fb386730a07. La política de roles de AWS Glue debe tener el siguiente contexto, además de sus otros permisos:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "kms:Decrypt",
                "kms:Encrypt",
                "kms:GenerateDataKey"
            ],
            "Resource": "arn:aws:kms:us-east-1:XXXXXXXX9645:key/64d3e826-1a87-4cbc-95b8-fb386730a07"
        }
    ]
}

Compruebe si su política de claves de AWS KMS permite el rol de AWS Glue

La política de claves de AWS KMS debe permitir que el rol de AWS Glue forme parte de su entidad permitida.

Según el ejemplo anterior, la política de la clave de AWS KMS arn:aws:kms:us-east-1:XXXXXXXX9645:key/64d3e826-1a87-4cbc-95b8-fb386730a07 debe tener adjuntos los siguientes permisos:

{
    "Sid": "Allow use of the key",
    "Effect": "Allow",
    "Principal": {
        "AWS": [
            "arn:aws:iam::XXXXXXXX9645:role/AWSGlue-MyGlueCustomRole "
        ]
    },
    "Action": [
        "kms:Encrypt",
        "kms:Decrypt",
        "kms:ReEncrypt*",
        "kms:GenerateDataKey*",
        "kms:DescribeKey"
    ],
    "Resource": "*"
}

Asegúrese de que la clave de AWS KMS esté en la misma región que su trabajo de AWS Glue

Para comprobar en qué región se encuentra su clave de AWS KMS, siga estos pasos:

1.    Abra la consola de AWS KMS.

2.    Elija la región en la que se produce el error.

3.    En el panel de navegación, elija las claves administradas de AWS o las claves administradas por el cliente. A continuación, busque la clave de AWS KMS que esté utilizando. También puede utilizar la AWS CLI para buscar la clave de AWS KMS. El siguiente comando devuelve un error NotFoundException si la clave no existe en la región:

aws kms describe-key --key-id <Key-ID> --region <region-name>

Nota: Asegúrese de reemplazar <ID de clave>y, <nombre-región>en este ejemplo, por el ID de clave y el nombre de la región que está utilizando.

4.    Compruebe las llamadas KMS:Decrypt y KMS:Encrypt a la API de AWS CloudTrail para ver si observa algún error. O bien, puede ver todos los registros de eventos usando kms.amazonaws.com como fuente de eventos.

Ejemplo entre cuentas

Si el rol de AWS Glue y la clave de AWS KMS se encuentran en cuentas diferentes, utilice la clave administrada por el cliente y no la clave administrada de AWS. Las claves de AWS KMS solo se pueden usar cuando los principios provienen de la misma cuenta. No puede modificar la política de claves para las claves administradas de AWS. Cuando acceda a la clave de AWS KMS en la segunda cuenta, asegúrese de que los permisos estén presentes tanto en el origen como en el destino.

Supongamos que desea permitir que un usuario X de AWS Identity and Access Management (IAM) de la cuenta Y acceda a una clave de AWS KMS en la cuenta Z. En este caso, la política de IAM debe incluir las acciones de AWS KMS necesarias. La política de claves de AWS KMS debe permitir las mismas acciones. Para obtener más información, consulte Permitir que los usuarios de otras cuentas usen una clave de AWS KMS.

Estos son los problemas más comunes que se producen al acceder a una clave de AWS KMS desde una cuenta cruzada.

Si el mensaje de error se debe a una política de control de servicio (SCP), compruebe todos los SCP aplicados en su cuenta. Esto ayuda a identificar el SCP que restringe la acción kms:decrypt. Actualice el SCP afectado y vuelva a intentar la acción. Para obtener más información, consulte Enumerar las políticas asociadas a una raíz, una unidad organizativa o una cuenta y Cómo actualizar un SCP. Vea el siguiente ejemplo de este error:

User: arn:aws:iam::XXXXXXXX9645:user/KMSDemO is not authorized to perform: kms:Decrypt on resource: arn:aws:kms:us-east-1:XXXXXXXX9645:key/64d3e826-1a87-4cbc-95b8-fb386730a07 with an explicit deny in a service control policy"

Si la entidad de IAM tiene un límite de permisos adjunto, el límite establece los permisos máximos de los que dispone la entidad. Compruebe el límite de permisos de la entidad principal de IAM para asegurarse de que se permite la acción de descifrado de AWS KMS requerida. A continuación, vuelva a intentar la acción. Vea el siguiente ejemplo de este error:

User: arn:aws:iam::XXXXXXXX9645:user/KMSDemO is not authorized to perform: kms:Decrypt on resource: arn:aws:kms:us-east-1:XXXXXXXX9645:key/64d3e826-1a87-4cbc-95b8-fb386730a07 because no permissions boundary allows the kms:Decrypt action"

Si se conecta a AWS KMS mediante un punto de conexión de VPC, compruebe la política de puntos de conexión de VPC aplicada. Asegúrese de que la acción KMS:Decrypt esté permitida en la política. Vea el siguiente ejemplo de este error:

User: arn:aws:iam::XXXXXXXX9645:user/KMSDemO is not authorized to perform: kms:Decrypt on resource: arn:aws:kms:us-east-1:XXXXXXXX9645:key/64d3e826-1a87-4cbc-95b8-fb386730a07 because no VPC endpoint policy allows the kms:Decrypt action"

Información relacionada

Configuración del cifrado en AWS Glue

Políticas de claves en AWS KMS

OFICIAL DE AWS
OFICIAL DE AWSActualizada hace un año