New user sign up using AWS Builder ID
New user sign up using AWS Builder ID is currently unavailable on re:Post. To sign up, please use the AWS Management Console instead.
Como faço para corrigir o erro “Não é possível validar as seguintes configurações de destino” no AWS CloudFormation?
Eu me inscrevi em um serviço da AWS e recebi o erro “Não é possível validar as seguintes configurações de destino” no AWS CloudFormation.
Resolução
Para resolver o erro Não é possível validar, execute as ações de solução de problemas para sua configuração.
Observação: se você receber erros ao executar comandos da AWS Command Line Interface (AWS CLI), consulte Solução de erros da AWS CLI. Além disso, verifique se você está usando a versão mais recente da AWS CLI.
Problemas com a configuração de notificação do Lambda
O ARN da função do Lambda não existe ou não é válido
Se o seu bucket do Amazon Simple Storage Service (Amazon S3) usar a propriedade LambdaConfigurations do AWS Lambda, você poderá receber o erro A função do Lambda não existe. Esse erro ocorre se o ARN configurado para a função do Lambda no modelo do CloudFormation não existir ou não for válido.
Para verificar se a função do Lambda existe, execute o comando get-function:
aws lambda get-function --function-name YOUR-FUNCTION-ARN-VALUE
Observação: substitua YOUR-FUNCTION-ARN-VALUE pelo ARN da função.
Se você receber um erro na saída do comando, o ARN da função não é válido ou não existe. Atualize o modelo para incluir o ARN correto. Em seguida, crie uma nova pilha com o modelo atualizado ou atualize a pilha existente.
A função do Lambda não tem permissão para invocar o Amazon S3
Se você receber o erro O recurso que você solicitou não existe, significa que sua função do Lambda não tem a permissão necessária. Para solucionar esse problema, realize as etapas a seguir:
- Para verificar as permissões da função do Lambda, execute o comando get-policy:
Observação: substitua FUNCTION-ARN-VALUE pelo ARN da função e YOUR-REGION pela sua região da AWS.aws lambda get-policy --function-name YOUR-FUNCTION-ARN-VALUE --region YOUR-REGION
- Para permitir que a função do Lambda invoque o Amazon S3, atualize o modelo do CloudFormation para anexar as seguintes permissões:
Observação: Substitua FUNCTION-ARN-VALUE pelo ARN da função e AccountID pela conta da AWS que possui a função. Você pode usar o pseudoparâmetro AWS::AccountId para substituir automaticamente o ID da conta em que o CloudFormation cria a pilha.S3Permission: Type: AWS::Lambda::Permission Properties: FunctionName: YOUR-FUNCTION-ARN-VALUE Action: lambda:InvokeFunction Principal: s3.amazonaws.com SourceAccount: !Ref 'AWS::AccountId'
- Para garantir que o CloudFormation crie o bucket do S3 somente depois que a função do Lambda tiver as permissões necessárias, adicione o atributo DependsOn:
Observação: Substitua FUNCTION-ARN-VALUE pelo ARN da sua função.S3Bucket: Type: AWS::S3::Bucket DependsOn: "S3Permission" Properties: NotificationConfiguration: LambdaConfigurations: - Function: YOUR-FUNCTION-ARN-VALUE Event: "s3:ObjectCreated:Put"
Problemas com a configuração de notificação do Amazon SNS
O ARN do Amazon SNS não existe ou não é válido
Se seu bucket do S3 usar a propriedade TopicConfigurations, você poderá receber o erro Não é possível validar as seguintes configurações de destino. Esse erro ocorre quando o tópico do Amazon Simple Notification Service (Amazon SNS) não existe ou não é válido. O formato e o valor do ARN devem corresponder ao ARN do tópico do SNS.
Para verificar se o ARN do tópico do SNS existe em sua conta, execute o comando list-topics:
aws sns list-topics \ --region YOUR-REGION \ --query "Topics[?TopicArn=='YOUR-TOPIC-ARN-VALUE']"
Observação: substitua YOUR-REGION pela sua região e YOUR-TOPIC-ARN-VALUE pelo ARN do tópico.
Se você não receber nenhum registro na saída do comando, o tópico do SNS não existe ou não é válido. Para resolver esse problema, crie o tópico do SNS. Certifique-se de fornecer um ARN de tópico válido na propriedade TopicConfigurations.
O tópico do SNS não tem uma política de acesso necessária
Para verificar se o tópico do SNS tem a política de acesso necessária, conclua as seguintes etapas:
- Para verificar a política de acesso anexada ao tópico do SNS, execute o comando get-topic-attributes:
Observação: substitua YOUR-TOPIC-ARN-VALUE pelo ARN do seu tópico e YOUR-REGION pela sua região.aws sns get-topic-attributes \ --topic-arn YOUR-TOPIC-ARN-VALUE \ --region YOUR-REGION \ --query 'Attributes.Policy'
- A política de acesso deve permitir que o serviço do Amazon S3 publique no tópico. Se a política não tiver essas permissões, edite a política de acesso do tópico para incluir as seguintes permissões:
Observação: Substitua YOUR-TOPIC-ARN-VALUE pelo ARN do seu tópico.{ "Sid": "S3AccessForNotification", "Effect": "Allow", "Principal": { "Service": "s3.amazonaws.com" }, "Action": "SNS:Publish", "Resource": "YOUR-TOPIC-ARN-VALUE" }
- Verifique se agora você pode criar uma nova pilha ou atualizar a pilha existente.
Problema com a política de chaves do AWS KMS associada ao tópico do SNS
A política do AWS Key Management Service (AWS KMS) deve permitir que o Amazon S3 acesse a chave do AWS KMS. Para visualizar a configuração de criptografia e a política mínima exigida, conclua as seguintes etapas:
Para verificar se o tópico do SNS está criptografado com uma chave do AWS KMS, execute o comando get-topic-attributes:
aws sns get-topic-attributes \ --topic-arn YOUR-TOPIC-ARN-VALUE \ --region YOUR-REGION \ --query "Attributes.KmsMasterKeyId"
Observação: substitua YOUR-TOPIC-ARN-VALUE pelo ARN do seu tópico e YOUR-REGION pela sua região. Se o tópico do SNS estiver criptografado, a saída do comando mostrará o ARN da chave do AWS KMS.
Para verificar a política de chaves do AWS KMS, execute o comando get-key-policy:
aws kms get-key-policy \ --key-id YOUR-KMS-KEY-ARN \ --policy-name default \ --region YOUR-REGION | jq -r '.Policy' | jq .
Observação: substitua YOUR-KMS-KEY-ARN pelo ARN da sua chave do AWS KMS e YOUR-REGION pela sua região. Para melhor legibilidade, é uma prática recomendada usar o comando jq para mostrar o conteúdo da política em formato JSON. Para obter mais informações, consulte ./jq no site da jq.
O exemplo de política a seguir mostra a política de chaves mínima exigida do AWS KMS:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "s3.amazonaws.com" }, "Action": ["kms:GenerateDataKey*", "kms:Decrypt"], "Resource": "YOUR-KMS-KEY-ARN" } ] }
Observação: substitua YOUR-KMS-KEY-ARN pelo ARN da sua chave do AWS KMS.
Se sua política não tiver as permissões necessárias, atualize a política de chaves do AWS KMS.
Problemas com a configuração de notificação do Amazon SQS
O ARN do Amazon SQS não existe ou não é válido
Se seu bucket do S3 usar a propriedade QueueConfigurations, você poderá receber o erro A fila do SQS não existe. Esse erro ocorre quando o ARN do Amazon Simple Queue Service (Amazon SQS) não existe ou não é válido.
Para verificar se a fila do Amazon SQS existe na conta, execute o comando list-queues:
aws sqs list-queues --queue-name-prefix YOUR-SQS-QUEUE-NAME --region YOUR-REGION
Observação: substitua YOUR-SQS-QUEUE-NAME pelo nome da fila do SQS e YOUR-REGION pela sua região.
Se a fila do SQS não existir, crie uma nova fila ou atualize o modelo com uma fila existente:
Resources: SNSTopic: Type: AWS::SNS::Topic SNSTopicPolicy: Type: AWS::SNS::TopicPolicy Properties: PolicyDocument: Id: MyTopicPolicy Version: '2012-10-17' Statement: - Sid: Statement-id Effect: Allow Principal: Service: s3.amazonaws.com Action: "SNS:Publish" Resource: !Ref SNSTopic Condition: ArnLike: aws:SourceArn: !Join - '' - - 'arn:aws:s3:::' - !Ref S3Bucket Topics: - !Ref SNSTopic S3Bucket: Type: AWS::S3::Bucket Properties: AccessControl: BucketOwnerFullControl
A fila do SQS não possui a política de acesso necessária
Para verificar se a fila do SQS possui a política de acesso necessária, você pode usar a AWS CLI ou o console do CloudFormation.
Para usar a AWS CLI para verificar a política de acesso da sua fila, conclua as seguintes etapas:
- Para verificar a política de fila do SQS, execute o comando get-queue-attributes:
Observação: Substitua YOUR-SQS-QUEUE-NAME pelo nome da fila do SQS, YOUR-REGION pela sua região e YOUR-SQS-QUEUE-URL pelo URL da fila. Para melhor legibilidade, é uma prática recomendada usar o comando jq para mostrar o conteúdo da política em formato JSON. Para obter mais informações, consulte ./jq no site da jq.aws sqs get-queue-attributes \ --queue-url YOUR-SQS-QUEUE-URL \ --region YOUR-REGION \ --attribute-names Policy | jq .
- Se sua política não tiver acesso ao Amazon S3, crie uma nova política de acesso em um arquivo JSON:
Observação: Substitua YOUR-SQS-QUEUE-ARN pelo ARN da fila.{"Policy": "{\"Version\":\"2012-10-17\",\"Statement\": [{\"Sid\":\"S3AccessForNotification\",\"Effect\":\"Allow\",\"Principal\": {\"Service\":\"s3.amazonaws.com\"},\"Action\":\"SQS:SendMessage\",\"Resource\":\"YOUR-SQS-QUEUE-ARN\"}]}"}
- Para atualizar a política, execute o comando set-queue-attributes:
Observação: Substitua YOUR-SQS-QUEUE-URL pelo URL da fila e sqs-policy.json pelo arquivo JSON da política.aws sqs set-queue-attributes --queue-url YOUR-SQS-QUEUE-URL --attributes file://sqs-policy.json
Para usar o console do CloudFormation para verificar a política de acesso da sua fila, atualize o modelo do CloudFormation para incluir o seguinte recurso:
SampleSQSPolicy: Type: AWS::SQS::QueuePolicy Properties: Queues: - YOUR-SQS-QUEUE-URL PolicyDocument: Statement: - Action: - "SQS:SendMessage" Effect: "Allow" Resource: YOUR-SQS-QUEUE-ARN Principal: Service: - "s3.amazonaws.com"
Observação: Substitua YOUR-SQS-QUEUE-URL pelo URL da fila e YOUR-SQS-QUEUE-ARN pelo ARN da fila.
Depois de criar ou atualizar a política, verifique se agora você pode criar uma nova pilha ou atualizar a pilha existente.
Para obter mais informações, consulte Quais permissões eu preciso para acessar uma fila do Amazon SQS? Se você ainda encontrar problemas, consulte Como soluciono o erro do Amazon SQS “Valor inválido para a política de parâmetros”?
Problema com a política de chaves do AWS KMS associada à fila do SQS
Para resolver problemas com a política de chaves do AWS KMS, conclua as seguintes etapas:
- Para obter o URL da fila do SQS, execute o comando list-queues:
Observação: substitua YOUR-SQS-QUEUE-NAME pelo nome da fila do SQS e YOUR-REGION pela sua região.aws sqs list-queues --queue-name-prefix YOUR-SQS-QUEUE-NAME --region YOUR-REGION
- Para obter o ID da chave do AWS KMS, execute o comando get-queue-attributes:
Observação: Substitua YOUR-SQS-QUEUE-URL pelo URL da fila e YOUR-REGION pela sua região.aws sqs get-queue-attributes \ --queue-url YOUR-SQS-QUEUE-URL \ --region YOUR-REGION \ --attribute-names KmsMasterKeyId
- Para obter o ARN da chave do AWS KMS, execute o comando describe-key:
Observação: Substitua YOUR-KMS-KEY-ID pelo ID da chave.aws kms describe-key --key-id YOUR-KMS-KEY-ID
- Para ver a política de chaves completa, execute o comando get-key-policy:
Observação: substitua YOUR-KMS-KEY-ARN pelo ARN da sua chave do AWS KMS e YOUR-REGION pela sua região.aws kms get-key-policy \ --key-id YOUR-KMS-KEY-ARN \ --policy-name default \ --region YOUR-REGION
- No resultado, verifique se a política permite que o Amazon S3 use a chave do AWS KMS. Exemplos de permissões:
Observação: substitua YOUR-KMS-KEY-ARN pelo ARN da chave do AWS KMS.{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "s3.amazonaws.com" }, "Action": ["kms:GenerateDataKey*", "kms:Decrypt"], "Resource": "YOUR-KMS-KEY-ARN" } ] }
Se sua política não tiver as permissões necessárias, atualize a política de chaves.
Dependência circular entre recursos
Importante: Antes de inscrever um tópico do SNS nas notificações de eventos do S3, você deve criar o AWS::SNS::TopicPolicy com as permissões necessárias. Essa política de tópico deve existir antes de você criar a assinatura.
Para criar a política do tópico primeiro, você deve usar um atributo DependsOn no recurso AWS::S3::Bucket. Esse atributo cria a política do tópico antes do bucket. Ou você pode usar duas operações de pilha para criar todos os recursos primeiro e depois atualizar o recurso S3Bucket para incluir a propriedade NotificationConfiguration. Execute uma das ações a seguir.
Especificar um valor para BucketName em seu modelo do AWS CloudFormation
Use um nome estático para seu bucket do S3 na propriedade BucketName no recurso S3Bucket do seu modelo do CloudFormation. Um nome estático do bucket do S3 remove a dependência intrínseca entre a política de tópicos do SNS e o Amazon S3.
Importante: Os nomes dos buckets do S3 devem ser globalmente exclusivos.
O exemplo de modelo do CloudFormation a seguir especifica um valor codificado -Bucket-Name- para a propriedade BucketName:
Resources: SNSTopic: Type: AWS::SNS::Topic SNSTopicPolicy: Type: AWS::SNS::TopicPolicy Properties: PolicyDocument: Id: MyTopicPolicy Version: '2012-10-17' Statement: - Sid: Statement-id Effect: Allow Principal: Service: s3.amazonaws.com Action: "SNS:Publish" Resource: !Ref SNSTopic Condition: ArnLike: aws:SourceArn: !Join - '' - - 'arn:aws:s3:::' - '-Bucket-Name-' Topics: - !Ref SNSTopic S3Bucket: Type: AWS::S3::Bucket DependsOn: - SNSTopicPolicy Properties: AccessControl: BucketOwnerFullControl BucketName: "-Bucket-Name-" NotificationConfiguration: TopicConfigurations: - Topic: !Ref SNSTopic Event: s3:ObjectCreated:Put
Observação: substitua -Bucket-Name- pelo nome do seu bucket. O recurso S3Bucket tem um atributo DependsOn explícito definido como SNSTopicPolicy. O atributo especifica que o modelo cria o recurso SNStopicPolicy antes do recurso S3Bucket.
Use um parâmetro para BucketName
Osparâmetros permitem que você use o mesmo modelo do CloudFormation para buckets do S3 com nomes diferentes. Durante a criação da pilha, você pode definir um valor para o parâmetro paramBucketName. Exemplo de política:
Parameters: paramBucketName: Type: String Description: Bucket Name Resources: SNSTopic: Type: AWS::SNS::Topic SNSTopicPolicy: Type: AWS::SNS::TopicPolicy Properties: PolicyDocument: Id: MyTopicPolicy Version: '2012-10-17' Statement: - Sid: Statement-id Effect: Allow Principal: Service: s3.amazonaws.com Action: "SNS:Publish" Resource: !Ref SNSTopic Condition: ArnLike: aws:SourceArn: !Join - '' - - 'arn:aws:s3:::' - !Ref paramBucketName Topics: - !Ref SNSTopic S3Bucket: Type: AWS::S3::Bucket DependsOn: - SNSTopicPolicy Properties: AccessControl: BucketOwnerFullControl BucketName: !Ref paramBucketName NotificationConfiguration: TopicConfigurations: - Topic: !Ref SNSTopic Event: s3:ObjectCreated:Put
Observação: No exemplo anterior, o recurso S3Bucket tem um atributo DependsOn explícito definido como SNSTopicPolicy.
Crie uma pilha e, em seguida, atualize-a
Observação: Nesse método, o recurso S3Bucket não inclui a propriedade BucketName. Como resultado, o CloudFormation cria um nome de bucket exclusivo para você. Para evitar a dependência circular, não use um atributo DependsOn.
Primeiro, crie a pilha sem a propriedade NotificationConfiguration no recurso S3Bucket. Exemplo:
Resources: SNSTopic: Type: AWS::SNS::Topic SNSTopicPolicy: Type: AWS::SNS::TopicPolicy Properties: PolicyDocument: Id: MyTopicPolicy Version: '2012-10-17' Statement: - Sid: Statement-id Effect: Allow Principal: Service: s3.amazonaws.com Action: "SNS:Publish" Resource: !Ref SNSTopic Condition: ArnLike: aws:SourceArn: !Join - '' - - 'arn:aws:s3:::' - !Ref S3Bucket Topics: - !Ref SNSTopic S3Bucket: Type: AWS::S3::Bucket Properties: AccessControl: BucketOwnerFullControl
Adicione a propriedade NotificationConfiguration no recurso S3Bucket e atualize a pilha. Exemplo:
Resources: SNSTopic: Type: AWS::SNS::Topic SNSTopicPolicy: Type: AWS::SNS::TopicPolicy Properties: PolicyDocument: Id: MyTopicPolicy Version: '2012-10-17' Statement: - Sid: Statement-id Effect: Allow Principal: Service: s3.amazonaws.com Action: "SNS:Publish" Resource: !Ref SNSTopic Condition: ArnLike: aws:SourceArn: !Join - '' - - 'arn:aws:s3:::' - !Ref S3Bucket Topics: - !Ref SNSTopic S3Bucket: Type: AWS::S3::Bucket Properties: AccessControl: BucketOwnerFullControl NotificationConfiguration: TopicConfigurations: - Topic: !Ref SNSTopic Event: s3:ObjectCreated:Put
Informações relacionadas
Conceder permissões para publicar mensagens de notificação de eventos em um destino
Gerenciando recursos da AWS como uma única unidade com pilhas do AWS CloudFormation
Vídeos relacionados


Conteúdo relevante
- feita há 20 diaslg...
- feita há um mêslg...
- Resposta aceitafeita há um mêslg...
- feita há um mêslg...
- feita há 2 meseslg...
- AWS OFICIALAtualizada há 4 meses
- AWS OFICIALAtualizada há 3 meses