Por que recebo o erro “Unable to validate the following destination configurations” quando crio uma Notificação de eventos do Amazon S3?

5 minuto de leitura
0

Quero solucionar o seguinte erro ao criar uma notificação de evento do Amazon Simple Storage Service (Amazon S3): “Unable to validate the following destination configurations when creating an Amazon S3 Event Notification”.

Breve descrição

Para evitar esse erro, é preciso atender às seguintes condições:

  • Quando você cria uma Notificação de eventos do Amazon S3, o destino especificado deve ter uma política baseada em recursos que permita que o S3 publique 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 essas 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 essas verificações falham, você pode receber o erro “Unable to validate the following destination configurations”.

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.

Resolução

Certifique-se de que todos os destinos de evento existam

Você recebe esse erro quando um destino de evento que está no bucket não existe.

Se sua notificação de evento existente enviar eventos para um destino que não existe mais, exclua esses 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.

É uma prática recomendada usar a mesma API PutBucketNotificationConfiguration para excluir todos os eventos com destinos não existentes. Você pode usar o console do Amazon S3, a AWS CLI ou o AWS SDK para chamar a API PutBucketNotificationConfiguration.

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-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 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 obter 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 acionador do Amazon S3 para invocar uma função do Lambda.

Observação: 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 a política seja adicionada 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 em todos os destinos de evento existentes. Se você modificar qualquer política baseada em recursos para os destinos de evento depois de atualizar a configuração de notificação de eventos no bucket, você receberá esse erro. Para evitar o erro, verifique se 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ê ativar a criptografia do AWS KMS para um destino SQS ou SNS, atualize a política de chaves gerenciada pelo cliente para permitir que o S3 use a chave. Para obter mais informações, consulte a Política de chaves do AWS KMS.

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 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 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á 7 meses