Por que recebo o erro “Não é possível validar as seguintes configurações de destino” quando uso as notificações de eventos do Amazon S3?

6 minuto de leitura
0

Quando uso as notificações de eventos do Amazon Simple Storage Service (Amazon S3) para adicionar uma configuração de notificação, recebo a mensagem de erro “Não é possível validar as seguintes configurações de destino ao criar uma notificação de evento do Amazon S3”. Quero solucionar e resolver esse problema.

Breve descrição

Para evitar problemas de validação nas configurações de destino, execute as seguintes ações:

  • O destino especificado deve ter uma política baseada em recursos que permita ao Amazon S3 publicar notificações no destino.
  • A região da AWS para o destino deve ser a mesma região do bucket do S3.
  • Se você criptografou o destino com uma chave do AWS Key Management Service (AWS KMS), a política de chaves deverá permitir o acesso ao S3.

Quando você atualiza uma configuração de notificação de eventos, o Amazon S3 verifica se todos os destinos do evento existem. O S3 também verifica se os destinos do evento têm as políticas baseadas em recursos que permitem que o S3 execute as seguintes ações com base no tipo de destino do evento:

  • Publicar eventos
  • Enviar mensagens
  • Invocar funções

O 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, você pode receber o erro “Não é possível validar as seguintes configurações de destino”.

Resolução

Execute o runbook de automação AWSSupport-TroubleshootS3EventNotifications

Como prática recomendada, use o AWSSupport-TroubleshootS3EventNotifications para solucionar problemas comuns que ocorrem ao adicionar uma configuração de notificação de eventos.

Observação:

  • o runbook só pode avaliar as configurações de notificação de eventos 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:

  1. Abra o console do AWS Systems Manager e, em seguida, abra o AWSSupport-TroubleshootS3EventNotifications.
  2. Selecione Executar automação.
  3. Insira os parâmetros de entrada.
  4. Selecione Executar.
  5. 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 eventos do Amazon S3, use a seguinte resolução para solucionar os problemas manualmente.

Excluir eventos de destinos que não existem mais

Observação: se você receber erros ao executar comandos da AWS Command Line Interface (AWS CLI), consulte Solucionar erros da AWS CLI. Além disso, verifique se você está usando a versão mais recente da AWS CLI.

Se sua notificação de evento existente enviar eventos para um destino que não existe mais, exclua os eventos antes de atualizar a configuração da notificação de eventos. A notificação pode existir no bucket, mas o destino não existe porque você o excluiu depois de atualizar a configuração da notificação de eventos.

É possível usar o console do Amazon S3, o AWS CLI ou a API PutBucketNotificationConfiguration para excluir todos os eventos de destinos que não existem mais. É uma prática recomendada usar a mesma API PutBucketNotificationConfiguration para todos os eventos.

Confirme se os destinos do evento têm políticas válidas baseadas em recursos

Para publicar mensagens para o 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ópicos 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 filas 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 mais informações sobre permissões de tópicos do Amazon SNS ou filas do Amazon SQS, consulte Como 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: Como usar um gatilho do Amazon S3 para invocar uma função do Lambda.

Se você usar o console do S3 para ativar as Notificações de Eventos, o S3 tentará atualizar a política para você antes que 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 todos os destinos de evento existentes. Se você modificar uma política baseada em recursos para os destinos de evento depois de atualizar a configuração de notificação de eventos 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 chaves do AWS KMS seja válida para tópicos e filas criptografados pelo KMS

Se você ativou a criptografia do AWS KMS para um destino SQS ou SNS, atualize a política de chave gerenciada pelo cliente para permitir que o S3 use a chave.

As chaves gerenciadas pela AWS, tais 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 chaves.

Exemplo de política de chaves 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

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

AWS OFICIAL
AWS OFICIALAtualizada há 2 meses