Perché ricevo l'errore "Unable to validate the following destination configurations" quando utilizzo Notifiche degli eventi in Amazon S3?

6 minuti di lettura
0

Quando utilizzo Notifiche degli eventi in Amazon Simple Storage Service (Amazon S3) per aggiungere una configurazione di notifica, ricevo il messaggio di errore "Unable to validate the following destination configurations when creating an Amazon S3 Event Notification". Desidero risolvere il problema.

Breve descrizione

Per evitare problemi di convalida con le configurazioni di destinazione, intraprendi le seguenti azioni:

  • La destinazione specificata deve avere una policy basata sulle risorse che consenta ad Amazon S3 di pubblicare notifiche per la destinazione.
  • La regione AWS della destinazione deve essere la stessa regione del bucket S3.
  • Se hai crittografato la destinazione con una chiave del Servizio AWS di gestione delle chiavi (AWS KMS), la policy della chiave deve consentire l'accesso a S3.

Se aggiorni una configurazione di notifica degli eventi, Amazon S3 verifica che tutte le destinazioni degli eventi esistano. S3 verifica inoltre che le destinazioni degli eventi abbiano le policy basate sulle risorse che consentono a S3 di intraprendere le seguenti azioni in base al tipo di destinazione dell'evento:

  • Pubblicare eventi
  • Inviare messaggi
  • Invocare funzioni

S3 esegue i controlli sulle nuove destinazioni degli eventi e su tutte le destinazioni degli eventi esistenti che non elimini durante l'aggiornamento. Quando i controlli non hanno esito positivo, è possibile che venga visualizzato l'errore "Unable to validate the following destination configurations".

Risoluzione

Esegui il runbook di automazione AWSSupport-TroubleshootS3EventNotifications

Come best practice, utilizza AWSSupport-TroubleshootS3EventNotifications per risolvere i problemi comuni che si verificano quando aggiungi una configurazione di notifica degli eventi.

Nota:

  • il runbook può valutare le configurazioni di notifica degli eventi solo quando il proprietario del bucket è lo stesso proprietario dell'account AWS su cui si esegue l'automazione.
  • Il runbook non è in grado di valutare le policy sulle risorse di destinazione ospitate in un altro account.

Per eseguire l'automazione, completa i seguenti passaggi:

  1. Apri la console AWS Systems Manager, quindi apri AWSSupport-TroubleshootS3EventNotifications.
  2. Scegli Esegui automazione.
  3. Inserisci i parametri di input.
  4. Scegli Esegui.
  5. Rivedi i risultati nella sezione Output.

Il report finale contiene le risorse configurate con il bucket S3 come notifica degli eventi per la destinazione. Se continui a riscontrare problemi di notifica degli eventi in Amazon S3, utilizza la seguente risoluzione per risolvere manualmente i problemi.

Elimina gli eventi per destinazioni che non esistono più

Nota: se ricevi messaggi di errore durante l'esecuzione dei comandi dell'interfaccia della linea di comando AWS (AWS CLI), consulta la sezione Troubleshoot AWS CLI errors. Inoltre, assicurati di utilizzare la versione più recente di AWS CLI.

Se la notifica degli eventi esistente invia eventi a una destinazione che non esiste più, elimina gli eventi prima di aggiornare la configurazione della notifica degli eventi. La notifica potrebbe esistere nel bucket, ma la destinazione non esiste perché l'hai eliminata dopo aver aggiornato la configurazione della notifica degli eventi.

Puoi utilizzare la console Amazon S3, l'interfaccia della linea di comando AWS o l'API PutBucketNotificationConfiguration per eliminare tutti gli eventi per destinazioni che non esistono più. È consigliabile utilizzare la stessa API PutBucketNotificationConfiguration per tutti gli eventi.

Verifica che le destinazioni degli eventi abbiano policy basate sulle risorse valide

Per pubblicare messaggi sui seguenti servizi AWS, concedi ad Amazon S3 le autorizzazioni necessarie per chiamare l'API pertinente:

  • Topic di Amazon Simple Notification Service (Amazon SNS)
  • Coda di Amazon Simple Queue Service (Amazon SQS)
  • Funzione AWS Lambda

Esempio di policy di destinazione dei topic di 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"
                }
            }
        }
    ]
}

Esempio di policy di destinazione delle code di 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"
                }
            }
        }
    ]
}

Esempio di policy di destinazione della funzione 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"
                }
            }
        }
    ]
}

Se aggiungi un nuovo evento al bucket, assicurati che il nuovo evento abbia una policy basata sulle risorse valida.

Per ulteriori informazioni sulle autorizzazioni relative a un topic di Amazon SNS o a una coda di Amazon SQS, consulta Concessione delle autorizzazioni per pubblicare messaggi su un topic SNS o una coda SQS.

Per aggiornare la funzione Lambda con policy valide, consulta Tutorial: uso di un trigger Amazon S3 per richiamare una funzione Lambda.

Se utilizzi la console S3 per attivare le notifiche degli eventi, S3 tenta di aggiornare la policy prima di aggiungerla all'evento. Se la policy basata sulle risorse di destinazione dell'evento è valida e viene visualizzato lo stesso errore, controlla tutte le destinazioni degli eventi esistenti per verificare la presenza di policy basate sulle risorse valide. Se modifichi una policy basata sulle risorse per le destinazioni degli eventi dopo aver aggiornato la configurazione della notifica degli eventi nel bucket, la convalida ha esito negativo. Per evitare il problema, assicurati che tutte le autorizzazioni siano valide ed elimina gli eventi con destinazioni non valide.

Assicurati che la policy della chiave AWS KMS sia corretta per i topic e le code crittografati con AWS KMS

Se hai attivato la crittografia AWS KMS per una destinazione SQS o SNS, aggiorna la policy delle chiavi gestite dal cliente per consentire a S3 di utilizzare la chiave.

Le chiavi gestite da AWS, come aws/sns e aws/sqs, non sono supportate. Se utilizzi una chiave gestita da AWS nella destinazione dell'evento, devi aggiornare la destinazione per utilizzare una chiave gestita dal cliente. Dopodiché aggiorna la policy della chiave.

Esempio di policy della chiave 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": "*"  
        }  
    ]  
}

Informazioni correlate

Policy IAM per un topic SNS di destinazione

Policy IAM per una coda SQS di destinazione

AWS UFFICIALE
AWS UFFICIALEAggiornata 2 mesi fa