¿Por qué aparece el error «No se pueden validar las siguientes configuraciones de destino» al crear una notificación de eventos de Amazon S3?

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 «No se pueden validar las siguientes configuraciones de destino al crear una notificación de eventos de Amazon S3». Quiero solucionar y resolver este problema.

Descripción corta

Para evitar problemas de validación con las configuraciones de destino, tome las siguientes medidas:

  • El destino especificado debe tener una política basada en recursos que permita a Amazon 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 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».

Resolución

Ejecute el runbook de automatización AWSSupport-TroubleshootS3EventNotifications

Como práctica recomendada, utilice AWSSupport-TroubleshootS3EventNotifications para solucionar los problemas comunes que se producen al agregar 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 es el mismo que 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, siga estos pasos:

  1. Abra la consola de AWS Systems Manager y, a continuación, abra AWSSupport-TroubleshootS3EventNotifications.
  2. Seleccione Ejecutar automatización.
  3. Introduzca los parámetros de entrada.
  4. Seleccione Ejecutar.
  5. Revise 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 sigue teniendo problemas con las notificaciones de eventos de Amazon S3, utilice la siguiente solución para solucionar los problemas de forma manual.

Eliminación de eventos para destinos que ya no existen

Nota: Si se muestran 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 de la AWS CLI.

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.

Puede usar la consola de Amazon S3, la AWS CLI o la API PutBucketNotificationConfiguration para eliminar todos los eventos de los destinos que ya no existen. Se recomienda utilizar la misma API PutBucketNotificationConfiguration para todos los eventos. 

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 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 agrega 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.

Si utiliza la consola de S3 para activar las notificaciones de eventos, 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, compruebe todos los destinos de eventos existentes para ver si hay políticas basadas en recursos válidas. Si modifica 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úrese de que todos los permisos sean válidos y elimine 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 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. 

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 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 AWS
OFICIAL DE AWSActualizada hace 3 meses