Saltar al contenido

¿Por qué aparece el error «Unable to validate the following destination configurations» cuando uso las notificaciones de eventos de Amazon S3 con buckets de uso general?

6 minutos de lectura
0

Cuando uso las notificaciones de eventos de Amazon Simple Storage Service (Amazon S3) para agregar una configuración de notificaciones, aparece el mensaje de error «Unable to validate the following destination configurations when creating an Amazon S3 Event Notification». Quiero solucionar y resolver este problema.

Resolución

Al agregar o actualizar una configuración de notificación de eventos, Amazon S3 verifica que existan todos los destinos de eventos. Amazon S3 también comprueba que los destinos de los eventos cuentan con políticas basadas en recursos que permiten a Amazon S3 tomar las siguientes medidas:

  • Publicar eventos
  • Enviar mensajes
  • Invocar funciones

Durante una actualización, Amazon S3 realiza las 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 las comprobaciones falla, es posible que aparezca el error «Unable to validate the following destination configurations».

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.

Nota: Las notificaciones de eventos solo se admiten en grupos de uso general. Los buckets de directorio y los de tablas no admiten las notificaciones de eventos. Si necesitas la funcionalidad de notificación de eventos, usa un bucket de uso general.

Ejecuta el runbook de automatización AWSSupport-TroubleshootS3EventNotifications

Como práctica recomendada, usa AWSSupport-TroubleshootS3EventNotifications para solucionar los problemas cuando agregas una configuración de notificación de eventos.

Nota:

  • El runbook solo puede evaluar las configuraciones de notificación de eventos cuando el propietario del bucket también es el propietario de la cuenta de AWS en la que se ejecuta la automatización.
  • El runbook no puede evaluar las políticas sobre los recursos de destino que están alojados en otra cuenta.

Para ejecutar la automatización, sigue estos pasos:

  1. Abre la consola de AWS Systems Manager y, a continuación, abre AWSSupport-TroubleshootS3EventNotifications.
  2. Selecciona Ejecutar automatización.
  3. Introduce los parámetros de entrada.
  4. Selecciona Ejecutar.
  5. Revisa los resultados en la sección Salidas.

El informe final contiene los recursos que están configurados con el bucket de S3 como notificación de eventos de destino. Si sigues teniendo problemas con las notificaciones de eventos de S3, usa la siguiente opción para solucionar los problemas de forma manual.

Eliminación de eventos para destinos que ya no existen

Cuando los destinos de las notificaciones de eventos de S3 ya no existan, tendrás que eliminar las configuraciones de esas notificaciones. Por ejemplo, cuando eliminas un destino como una función de Lambda, la configuración de notificación de eventos que se elimina permanece en tu bucket de uso general. Puedes eliminar las notificaciones de eventos que no estén actualizadas con la consola Amazon S3, la AWS CLI o la API PutBucketNotificationConfiguration. Te recomendamos que utilices la API PutBucketNotificationConfiguration para gestionar todas tus notificaciones de eventos.

Confirmación de que los destinos del evento tengan políticas basadas en recursos válidas

Concede 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 SNS topic policy",
            "Effect": "Allow",
            "Principal": {
                "Service": "s3.amazonaws.com"
            },
            "Action": [
                "SNS:Publish"
            ],
            "Resource": "SNS-topic-ARN",
            "Condition": {
                "ArnLike": {
                    "aws:SourceArn": "arn:aws:s3:*:*:bucket-name"
                },
                "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 agregas un nuevo evento al bucket, asegúrate 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 Amazon SNS o Amazon SQS, consulta 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, consulta Tutorial: Uso de un desencadenador de Amazon S3 para invocar una función de Lambda.

Si utilizas la consola de Amazon S3 para activar las notificaciones de eventos, Amazon S3 intentará actualizar la política antes de que la agregue al evento. Si la política basada en recursos del destino del evento es válida y aparece el mismo error, comprueba todos los destinos de eventos existentes para ver si hay políticas basadas en recursos válidas. Si modificas una 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, se produce un error en la validación. Para evitar el problema, asegúrate de que todos los permisos sean válidos y elimina los eventos con destinos que no sean válidos.

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

Si activas el cifrado de AWS Key Management Service (AWS KMS) para un destino de SQS o SNS, actualiza la política de claves administradas por el cliente para permitir que Amazon S3 utilice la clave.

No se admiten las claves administradas por AWS, como las claves aws/sns y aws/sqs. Si utilizas una clave administrada de AWS en el destino del evento, debes actualizar el destino para usar una clave administrada por el cliente. A continuación, actualiza 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 AWS Identity and Access Management (IAM) para un tema de SNS de destino

Política de IAM para una cola SQS de destino

OFICIAL DE AWSActualizada hace 5 meses