Quando uso as Notificações de evento do Amazon Simple Storage Service (Amazon S3) para adicionar uma configuração de notificação, recebo a mensagem de erro "Unable to validate the following destination configurations when creating an Amazon S3 Event Notification". Quero solucionar esse problema.
Resolução
Quando você adiciona ou atualiza uma configuração de notificação de evento, o Amazon S3 verifica se todos os destinos do evento existem. O Amazon S3 também verifica se os destinos do evento têm as políticas baseadas em recursos que permitem que o Amazon S3 realize as seguintes ações:
- Publicar eventos
- Enviar mensagens
- Invocar funções
O Amazon S3 realiza as verificações em novos destinos de eventos e em todos os destinos de eventos existentes que você não exclui durante a atualização. Quando as verificações falharem, é possível receber a mensagem de erro "Unable to validate the following destination configurations".
Observação: se você receber mensagens de erro ao executar comandos da AWS Command Line Interface (AWS CLI), consulte Solução de problemas da AWS CLI. Além disso, verifique se você está usando a versão mais recente da AWS CLI.
Observação: as notificações de evento são compatíveis somente com buckets de uso geral. Os buckets de diretório e de tabela não oferecem suporte a notificações de evento. Se você precisar da funcionalidade de notificação de evento, use um bucket de uso geral.
Execute o runbook de automação AWSSupport-TroubleshootS3EventNotifications
Como prática recomendada, use o AWSSupport-TroubleshootS3EventNotifications para solucionar problemas quando você adicionar uma configuração de notificação de evento.
Observação:
- o runbook só pode avaliar as configurações de notificação de evento quando o proprietário do bucket é o mesmo proprietário da conta da AWS na qual você executa a automação.
- O runbook não pode avaliar políticas sobre recursos de destino que estão hospedados em outra conta.
Para executar a automação, conclua as seguintes etapas:
- Abra o console do AWS Systems Manager e, em seguida, abra o AWSSupport-TroubleshootS3EventNotifications.
- Selecione Executar automação.
- Insira os parâmetros de entrada.
- Selecione Executar.
- Analise os resultados na seção Saídas.
O relatório final contém os recursos que estão configurados com o bucket do S3 como uma notificação de evento de destino. Se você continuar enfrentando problemas de Notificação de evento do S3, use a seguinte resolução para solucionar os problemas manualmente.
Exclua eventos de destinos que não existem mais
Quando os destinos para suas notificações de evento do S3 não existirem mais, você precisa excluir as configurações dessas notificações. Por exemplo, quando você exclui um destino, como uma função do Lambda, exclua suas configurações de notificação de evento do seu bucket de uso geral. É possível excluir notificações de evento desatualizadas com o console Amazon S3, a AWS CLI ou a API PutBucketNotificationConfiguration. Recomendamos que você use a API PutBucketNotificationConfiguration para gerenciar todas as suas notificações de evento.
Confirme se os destinos do evento têm políticas baseadas em recursos válidas
Para publicar mensagens para os seguintes serviços da AWS, conceda as permissões necessárias ao Amazon S3 para chamar a API relevante:
- Tópico do Amazon Simple Notification Service (Amazon SNS)
- Fila do Amazon Simple Queue Service (Amazon SQS)
- Função do AWS Lambda
Exemplo de política de destino de tópico do 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"
}
}
}
]
}
Exemplo de política de destino de fila do 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"
}
}
}
]
}
Exemplo de política de destino de função do 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 você adicionar um novo evento ao bucket, certifique-se de que o novo evento tenha a política baseada em recursos válida.
Para obter mais informações sobre permissões do Amazon SNS ou do Amazon SQS, consulte Conceder permissões para publicar mensagens em um tópico do SNS ou em uma fila do SQS.
Para atualizar a função do Lambda com políticas válidas, consulte Tutorial: Usar um acionador do Amazon S3 para invocar uma função do Lambda.
Se você usar o console do Amazon S3 para ativar as Notificações de evento, o Amazon S3 tentará atualizar a política para você antes que você adicione a política ao evento. Se a política baseada em recursos do destino do evento for válida e você receber o mesmo erro, verifique se há políticas baseadas em recursos válidas para seus destinos de evento. Se você modificar uma política baseada em recursos para os destinos de evento depois de atualizar a configuração de notificação de evento no bucket, ocorrerá uma falha na validação. Para evitar a falha, certifique-se de que todas as permissões são válidas e exclua eventos com destinos que não sejam válidos.
Certifique-se de que a política de chave do AWS KMS esteja correta para tópicos e filas criptografados pelo KMS
Se você ativou a criptografia do AWS Key Management Service (AWS KMS) para um destino do SQS ou SNS, atualize a política de chave gerenciada pelo cliente para permitir que o Amazon S3 use a chave.
As chaves gerenciadas pela AWS, como aws/sns e aws/sqs, não são compatíveis. Se você usar uma chave gerenciada pela AWS no destino do seu evento, será preciso atualizar o destino para usar uma chave gerenciada pelo cliente. Em seguida, atualize a política de chave.
Exemplo de política de chave do 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": "*"
}
]
}
Informações relacionadas
AWS Identity and Access Management (IAM) policy for a destination SNS topic (Política do AWS Identity and Access Management (AWS IAM) para um tópico do SNS de destino)
Política do IAM para uma fila do SQS de destino