¿Por qué se produce el error «Unable to validate the following destination configurations» al crear una notificación de eventos de Amazon S3?

5 minutos de lectura
0

Quiero solucionar este error al crear una notificación de eventos de Amazon Simple Storage Service (Amazon S3): «Unable to validate the following destination configurations when creating an Amazon S3 Event Notification».

Breve descripción

Para evitar este error, debe cumplir las siguientes condiciones:

  • Al crear una notificación de eventos de Amazon S3, el destino especificado debe tener una política basada en recursos que permita a S3 publicar notificaciones en el destino.
  • La región de AWS del destino debe ser la misma que la del bucket de S3.
  • Si el destino está cifrado con una clave de AWS Key Management Service (AWS KMS), la política de claves debe permitir el acceso a S3.

Al actualizar una configuración de notificación de eventos, Amazon S3 verifica que existan todos los destinos de eventos. S3 también comprueba que los destinos de eventos cuenten con las políticas basadas en recursos que permiten a S3 realizar las siguientes acciones según el tipo de destino del evento:

  • Publicar eventos
  • Enviar mensajes
  • Invocar funciones

S3 realiza estas comprobaciones en los destinos de eventos nuevos y en todos los destinos de eventos existentes que no se eliminen durante la actualización. Si alguna de estas comprobaciones falla, es posible que aparezca el error «Unable to validate the following destination configurations».

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

Solución

Asegurarse de que existan todos los destinos de eventos

Aparece este error cuando un destino de eventos que está en el bucket no existe.

Si la notificación de eventos existente envía eventos a un destino que ya no existe, elimínelos antes de actualizar la configuración de notificación de eventos. La notificación puede existir en el bucket, pero el destino no existe porque se eliminó después de actualizar la configuración de notificación de eventos.

Se recomienda eliminar todos los eventos con destinos inexistentes mediante la misma API de configuración PutBucketNotificationConfiguration. Puede utilizar la consola de Amazon S3, la AWS CLI o AWS SDK para llamar a la API PutBucketNotificationConfiguration.

Confirmar que los destinos del evento tengan políticas basadas en recursos válidas

Conceda los permisos necesarios a Amazon S3 para que llame a la API correspondiente y publique mensajes en los siguientes servicios de AWS:

  • Un tema de Amazon Simple Notification Service (Amazon SNS)
  • Una cola de Amazon Simple Queue Service (Amazon SQS)
  • Una función de AWS Lambda

Ejemplo de política de destino de temas de Amazon SNS:

{
    "Version": "2012-10-17",
    "Id": "example-ID",
    "Statement": [{
        "Sid": "example-statement-ID",
        "Effect": "Allow",
        "Principal": {
            "Service": "s3.amazonaws.com"
        },
        "Action": [
            "SQS:SendMessage"
        ],
        "Resource": "arn:aws:sqs:Region:account-id:queue-name",
        "Condition": {
            "ArnLike": {
                "aws:SourceArn": "arn:aws:s3:*:*:awsexamplebucket1"
            },
            "StringEquals": {
                "aws:SourceAccount": "bucket-owner-account-id"
            }
        }
    }]
}

Ejemplo de política de destino de colas de Amazon SQS:

{
    "Version": "2012-10-17",
    "Id": "example-ID",
    "Statement": [{
        "Sid": "example-statement-ID",
        "Effect": "Allow",
        "Principal": {
            "Service": "s3.amazonaws.com"
        },
        "Action": [
            "SQS:SendMessage"
        ],
        "Resource": "arn:aws:sqs:Region:account-id:queue-name",
        "Condition": {
            "ArnLike": {
                "aws:SourceArn": "arn:aws:s3:*:*:awsexamplebucket1"
            },
            "StringEquals": {
                "aws:SourceAccount": "bucket-owner-account-id"
            }
        }
    }]
}

Ejemplo de política de destino de funciones de Lambda:

{
    "Version": "2012-10-17",
    "Id": "example-ID",
    "Statement": [

        {
            "Sid": "s3invoke",
            "Effect": "Allow",
            "Principal": {
                "Service": "s3.amazonaws.com"
            },
            "Action": "lambda:InvokeFunction",
            "Resource": "arn:aws:lambda:Region:account-id:function:function-name",
            "Condition": {
                "StringEquals": {
                    "AWS:SourceAccount": "bucket-owner-account-id"
                },
                "ArnLike": {
                    "AWS:SourceArn": "arn:aws:s3:::awsexamplebucket1"
                }
            }
        }
    ]
}

Si va a añadir un nuevo evento al bucket, asegúrese de que el nuevo evento tenga la política válida basada en recursos.

Para obtener más información sobre los permisos relacionados con un tema de Amazon SNS o una cola de Amazon SQS, consulte Conceder permisos para publicar mensajes en un tema de SNS o una cola de SQS.

Para actualizar la función de Lambda con políticas válidas, consulte Tutorial: Uso de un desencadenador de Amazon S3 para invocar una función de Lambda.

Nota: Si utiliza la consola de S3 para activar las notificaciones de eventos, S3 intentará actualizar la política por usted antes de añadirla a un evento.

Si la política basada en recursos del destino del evento es válida y aparece el mismo error, compruebe todos los destinos de eventos existentes para ver si hay políticas basadas en recursos válidas. Si modifica alguna política basada en recursos para los destinos de eventos después de actualizar la configuración de notificación de eventos en el bucket, aparecerá este error. Para evitar el error, asegúrese de que todos los permisos sean válidos y elimine los eventos con destinos que no sean válidos.

Asegurarse de que la política de claves de AWS KMS sea válida para las colas y los temas cifrados con AWS KMS

Si activa el cifrado de AWS KMS para un destino de SQS o SNS, actualice la política de claves administradas por el cliente para permitir que S3 utilice la clave. Para obtener más información, consulte Política de claves de AWS KMS.

No se admiten las claves administradas por AWS, como las claves aws/sns y aws/sqs. Si utiliza una clave administrada de AWS en el destino del evento, debe actualizar el destino para usar una clave administrada por el cliente. A continuación, actualice la política de claves.

Ejemplo de política clave de AWS KMS:

{
    "Version": "2012-10-17",
    "Id": "example-ID",
    "Statement": [{
        "Sid": "example-statement-ID",
        "Effect": "Allow",
        "Principal": {
            "Service": "s3.amazonaws.com"
        },
        "Action": [
            "kms:GenerateDataKey",
            "kms:Decrypt"
        ],
        "Resource": "*"
    }]
}

Información relacionada

Política de IAM para un tema de SNS de destino

Política de IAM para una cola SQS de destino

OFICIAL DE AWS
OFICIAL DE AWSActualizada hace 6 meses