

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

# Fanout de notificações do Amazon SNS para endpoints HTTPS
<a name="sns-http-https-endpoint-as-subscriber"></a>

Use o Amazon SNS para enviar mensagens de notificação a um ou mais endpoints HTTP ou HTTPS. Quando você inscrever um endpoint em um tópico, será possível publicar uma notificação no tópico, e o Amazon SNS envia uma solicitação HTTP POST entregando o conteúdo da notificação para o endpoint inscrito. Ao inscrever o endpoint, você seleciona se o Amazon SNS usa HTTP ou HTTPS para enviar a solicitação POST ao endpoint. Se você usar HTTPS, poderá aproveitar o suporte do Amazon SNS para o seguinte: 
+ **Server Name Indication (SNI)**: permite que o Amazon SNS ofereça suporte a endpoints HTTPS que exigem SNI, como um servidor que exige vários certificados para hospedar vários domínios. Para obter mais informações sobre SNI, consulte [Server Name Indication](http://en.wikipedia.org/wiki/Server_Name_Indication).
+ **Autenticação de acesso Basic e Digest**: permite que você especifique um nome de usuário e uma senha no URL HTTPS para a solicitação HTTP POST, como `https://user:password@domain.com` ou `https://user@domain.com`. O nome do usuário e a senha são criptografados pela conexão SSL estabelecida ao usar HTTPS. Somente o nome de domínio é enviado em texto sem formatação. Para obter mais informações sobre autenticação e controle de acesso Basic e Digest, consulte a [RFC-2617](http://www.rfc-editor.org/info/rfc2617).
**Importante**  
No momento, o Amazon SNS não é compatível com endpoints HTTP(S) privados.  
HTTPS só podem ser URLs recuperados da ação de API do Amazon `GetSubscriptionAttributes` SNS, para entidades às quais você concedeu acesso à API.
**nota**  
 O serviço de cliente deve poder oferecer suporte à resposta de cabeçalho `HTTP/1.1 401 Unauthorized`

A solicitação contém o assunto e a mensagem que foram publicados no tópico juntamente com os metadados sobre a notificação em um documento JSON. A solicitação será semelhante à seguinte solicitação POST HTTP. Para obter detalhes sobre o cabeçalho HTTP e o formato JSON do corpo de solicitação, consulte [Cabeçalhos HTTP/HTTPS](http-header.md) e [Formato JSON de notificação HTTP/HTTPS](http-notification-json.md).

**nota**  
O Amazon SNS considera todos os erros 5XX e 429 (muitas solicitações enviadas) como passíveis de repetição. Esses erros estão sujeitos à política de entrega. Todos os outros erros são considerados falhas permanentes e não serão feitas novas tentativas.

```
POST / HTTP/1.1
    x-amz-sns-message-type: Notification
    x-amz-sns-message-id: da41e39f-ea4d-435a-b922-c6aae3915ebe
    x-amz-sns-topic-arn: arn:aws:sns:us-west-2:123456789012:MyTopic
    x-amz-sns-subscription-arn: arn:aws:sns:us-west-2:123456789012:MyTopic:2bcfbf39-05c3-41de-beaa-fcfcc21c8f55
    Content-Length: 761
    Content-Type: text/plain; charset=UTF-8
    Host: ec2-50-17-44-49.compute-1.amazonaws.com
    Connection: Keep-Alive
    User-Agent: Amazon Simple Notification Service Agent
    
{
  "Type" : "Notification",
  "MessageId" : "da41e39f-ea4d-435a-b922-c6aae3915ebe",
  "TopicArn" : "arn:aws:sns:us-west-2:123456789012:MyTopic",
  "Subject" : "test",
  "Message" : "test message",
  "Timestamp" : "2012-04-25T21:49:25.719Z",
  "SignatureVersion" : "1",
  "Signature" : "EXAMPLElDMXvB8r9R83tGoNn0ecwd5UjllzsvSvbItzfaMpN2nk5HVSw7XnOn/49IkxDKz8YrlH2qJXj2iZB0Zo2O71c4qQk1fMUDi3LGpij7RCW7AW9vYYsSqIKRnFS94ilu7NFhUzLiieYr4BKHpdTmdD6c0esKEYBpabxDSc=",
  "SigningCertURL" : "https://sns.us-west-2.amazonaws.com/SimpleNotificationService-f3ecfb7224c7233fe7bb5f59f96de52f.pem",
   "UnsubscribeURL" : "https://sns.us-west-2.amazonaws.com/?Action=Unsubscribe&SubscriptionArn=arn:aws:sns:us-west-2:123456789012:MyTopic:2bcfbf39-05c3-41de-beaa-fcfcc21c8f55"
}
```

# Inscrever um endpoint HTTPS em um tópico do Amazon SNS
<a name="sns-subscribe-https-s-endpoints-to-topic"></a>

Este tópico explica como inscrever HTTP/S endpoints em tópicos do Amazon SNS.

**Topics**
+ [Etapa 1: Verificar se o endpoint está pronto para processar mensagens do Amazon SNS](SendMessageToHttp.prepare.md)
+ [Etapa 2: Inscrever o HTTP/HTTPS endpoint no tópico do Amazon SNS](SendMessageToHttp.subscribe.md)
+ [Etapa 3: confirmar sua assinatura do Amazon SNS](SendMessageToHttp.confirm.md)
+ [Etapa 4: opcional - definir a política de entrega para a assinatura do Amazon SNS.](SendMessageToHttp.retry.md)
+ [Etapa 5: opcional - conceder aos usuários permissões para publicar no tópico do Amazon SNS](SendMessageToHttp.iam.permissions.md)
+ [Etapa 6: Enviar mensagens do Amazon SNS para o endpoint HTTP/HTTPS](SendMessageToHttp.publish.md)

# Etapa 1: Verificar se o endpoint está pronto para processar mensagens do Amazon SNS
<a name="SendMessageToHttp.prepare"></a>

Antes de inscrever um endpoint HTTP ou HTTPS em um tópico, você deve garantir que ele tem a capacidade de lidar com as solicitações HTTP POST que o Amazon SNS usa para enviar a confirmação de inscrição e as mensagens de notificação. Geralmente, isso significa a criação e a implantação de uma aplicação web (por exemplo, um servlet Java se o host do endpoint está executando Linux com Apache e Tomcat) que processa solicitações HTTP do Amazon SNS. Quando você inscreve um endpoint HTTP, o Amazon SNS envia uma solicitação de confirmação de inscrição. Seu endpoint deve estar preparado para receber e processar essa solicitação quando você criar a assinatura, porque o Amazon SNS envia essa solicitação nesse momento. O Amazon SNS não enviará notificações ao endpoint até que a assinatura seja confirmada. Assim que você confirmar a inscrição, o Amazon SNS enviará notificações para o endpoint quando uma ação de publicação for realizada no tópico inscrito.

**Para configurar o endpoint para processar as mensagens de notificação e de confirmação de inscrição**

1. Seu código deve conter os cabeçalhos HTTP de solicitações HTTP POST que o Amazon SNS envia para seu endpoint. O código deve procurar o campo do cabeçalho `x-amz-sns-message-type`, que mostra o tipo de mensagem que o Amazon SNS enviou a você. Ao visualizar o cabeçalho, você pode determinar o tipo da mensagem sem a necessidade de analisar o corpo da solicitação HTTP. Há dois tipos com os quais você precisa lidar: `SubscriptionConfirmation` e `Notification`. A mensagem `UnsubscribeConfirmation` é usada somente quando a assinatura é excluída do tópico.

   Para obter detalhes sobre o cabeçalho HTTP, consulte [Cabeçalhos HTTP/HTTPS](http-header.md). A seguinte solicitação HTTP POST é um exemplo de uma mensagem de confirmação de inscrição.

   ```
   POST / HTTP/1.1
       x-amz-sns-message-type: SubscriptionConfirmation
       x-amz-sns-message-id: 165545c9-2a5c-472c-8df2-7ff2be2b3b1b
       x-amz-sns-topic-arn: arn:aws:sns:us-west-2:123456789012:MyTopic
       Content-Length: 1336
       Content-Type: text/plain; charset=UTF-8
       Host: example.com
       Connection: Keep-Alive
       User-Agent: Amazon Simple Notification Service Agent
       
   {
     "Type" : "SubscriptionConfirmation",
     "MessageId" : "165545c9-2a5c-472c-8df2-7ff2be2b3b1b",
     "Token" : "2336412f37f...",
     "TopicArn" : "arn:aws:sns:us-west-2:123456789012:MyTopic",
     "Message" : "You have chosen to subscribe to the topic arn:aws:sns:us-west-2:123456789012:MyTopic.\nTo confirm the subscription, visit the SubscribeURL included in this message.",
     "SubscribeURL" : "https://sns.us-west-2.amazonaws.com/?Action=ConfirmSubscription&TopicArn=arn:aws:sns:us-west-2:123456789012:MyTopic&Token=2336412f37...",
     "Timestamp" : "2012-04-26T20:45:04.751Z",
     "SignatureVersion" : "1",
     "Signature" : "EXAMPLEpH+...",
     "SigningCertURL" : "https://sns.us-west-2.amazonaws.com/SimpleNotificationService-f3ecfb7224c7233fe7bb5f59f96de52f.pem"
   }
   ```

1. Seu código deve analisar o documento JSON no corpo da solicitação HTTP POST e no tipo de conteúdo text/plain para ler os pares de nome e valor que compõem a mensagem do Amazon SNS. Use um analisador JSON que faça a conversão da representação em sequência de escape dos caracteres de controle de volta para seus valores de caracteres ASCII (por exemplo, converter \$1n para um caractere de nova linha). Você pode usar um analisador JSON existente, como o [ProcessadorJackson JSON](https://github.com/FasterXML/jackson) ou escrever seu próprio analisador. Para enviar o texto nos campos de assunto e mensagem em formato JSON válido, o Amazon SNS deve converter alguns caracteres de controle para representações em sequência de escape para inclusão no documento JSON. Ao receber o documento JSON no corpo da solicitação POST enviada para o endpoint, você deve converter os caracteres em sequência de escape de volta para seus valores de caractere originais se quiser uma representação exata do assunto e das mensagens originais publicadas no tópico. Isso é essencial se você deseja verificar a assinatura de uma notificação, pois a assinatura usa a mensagem e o assunto em seus formulários originais como parte da string para assinar.

1. Seu código deve verificar a autenticidade de uma mensagem de notificação, confirmação de inscrição ou confirmação de cancelamento de inscrição enviada pelo Amazon SNS. o usar informações contidas na mensagem do Amazon SNS, o endpoint pode recriar a assinatura para que você possa verificar o conteúdo da mensagem comparando sua assinatura com a assinatura enviada pelo Amazon SNS junto com a mensagem. Para obter mais informações sobre como verificar a assinatura de uma mensagem, consulte [Verificação das assinaturas de mensagens do Amazon SNS](sns-verify-signature-of-message.md).

1. Com base no tipo especificado pelo campo de cabeçalho `x-amz-sns-message-type`, seu código deve ler o documento JSON contido no corpo da solicitação HTTP e processar a mensagem. A seguir, são apresentadas as diretrizes para lidar com os dois tipos principais de mensagens:  
**SubscriptionConfirmation**  
Leia o valor para `SubscribeURL` e acesse o URL. Para confirmar a assinatura e começar a receber notificações no endpoint, é necessário visitar o URL`SubscribeURL` (por exemplo, enviando uma solicitação HTTP GET para o URL). Consulte o exemplo de solicitação HTTP na etapa anterior para ver qual a aparência de `SubscribeURL`. Para obter mais informações sobre o formato da mensagem `SubscriptionConfirmation`, consulte [Formato JSON de confirmação de assinatura HTTP/HTTPS](http-subscription-confirmation-json.md). Ao acessar o URL, você receberá de volta uma resposta que se parece com o seguinte documento XML. O documento retorna o ARN da inscrição para o endpoint no elemento `ConfirmSubscriptionResult`.  

   ```
   <ConfirmSubscriptionResponse xmlns="http://sns.amazonaws.com/doc/2010-03-31/">
      <ConfirmSubscriptionResult>
         <SubscriptionArn>arn:aws:sns:us-west-2:123456789012:MyTopic:2bcfbf39-05c3-41de-beaa-fcfcc21c8f55</SubscriptionArn>
      </ConfirmSubscriptionResult>
      <ResponseMetadata>
         <RequestId>075ecce8-8dac-11e1-bf80-f781d96e9307</RequestId>
      </ResponseMetadata>
   </ConfirmSubscriptionResponse>
   ```
Como alternativa à visita ao`SubscribeURL`, você pode confirmar a assinatura usando a [ConfirmSubscription](https://docs.aws.amazon.com/sns/latest/api/API_ConfirmSubscription.html)ação com o valor correspondente `Token` definido na `SubscriptionConfirmation` mensagem. Se você deseja permitir que somente o proprietário do tópico e o proprietário da inscrição cancelem o recebimento para o endpoint, chame a ação `ConfirmSubscription` com uma assinatura AWS .  
**Notificação**  
Leia os valores de `Subject` e `Message` para obter as informações da notificação que foi publicada no tópico.  
Para obter mais detalhes sobre o formato da mensagem `Notification`, consulte [Cabeçalhos HTTP/HTTPS](http-header.md). A seguinte solicitação HTTP POST é um exemplo de uma mensagem de notificação enviada para o endpoint example.com.  

   ```
   POST / HTTP/1.1
       x-amz-sns-message-type: Notification
       x-amz-sns-message-id: 22b80b92-fdea-4c2c-8f9d-bdfb0c7bf324
       x-amz-sns-topic-arn: arn:aws:sns:us-west-2:123456789012:MyTopic
       x-amz-sns-subscription-arn: arn:aws:sns:us-west-2:123456789012:MyTopic:c9135db0-26c4-47ec-8998-413945fb5a96
       Content-Length: 773
       Content-Type: text/plain; charset=UTF-8
       Host: example.com
       Connection: Keep-Alive
       User-Agent: Amazon Simple Notification Service Agent
       
   {
     "Type" : "Notification",
     "MessageId" : "22b80b92-fdea-4c2c-8f9d-bdfb0c7bf324",
     "TopicArn" : "arn:aws:sns:us-west-2:123456789012:MyTopic",
     "Subject" : "My First Message",
     "Message" : "Hello world!",
     "Timestamp" : "2012-05-02T00:54:06.655Z",
     "SignatureVersion" : "1",
     "Signature" : "EXAMPLEw6JRN...",
     "SigningCertURL" : "https://sns.us-west-2.amazonaws.com/SimpleNotificationService-f3ecfb7224c7233fe7bb5f59f96de52f.pem",
     "UnsubscribeURL" : "https://sns.us-west-2.amazonaws.com/?Action=Unsubscribe&SubscriptionArn=arn:aws:sns:us-west-2:123456789012:MyTopic:c9135db0-26c4-47ec-8998-413945fb5a96"
   }
   ```

1. Certifique-se de que o endpoint responde à mensagem de HTTP POST do Amazon SNS com o código de status apropriado. A conexão atingirá o tempo limite em aproximadamente 15 segundos. Se o endpoint não responder antes da conexão atingir o tempo limite ou retornar um código de status fora do intervalo de 200–4*xx*, o Amazon SNS considerará que houve falha na entrega da mensagem.

1. Certifique-se de que o seu código pode lidar com novas tentativas de entrega de mensagens do Amazon SNS. Se o Amazon SNS não receber uma resposta bem-sucedida do endpoint, ele tenta entregar a mensagem novamente. Isso se aplica a todas as mensagens, incluindo a mensagem de confirmação de inscrição. Por padrão, se a entrega inicial da mensagem falhar, o Amazon SNS faz até três novas tentativas com uma espera de 20 segundos entre as tentativas malsucedidas.
**nota**  
A solicitação da mensagem atinge o tempo limite de aproximadamente 15 segundos. Isso significa que se a falha na entrega da mensagem for causada por exceder o tempo limite, o Amazon SNS tentará outra vez por aproximadamente 35 segundos após a última tentativa de entrega. Você pode definir uma política de entrega diferente para o endpoint.

   O Amazon SNS usa o campo de cabeçalho `x-amz-sns-message-id` para identificar de forma exclusiva cada mensagem publicada em um tópico do Amazon SNS. Ao comparar as IDs mensagens que você processou com as mensagens recebidas, você pode determinar se a mensagem é uma tentativa de nova tentativa.

1. Se estiver inscrevendo um endpoint HTTPS, verifique se o endpoint tem um certificado do servidor de uma autoridade de certificado (CA) confiável. O Amazon SNS só envia mensagens a endpoints HTTPS que têm um certificado de servidor assinado por uma CA confiável para o Amazon SNS.

1. Implante o código que você criou para receber mensagens do Amazon SNS. Quando você assinar o endpoint, ele deve estar pronto para receber pelo menos a mensagem de confirmação de inscrição.

# Etapa 2: Inscrever o HTTP/HTTPS endpoint no tópico do Amazon SNS
<a name="SendMessageToHttp.subscribe"></a>

Para enviar mensagens a um endpoint HTTP ou HTTPS por meio de um tópico, inscreva o endpoint no tópico do Amazon SNS. Você especifica o endpoint usando seu URL. Para inscrever-se em um tópico, você pode usar o console do Amazon SNS, o comando [sns-subscribe](https://docs.aws.amazon.com/cli/latest/reference/sns/subscribe.html) ou a ação da API [Subscribe](https://docs.aws.amazon.com/sns/latest/api/API_Subscribe.html). Antes de começar, verifique se você tem o URL do endpoint que deseja inscrever e se o endpoint está preparado para receber a confirmação e as mensagens de notificação, como descrito na Etapa 1.

**Para inscrever um endpoint HTTP ou HTTPS em um tópico usando o console do Amazon SNS**

1. Faça login no [console do Amazon SNS](https://console.aws.amazon.com/sns/home).

1. No painel de navegação, escolha **Subscriptions (Assinaturas)**.

1. Selecione **Create subscription** (Criar assinatura).

1. Na lista suspensa **Protocolo**, selecione **HTTP** ou **HTTPS**.

1. Na caixa **Endpoint**, cole a URL do endpoint para o qual você deseja que o tópico envie mensagens e escolha **Create subscription (Criar inscrição)**.

1. A mensagem de confirmação é exibida. Escolha **Fechar**.

   O **ID de assinatura da sua nova assinatura** é exibido PendingConfirmation. Quando você confirmar a inscrição, o **ID da inscrição** exibirá o ID da inscrição.

# Etapa 3: confirmar sua assinatura do Amazon SNS
<a name="SendMessageToHttp.confirm"></a>

Para confirmar uma assinatura no Amazon SNS, siga estas etapas para garantir que o endpoint possa receber mensagens com sucesso. Esse processo envolve configurar o endpoint para lidar com as mensagens de confirmação recebidas, recuperar o URL de confirmação necessário e confirmar a assinatura. Você pode confirmar a assinatura automática ou manualmente, dependendo da sua configuração.

1. Depois da assinatura ao tópico do Amazon SNS, o Amazon SNS enviará uma mensagem de confirmação a esse endpoint. Essa mensagem contém um `SubscribeURL`, que você deve usar para confirmar a assinatura.

1. O endpoint deve estar configurado para ouvir as mensagens recebidas do Amazon SNS. Quando a mensagem de confirmação chegar, extraia o **`SubscribeURL`** da mensagem.

1. Com o `SubscribeURL` em mãos, você poderá confirmar a assinatura de uma das maneiras a seguir:
   + **Confirmação automática**: o endpoint pode confirmar automaticamente a assinatura enviando uma **solicitação HTTP GET** para o `SubscribeURL`.

     Este método não requer intervenção manual.
   + **Confirmação manual**: se a confirmação automática não estiver configurada, **copie** o **`SubscribeURL`** da mensagem de confirmação e **cole** na barra de endereço do seu navegador.

     Isso confirmará a assinatura manualmente.

1. Você também pode verificar o **status da assinatura** usando o console do Amazon SNS.

   1. Faça login no [console do Amazon SNS](https://console.aws.amazon.com/sns/home).

   1. No painel de navegação, escolha **Assinaturas**.

   1. Encontre sua **assinatura** na lista.
      + Se confirmada, o `SubscriptionArn` será exibido.
      + Se ainda não estiver confirmada, será exibida como `PendingConfirmation`.

# Etapa 4: opcional - definir a política de entrega para a assinatura do Amazon SNS.
<a name="SendMessageToHttp.retry"></a>

Por padrão, se a entrega inicial da mensagem falhar, o Amazon SNS faz até três novas tentativas com uma espera de 20 segundos entre as tentativas malsucedidas. Conforme foi dito na [Etapa 1](SendMessageToHttp.prepare.md), o endpoint deve ter o código que pode processar novas tentativas de mensagens. Ao definir a política de entrega em um tópico ou inscrição, você pode controlar a frequência e o intervalo com que o Amazon SNS tentará entregar novamente mensagens com falha. Você também pode especificar o tipo de conteúdo para suas HTTP/S notificações em`DeliveryPolicy`. Para obter mais informações, consulte [Criação de uma política HTTP/S de entrega](sns-message-delivery-retries.md#creating-delivery-policy).

# Etapa 5: opcional - conceder aos usuários permissões para publicar no tópico do Amazon SNS
<a name="SendMessageToHttp.iam.permissions"></a>

Por padrão, o proprietário do tópico tem permissão para publicar no tópico. Para permitir que outros usuários ou aplicativos publiquem no tópico, você deve usar AWS Identity and Access Management (IAM) para dar permissão de publicação ao tópico. Para obter mais informações sobre como conceder permissões para ações do Amazon SNS a usuários do IAM, consulte [Usar políticas baseadas em identidade com o Amazon SNS](sns-using-identity-based-policies.md).

Há duas maneiras de controlar o acesso a um tópico:
+ Adicione uma política para um usuário ou grupo do IAM. A maneira mais simples de conceder aos usuários permissões para tópicos é criar um grupo e adicionar a política adequada e os usuários ao grupo. É muito mais fácil adicionar e remover usuários de um grupo do que controlar as políticas definidas para usuários individualmente.
+ Adicione uma política ao tópico. Se deseja conceder permissões para um tópico para outra AWS , a única maneira de fazer isso é adicionando uma política com a Conta da AWS para a qual você deseja conceder permissões como principal.

Você deve usar o primeiro método para a maioria dos casos (aplicar políticas a grupos e gerenciar permissões para usuários adicionando ou removendo os usuários adequados aos grupos). Se você precisa conceder permissões a um usuário em outra conta, use o segundo método.

Se você adicionasse a política a seguir a um usuário ou grupo do IAM, concederia permissão a esse usuário ou membros desse grupo para realizar a `sns:Publish` ação no tópico MyTopic.

```
{
  "Statement":[{
    "Sid":"AllowPublishToMyTopic",
    "Effect":"Allow",
    "Action":"sns:Publish",
    "Resource":"arn:aws:sns:us-east-2:123456789012:MyTopic"
  }]
}
```

O exemplo a seguir de política mostra como conceder permissão à outra conta para um tópico.

**nota**  
Ao conceder outro Conta da AWS acesso a um recurso em sua conta, você também concede aos usuários do IAM que têm acesso em nível de administrador (acesso curinga) permissões a esse recurso. Todos os outros usuários do IAM na outra conta têm automaticamente o acesso negado a seus recursos. Se você quiser dar a usuários específicos do IAM esse Conta da AWS acesso ao seu recurso, a conta ou um usuário do IAM com acesso em nível de administrador deve delegar permissões para o recurso a esses usuários do IAM. Para obter mais informações sobre a delegação entre contas, consulte [Habilitar acesso entre contas](https://docs.aws.amazon.com/IAM/latest/UserGuide/Delegation.html) no *Guia de uso do IAM*.

Se você adicionasse a política a seguir a um tópico MyTopic na conta 123456789012, concederia permissão à conta 111122223333 para realizar a ação nesse tópico. `sns:Publish`

```
{
  "Statement":[{
    "Sid":"Allow-publish-to-topic",
    "Effect":"Allow",
      "Principal":{
        "AWS":"111122223333"
      },
    "Action":"sns:Publish",
    "Resource":"arn:aws:sns:us-east-2:123456789012:MyTopic"
  }]
}
```

# Etapa 6: Enviar mensagens do Amazon SNS para o endpoint HTTP/HTTPS
<a name="SendMessageToHttp.publish"></a>

É possível enviar uma mensagem para inscrições em um tópico publicando no tópico. Para publicar um tópico, use o console do Amazon SNS, o comando `[sns-publish](https://docs.aws.amazon.com/cli/latest/reference/sns/publish.html)` da CLI ou a API `[Publish](https://docs.aws.amazon.com/sns/latest/api/API_Publish.html)`.

Se seguiu a [Etapa 1](SendMessageToHttp.prepare.md), o código que você implantou no endpoint deve processar a notificação.

**Para publicar um tópico usando o console do Amazon SNS**

1. Usando as credenciais do usuário Conta da AWS ou do IAM com permissão para publicar no tópico, faça login no Console de gerenciamento da AWS e abra o console do Amazon SNS em. [https://console.aws.amazon.com/sns/](https://console.aws.amazon.com/sns/home)

1. No painel de navegação, escolha **Topics (Tópicos)** e selecione um tópico.

1. Escolha o botão **Publicar mensagem**.

1. Na caixa **Subject (Assunto)**, insira um assunto (por exemplo, **Testing publish to my endpoint**).

1. Na caixa **Message (Mensagem)**, insira texto (por exemplo, **Hello world\$1**) e escolha **Publish message (Publicar mensagem)**.

    Será exibida a seguinte mensagem: Your message has been successfully published.

# Verificação das assinaturas de mensagens do Amazon SNS
<a name="sns-verify-signature-of-message"></a>

O Amazon SNS usa assinaturas de mensagens para confirmar a autenticidade das mensagens enviadas ao seu endpoint HTTP. Para garantir a integridade da mensagem e evitar falsificações, você **deve** verificar a assinatura antes de processar qualquer mensagem do Amazon SNS.

**Quando você deve verificar as assinaturas do Amazon SNS?**

Você deve verificar as assinaturas de mensagens do Amazon SNS nos seguintes cenários:
+ Quando o Amazon SNS envia uma mensagem de notificação ao seu endpoint HTTP (S).
+ Quando o Amazon SNS envia uma mensagem de confirmação para seu endpoint após uma chamada de API [https://docs.aws.amazon.com/sns/latest/api/API_Subscribe.html](https://docs.aws.amazon.com/sns/latest/api/API_Subscribe.html) ou [https://docs.aws.amazon.com/sns/latest/api/API_Unsubscribe.html](https://docs.aws.amazon.com/sns/latest/api/API_Unsubscribe.html).

**O Amazon SNS é compatível com duas versões de assinatura:**
+ SignatureVersion1 — Usa um SHA1 hash da mensagem.
+ SignatureVersion2 — Usa um SHA256 hash da mensagem. Isso fornece uma segurança mais forte e é a opção recomendada.

**Para verificar corretamente as assinaturas de mensagens do SNS, siga estas práticas recomendadas:**
+ Sempre recupere o certificado de assinatura usando HTTPS para evitar ataques de interceptação não autorizados.
+ Verifique se o certificado foi emitido pelo Amazon SNS.
+ Confirme se a cadeia de confiança do certificado é válida.
+ O certificado deve vir de um URL assinado pelo SNS.
+ Não confie em nenhum certificado fornecido na mensagem sem validação.
+ Rejeite qualquer mensagem com um `TopicArn` inesperado para evitar falsificação.
+ O AWS SDKs for Amazon SNS fornece lógica de validação integrada, reduzindo o risco de implementação incorreta.

# Como configurar a versão de assinatura de mensagens nos tópicos do Amazon SNS
<a name="sns-verify-signature-of-message-configure-message-signature"></a>

Configurar a versão de assinatura de mensagens nos tópicos do Amazon SNS permite que você aprimore a segurança e a compatibilidade do seu processo de verificação de mensagens.

Selecione entre `SignatureVersion` **1** (SHA1) e `SignatureVersion` **2** (SHA256) para controlar o algoritmo de hash usado para assinar mensagens. Os tópicos do Amazon SNS têm como padrão `SignatureVersion`**1**. Você pode definir essa configuração usando a ação de API [https://docs.aws.amazon.com/sns/latest/api/API_SetTopicAttributes.html](https://docs.aws.amazon.com/sns/latest/api/API_SetTopicAttributes.html).

Use o exemplo de código a seguir para definir o atributo do tópico `SignatureVersion` usando a AWS CLI:

```
aws sns set-topic-attributes \
    --topic-arn arn:aws:sns:us-east-2:123456789012:MyTopic \
    --attribute-name SignatureVersion \
    --attribute-value 2
```

# Verificação da assinatura de uma mensagem do Amazon SNS usando solicitações baseadas em consulta HTTP
<a name="sns-verify-signature-of-message-verify-message-signature"></a>

Verificação da assinatura de uma mensagem do Amazon SNS usando solicitações baseadas em consulta HTTP garante a autenticidade e integridade da mensagem. Esse processo confirma que a mensagem é originária do Amazon SNS e não foi adulterada durante o trânsito. Ao analisar a mensagem, criar a string correta para assinar e validar a assinatura em relação a uma chave pública confiável, você protege seu sistema contra falsificações e alterações não autorizadas de mensagens.

1. Extraia os **pares chave/valor** do documento JSON no corpo da solicitação HTTP POST enviada pelo Amazon SNS. Esses campos são obrigatórios para criar a **string a ser assinada**.
   + `Message`
   + `Subject` (se presente)
   + `MessageId`
   + `Timestamp`
   + `TopicArn`
   + `Type`

   Por exemplo:

   ```
   MESSAGE_FILE="message.json"
   FIELDS=("Message" "MessageId" "Subject" "Timestamp" "TopicArn" "Type")
   ```
**nota**  
Se algum campo contiver caracteres de escape (por exemplo, `\n`), converta-os para o **formato original** para garantir uma correspondência exata.

1. Localize o campo `SigningCertURL` na mensagem do Amazon SNS. Esse certificado contém a chave pública necessária para verificar a assinatura da mensagem. Por exemplo:

   ```
   SIGNING_CERT_URL=$(jq -r '.SigningCertURL' "$MESSAGE_FILE")
   ```

1. Certifique-se de que `SigningCertURL` seja de um AWS domínio confiável (por exemplo,https://sns.us-east-1.amazonaws.com). Rejeite qualquer ** AWS domínio URLs externo** por motivos de segurança.

1. Baixe o **certificado X.509** do URL fornecido. Por exemplo:

   ```
   curl -s "$SIGNING_CERT_URL" -o signing_cert.pem
   ```

1. Extraia a **chave pública** do certificado X.509 baixado. A chave pública permite descriptografar a assinatura da mensagem e verificar sua integridade. Por exemplo:

   ```
   openssl x509 -pubkey -noout -in signing_cert.pem > public_key.pem
   ```

1. Tipos de mensagem diferentes exigem pares de chave/valor diferentes na string a ser assinada. Identifique o **tipo de mensagem** (campo `Type` da mensagem do Amazon SNS) para determinar quais **pares de chave/valor** incluir:
   + **Mensagem de notificação**: inclui `Message`, `MessageId`, `Subject` (se presente), `Timestamp`, `TopicArn` e `Type`.
   + **SubscriptionConfirmation**ou **UnsubscribeConfirmation mensagem** — Inclui `Message``MessageId`,`SubscribeURL`, `Timestamp``Token`,`TopicArn`,, `Type` e.

1. O Amazon SNS exige que a string seja assinada para seguir uma ordem de campo fixa e rígida para verificação. **Somente os campos explicitamente obrigatórios devem ser incluídos**. Nenhum outro campo pode ser adicionado. Campos opcionais, como `Subject`, devem ser incluídos somente se estiverem presentes na mensagem e devem aparecer na posição exata definida pela ordem dos campos obrigatórios. Por exemplo:

   ```
   KeyNameOne\nValueOne\nKeyNameTwo\nValueTwo
   ```
**Importante**  
Não adicione um caractere de nova linha no final da mensagem.

1. Organize os **pares de chave/valor** em ordem de classificação por bytes (alfabética pelo nome da chave).

1. Crie a **string a ser assinada** usando o seguinte exemplo de formato:

   ```
   STRING_TO_SIGN=""
   for FIELD in "${FIELDS[@]}"; do
       VALUE=$(jq -r --arg field "$FIELD" '.[$field]' "$MESSAGE_FILE")
       STRING_TO_SIGN+="$FIELD\n$VALUE"
       # Append a newline after each field except the last one
       if [[ "$FIELD" != "Type" ]]; then
           STRING_TO_SIGN+="\n"
       fi
   done
   ```

   **Exemplo de mensagem de notificação:**

   ```
   Message
   My Test Message
   MessageId
   4d4dc071-ddbf-465d-bba8-08f81c89da64
   Subject
   My subject
   Timestamp
   2019-01-31T04:37:04.321Z
   TopicArn
   arn:aws:sns:us-east-2:123456789012:s4-MySNSTopic-1G1WEFCOXTC0P
   Type
   Notification
   ```

   **SubscriptionConfirmation exemplo:**

   ```
   Message
   Please confirm your subscription
   MessageId
   3d891288-136d-417f-bc05-901c108273ee
   SubscribeURL
   https://sns.us-east-2.amazonaws.com/...
   Timestamp
   2024-01-01T00:00:00.000Z
   Token
   abc123...
   TopicArn
   arn:aws:sns:us-east-2:123456789012:MyTopic
   Type
   SubscriptionConfirmation
   ```

1. O campo `Signature` na mensagem é codificado em Base64. Você precisa **decodificá-lo** para comparar sua **forma binária bruta** com o **hash derivado**. Por exemplo:

   ```
   SIGNATURE=$(jq -r '.Signature' "$MESSAGE_FILE")
   echo "$SIGNATURE" | base64 -d > signature.bin
   ```

1. Use o campo `SignatureVersion` para selecionar o algoritmo de hash:
   + Para `SignatureVersion` **1**, use **SHA1**(por exemplo,`-sha1`).
   + Para `SignatureVersion` **2**, use **SHA256**(por exemplo,`-sha256`).

1. Para confirmar a autenticidade da mensagem do Amazon SNS, gere um **hash** da string criada e verifique a assinatura usando a **chave pública**.

   ```
   openssl dgst -sha256 -verify public_key.pem -signature signature.bin <<< "$STRING_TO_SIGN"
   ```

   Se a assinatura for válida, o resultado será `Verified OK`. Caso contrário, o resultado será `Verification Failure`.

## Exemplo de script com tratamento de erros
<a name="sns-verify-signature-of-message-example"></a>

O seguinte script de exemplo automatiza o processo de verificação:

```
#!/bin/bash

# Path to the local message file
MESSAGE_FILE="message.json"

# Extract the SigningCertURL and Signature from the message
SIGNING_CERT_URL=$(jq -r '.SigningCertURL' "$MESSAGE_FILE")
SIGNATURE=$(jq -r '.Signature' "$MESSAGE_FILE")

# Fetch the X.509 certificate
curl -s "$SIGNING_CERT_URL" -o signing_cert.pem

# Extract the public key from the certificate
openssl x509 -pubkey -noout -in signing_cert.pem > public_key.pem

# Define the fields to include in the string to sign
FIELDS=("Message" "MessageId" "Subject" "Timestamp" "TopicArn" "Type")

# Initialize the string to sign
STRING_TO_SIGN=""

# Iterate over the fields to construct the string to sign
for FIELD in "${FIELDS[@]}"; do
    VALUE=$(jq -r --arg field "$FIELD" '.[$field]' "$MESSAGE_FILE")
    STRING_TO_SIGN+="$FIELD\n$VALUE"
    # Append a newline after each field except the last one
    if [[ "$FIELD" != "Type" ]]; then
        STRING_TO_SIGN+="\n"
    fi
done

# Verify the signature
echo -e "$STRING_TO_SIGN" | openssl dgst -sha256 -verify public_key.pem -signature <(echo "$SIGNATURE" | base64 -d)
```

# Analisar formatos de mensagem do Amazon SNS
<a name="sns-message-and-json-formats"></a>

Quando o Amazon SNS envia mensagens para HTTP/HTTPS endpoints, eles contêm cabeçalhos HTTP e um corpo de mensagem JSON. Essas mensagens seguem um formato estruturado que inclui metadados, como tipo de mensagem, ARN do tópico, carimbos de data/hora e assinaturas digitais. Ao analisar corretamente as mensagens do Amazon SNS, você pode determinar se uma mensagem é uma confirmação de assinatura, notificação ou confirmação de cancelamento de assinatura, extrair dados relevantes e verificar a autenticidade usando a validação de assinatura.

# Cabeçalhos HTTP/HTTPS
<a name="http-header"></a>

Quando o Amazon SNS envia uma mensagem de confirmação, notificação ou confirmação de cancelamento de assinatura para HTTP/HTTPS endpoints, ele envia uma mensagem POST com vários valores de cabeçalho específicos do Amazon SNS. É possível usar valores de cabeçalho para tarefas como identificar o tipo de mensagem sem precisar analisar o corpo da mensagem JSON para ler o valor `Type`. Por padrão, o Amazon SNS envia todas as notificações para endpoints HTTP/S com `Content-Type` definido como `text/plain; charset=UTF-8`. Para escolher uma opção `Content-Type` diferente de text/plain (padrão), consulte `headerContentType` em[Criação de uma política HTTP/S de entrega](sns-message-delivery-retries.md#creating-delivery-policy).

**`x-amz-sns-message-type`**  
O tipo de mensagem. Os valores possíveis são `SubscriptionConfirmation`, `Notification` e `UnsubscribeConfirmation`.

**`x-amz-sns-message-id`**  
Um Identificador universalmente exclusivo (UUID), exclusivo para cada mensagem publicada. Para uma notificação que o Amazon SNS reenvia durante uma nova tentativa, o ID da mensagem original é usado.

**`x-amz-sns-topic-arn`**  
O Nome de recurso da Amazon (ARN) para o tópico em que essa mensagem foi publicada.

**`x-amz-sns-subscription-arn`**  
O ARN para a inscrição desse endpoint.

O cabeçalho HTTP POST a seguir é um exemplo de um cabeçalho para uma mensagem de `Notification` para um endpoint HTTP.

```
POST / HTTP/1.1
x-amz-sns-message-type: Notification
x-amz-sns-message-id: 165545c9-2a5c-472c-8df2-7ff2be2b3b1b
x-amz-sns-topic-arn: arn:aws:sns:us-west-2:123456789012:MyTopic
x-amz-sns-subscription-arn: arn:aws:sns:us-west-2:123456789012:MyTopic:2bcfbf39-05c3-41de-beaa-fcfcc21c8f55
Content-Length: 1336
Content-Type: text/plain; charset=UTF-8
Host: myhost.example.com
Connection: Keep-Alive
User-Agent: Amazon Simple Notification Service Agent
```

# Formato JSON de confirmação de assinatura HTTP/HTTPS
<a name="http-subscription-confirmation-json"></a>

Depois de assinar um HTTP/HTTPS endpoint, o Amazon SNS envia uma mensagem de confirmação da assinatura para HTTP/HTTPS o endpoint. Essa mensagem contém um valor `SubscribeURL` que você deve consultar para confirmar a assinatura (como alternativa, é possível usar o valor `Token` com o [https://docs.aws.amazon.com/sns/latest/api/API_ConfirmSubscription.html](https://docs.aws.amazon.com/sns/latest/api/API_ConfirmSubscription.html)). 

**nota**  
O Amazon SNS não enviará notificações para esse endpoint enquanto a inscrição não for confirmada.

A mensagem de confirmação da inscrição é uma mensagem POST com um corpo de mensagem que contém um documento JSON com os pares de nome/valor a seguir.

**`Type`**  
O tipo de mensagem. Para uma confirmação da inscrição, o tipo é `SubscriptionConfirmation`.

**`MessageId`**  
Um Identificador universalmente exclusivo (UUID), exclusivo para cada mensagem publicada. Para uma mensagem que o Amazon SNS reenvia durante uma nova tentativa, o ID da mensagem original é usado.

**`Token`**  
Um valor que pode ser usado com a ação [https://docs.aws.amazon.com/sns/latest/api/API_ConfirmSubscription.html](https://docs.aws.amazon.com/sns/latest/api/API_ConfirmSubscription.html) para confirmar a assinatura. Como alternativa, você pode simplesmente acessar o `SubscribeURL`.

**`TopicArn`**  
O Nome de recurso da Amazon (ARN) para o tópico em que este endpoint está inscrito.

**`Message`**  
Uma string que descreve a mensagem. Para confirmação da inscrição, esta string é semelhante a:  

```
You have chosen to subscribe to the topic arn:aws:sns:us-east-2:123456789012:MyTopic.\nTo confirm the subscription, visit the SubscribeURL included in this message.
```

**`SubscribeURL`**  
O URL que você deve acessar para confirmar a inscrição. Como alternativa, é possível usar o `Token` com a ação [https://docs.aws.amazon.com/sns/latest/api/API_ConfirmSubscription.html](https://docs.aws.amazon.com/sns/latest/api/API_ConfirmSubscription.html) para confirmar a assinatura.

**`Timestamp`**  
A hora (GMT) quando a confirmação da inscrição foi enviada.

**`SignatureVersion`**  
Versão da assinatura do Amazon SNS usada.  
+ Se `SignatureVersion` for **1**, `Signature` será uma assinatura `SHA1withRSA` codificada em Base64 dos valores `Message`, `MessageId`, `Type`, `Timestamp` e `TopicArn`. 
+ Se `SignatureVersion` for **2**, `Signature` será uma assinatura `SHA256withRSA` codificada em Base64 dos valores `Message`, `MessageId`, `Type`, `Timestamp` e `TopicArn`.

**`Signature`**  
Assinatura `SHA1withRSA` ou `SHA256withRSA` codificada em Base64 dos valores `Message`, `MessageId`, `Type`, `Timestamp` e `TopicArn`.

**`SigningCertURL`**  
O URL do certificado que foi usado para assinar a mensagem.

A mensagem HTTP POST a seguir é um exemplo de uma mensagem de `SubscriptionConfirmation` para um endpoint HTTP.

```
POST / HTTP/1.1
x-amz-sns-message-type: SubscriptionConfirmation
x-amz-sns-message-id: 165545c9-2a5c-472c-8df2-7ff2be2b3b1b
x-amz-sns-topic-arn: arn:aws:sns:us-west-2:123456789012:MyTopic
Content-Length: 1336
Content-Type: text/plain; charset=UTF-8
Host: myhost.example.com
Connection: Keep-Alive
User-Agent: Amazon Simple Notification Service Agent

{
  "Type" : "SubscriptionConfirmation",
  "MessageId" : "165545c9-2a5c-472c-8df2-7ff2be2b3b1b",
  "Token" : "2336412f37...",
  "TopicArn" : "arn:aws:sns:us-west-2:123456789012:MyTopic",
  "Message" : "You have chosen to subscribe to the topic arn:aws:sns:us-west-2:123456789012:MyTopic.\nTo confirm the subscription, visit the SubscribeURL included in this message.",
  "SubscribeURL" : "https://sns.us-west-2.amazonaws.com/?Action=ConfirmSubscription&TopicArn=arn:aws:sns:us-west-2:123456789012:MyTopic&Token=2336412f37...",
  "Timestamp" : "2012-04-26T20:45:04.751Z",
  "SignatureVersion" : "1",
  "Signature" : "EXAMPLEpH+DcEwjAPg8O9mY8dReBSwksfg2S7WKQcikcNKWLQjwu6A4VbeS0QHVCkhRS7fUQvi2egU3N858fiTDN6bkkOxYDVrY0Ad8L10Hs3zH81mtnPk5uvvolIC1CXGu43obcgFxeL3khZl8IKvO61GWB6jI9b5+gLPoBc1Q=",
  "SigningCertURL" : "https://sns.us-west-2.amazonaws.com/SimpleNotificationService-f3ecfb7224c7233fe7bb5f59f96de52f.pem"
}
```

# Formato JSON de notificação HTTP/HTTPS
<a name="http-notification-json"></a>

Quando o Amazon SNS envia uma notificação para um endpoint HTTP ou HTTPS inscrito, a mensagem POST enviada para o endpoint tem um corpo da mensagem que contém um documento JSON com os seguintes pares de nome-valor.

**`Type`**  
O tipo de mensagem. Para uma notificação, o tipo é `Notification`.

**`MessageId`**  
Um Identificador universalmente exclusivo (UUID), exclusivo para cada mensagem publicada. Para uma notificação que o Amazon SNS reenvia durante uma nova tentativa, o ID da mensagem original é usado.

**`TopicArn`**  
O Nome de recurso da Amazon (ARN) para o tópico em que essa mensagem foi publicada.

**`Subject`**  
O parâmetro `Subject` especificado quando a notificação foi publicada no tópico.  
Esse parâmetro é opcional. Se nenhum `Subject` foi especificado, esse par de nome/valor não é exibido nesse documento JSON.

**`Message`**  
O valor `Message` especificado quando a notificação foi publicada no tópico.

**`Timestamp`**  
A hora (GMT) quando a notificação foi publicada.

**`SignatureVersion`**  
Versão da assinatura do Amazon SNS usada.  
+ Se `SignatureVersion` for **1**, `Signature` será uma assinatura `SHA1withRSA` codificada em Base64 dos valores `Message`, `MessageId`, `Subject` (se presente), `Type`, `Timestamp` e `TopicArn`.
+ Se `SignatureVersion` for **2**, `Signature` será uma assinatura `SHA256withRSA` codificada em Base64 dos valores `Message`, `MessageId`, `Subject` (se presente), `Type`, `Timestamp` e `TopicArn`.

**`Signature`**  
Assinatura `SHA1withRSA` ou `SHA256withRSA` codificada em Base64 dos valores `Message`, `MessageId`, `Subject` (se presente), `Type`, `Timestamp` e `TopicArn`.

**`SigningCertURL`**  
O URL do certificado que foi usado para assinar a mensagem.

**`UnsubscribeURL`**  
Um URL que você pode usar para cancelar a inscrição do endpoint com base neste tópico. Se você acessar este URL, o Amazon SNS cancela a inscrição do endpoint e interrompe o envio de notificações para esse endpoint.

A mensagem HTTP POST a seguir é um exemplo de uma mensagem de `Notification` para um endpoint HTTP.

```
POST / HTTP/1.1
x-amz-sns-message-type: Notification
x-amz-sns-message-id: 22b80b92-fdea-4c2c-8f9d-bdfb0c7bf324
x-amz-sns-topic-arn: arn:aws:sns:us-west-2:123456789012:MyTopic
x-amz-sns-subscription-arn: arn:aws:sns:us-west-2:123456789012:MyTopic:c9135db0-26c4-47ec-8998-413945fb5a96
Content-Length: 773
Content-Type: text/plain; charset=UTF-8
Host: myhost.example.com
Connection: Keep-Alive
User-Agent: Amazon Simple Notification Service Agent

{
  "Type" : "Notification",
  "MessageId" : "22b80b92-fdea-4c2c-8f9d-bdfb0c7bf324",
  "TopicArn" : "arn:aws:sns:us-west-2:123456789012:MyTopic",
  "Subject" : "My First Message",
  "Message" : "Hello world!",
  "Timestamp" : "2012-05-02T00:54:06.655Z",
  "SignatureVersion" : "1",
  "Signature" : "EXAMPLEw6JRN...",
  "SigningCertURL" : "https://sns.us-west-2.amazonaws.com/SimpleNotificationService-f3ecfb7224c7233fe7bb5f59f96de52f.pem",
  "UnsubscribeURL" : "https://sns.us-west-2.amazonaws.com/?Action=Unsubscribe&SubscriptionArn=arn:aws:sns:us-west-2:123456789012:MyTopic:c9135db0-26c4-47ec-8998-413945fb5a96"
  }
```

# Formato JSON de confirmação de cancelamento de assinatura HTTP/HTTPS
<a name="http-unsubscribe-confirmation-json"></a>

Depois que um HTTP/HTTPS endpoint é desinscrito em um tópico, o Amazon SNS envia uma mensagem de confirmação de cancelamento de assinatura para o endpoint.

A mensagem de confirmação do cancelamento da inscrição é uma mensagem POST com um corpo de mensagem que contém um documento JSON com os pares de nome/valor a seguir.

**`Type`**  
O tipo de mensagem. Para uma confirmação de cancelamento de inscrição, o tipo é `UnsubscribeConfirmation`.

**`MessageId`**  
Um Identificador universalmente exclusivo (UUID), exclusivo para cada mensagem publicada. Para uma mensagem que o Amazon SNS reenvia durante uma nova tentativa, o ID da mensagem original é usado.

**`Token`**  
Um valor que pode ser usado com a ação [https://docs.aws.amazon.com/sns/latest/api/API_ConfirmSubscription.html](https://docs.aws.amazon.com/sns/latest/api/API_ConfirmSubscription.html) para confirmar novamente a assinatura. Como alternativa, você pode simplesmente acessar o `SubscribeURL`.

**`TopicArn`**  
O Nome de recurso da Amazon (ARN) para o tópico do qual esse endpoint teve sua inscrição cancelada.

**`Message`**  
Uma string que descreve a mensagem. Para a confirmação de cancelamento de inscrição, esta string é semelhante a:  

```
You have chosen to deactivate subscription arn:aws:sns:us-east-2:123456789012:MyTopic:2bcfbf39-05c3-41de-beaa-fcfcc21c8f55.\nTo cancel this operation and restore the subscription, visit the SubscribeURL included in this message.
```

**`SubscribeURL`**  
O URL que você deve acessar para confirmar novamente a inscrição. Como alternativa, é possível usar o `Token` com a ação [https://docs.aws.amazon.com/sns/latest/api/API_ConfirmSubscription.html](https://docs.aws.amazon.com/sns/latest/api/API_ConfirmSubscription.html) para confirmar novamente a assinatura.

**`Timestamp`**  
A hora (GMT) quando a confirmação de cancelamento da inscrição foi enviada.

**`SignatureVersion`**  
Versão da assinatura do Amazon SNS usada.  
+ Se `SignatureVersion` for **1**, `Signature` será uma assinatura `SHA1withRSA` codificada em Base64 dos valores `Message`, `MessageId`, `Type`, `Timestamp` e `TopicArn`.
+ Se `SignatureVersion` for **2**, `Signature` será uma assinatura `SHA256withRSA` codificada em Base64 dos valores `Message`, `MessageId`, `Type`, `Timestamp` e `TopicArn`.

**`Signature`**  
Assinatura `SHA1withRSA` ou `SHA256withRSA` codificada em Base64 dos valores `Message`, `MessageId`, `Type`, `Timestamp` e `TopicArn`.

**`SigningCertURL`**  
O URL do certificado que foi usado para assinar a mensagem.

A mensagem HTTP POST a seguir é um exemplo de uma mensagem de `UnsubscribeConfirmation` para um endpoint HTTP.

```
POST / HTTP/1.1
x-amz-sns-message-type: UnsubscribeConfirmation
x-amz-sns-message-id: 47138184-6831-46b8-8f7c-afc488602d7d
x-amz-sns-topic-arn: arn:aws:sns:us-west-2:123456789012:MyTopic
x-amz-sns-subscription-arn: arn:aws:sns:us-west-2:123456789012:MyTopic:2bcfbf39-05c3-41de-beaa-fcfcc21c8f55
Content-Length: 1399
Content-Type: text/plain; charset=UTF-8
Host: myhost.example.com
Connection: Keep-Alive
User-Agent: Amazon Simple Notification Service Agent

{
  "Type" : "UnsubscribeConfirmation",
  "MessageId" : "47138184-6831-46b8-8f7c-afc488602d7d",
  "Token" : "2336412f37...",
  "TopicArn" : "arn:aws:sns:us-west-2:123456789012:MyTopic",
  "Message" : "You have chosen to deactivate subscription arn:aws:sns:us-west-2:123456789012:MyTopic:2bcfbf39-05c3-41de-beaa-fcfcc21c8f55.\nTo cancel this operation and restore the subscription, visit the SubscribeURL included in this message.",
  "SubscribeURL" : "https://sns.us-west-2.amazonaws.com/?Action=ConfirmSubscription&TopicArn=arn:aws:sns:us-west-2:123456789012:MyTopic&Token=2336412f37fb6...",
  "Timestamp" : "2012-04-26T20:06:41.581Z",
  "SignatureVersion" : "1",
  "Signature" : "EXAMPLEHXgJm...",
  "SigningCertURL" : "https://sns.us-west-2.amazonaws.com/SimpleNotificationService-f3ecfb7224c7233fe7bb5f59f96de52f.pem"
}
```

# SetSubscriptionAttributes formato JSON da política de entrega
<a name="set-sub-attributes-delivery-policy-json"></a>

Se você envia uma solicitação para a ação `SetSubscriptionAttributes` e define o parâmetro `AttributeName` para um valor de `DeliveryPolicy`, o valor do parâmetro `AttributeValue` deve ser um objeto JSON válido. Por exemplo, o exemplo a seguir define a política de entrega para um total de cinco novas tentativas.

```
http://sns.us-east-2.amazonaws.com/
?Action=SetSubscriptionAttributes
&SubscriptionArn=arn%3Aaws%3Asns%3Aus-east-2%3A123456789012%3AMy-Topic%3A80289ba6-0fd4-4079-afb4-ce8c8260f0ca
&AttributeName=DeliveryPolicy
&AttributeValue={"healthyRetryPolicy":{"numRetries":5}}
...
```

Use o formato JSON a seguir para o valor do parâmetro `AttributeValue`.

```
{
    "healthyRetryPolicy" : {
        "minDelayTarget" :  int,
        "maxDelayTarget" : int,
        "numRetries" : int,
        "numMaxDelayRetries" : int,
        "backoffFunction" : "linear|arithmetic|geometric|exponential"
    },
    "throttlePolicy" : {
        "maxReceivesPerSecond" : int
    },
    "requestPolicy" : {
        "headerContentType" : "text/plain | application/json | application/xml"
    }
}
```

Para obter mais informações sobre a `SetSubscriptionAttribute` ação, acesse a *Referência [SetSubscriptionAttributes](https://docs.aws.amazon.com/sns/latest/api/API_SetSubscriptionAttributes.html)de API do Amazon Simple Notification Service*. Para obter mais informações sobre os cabeçalhos do tipo de conteúdo HTTP compatíveis, consulte [Criação de uma política HTTP/S de entrega](sns-message-delivery-retries.md#creating-delivery-policy).

# SetTopicAttributes formato JSON da política de entrega
<a name="set-topic-attributes-delivery-policy-json"></a>

Se você envia uma solicitação para a ação `SetTopicAttributes` e define o parâmetro `AttributeName` para um valor de `DeliveryPolicy`, o valor do parâmetro `AttributeValue` deve ser um objeto JSON válido. Por exemplo, o exemplo a seguir define a política de entrega para um total de cinco novas tentativas.

```
http://sns.us-east-2.amazonaws.com/
?Action=SetTopicAttributes
&TopicArn=arn%3Aaws%3Asns%3Aus-east-2%3A123456789012%3AMy-Topic
&AttributeName=DeliveryPolicy
&AttributeValue={"http":{"defaultHealthyRetryPolicy":{"numRetries":5}}}
...
```

Use o formato JSON a seguir para o valor do parâmetro `AttributeValue`.

```
{
    "http" : {
        "defaultHealthyRetryPolicy" : {
            "minDelayTarget":  int,
            "maxDelayTarget": int,
            "numRetries": int,
            "numMaxDelayRetries": int,
            "backoffFunction": "linear|arithmetic|geometric|exponential"
        },
        "disableSubscriptionOverrides" : Boolean,
        "defaultThrottlePolicy" : {
            "maxReceivesPerSecond" : int
        },
        "defaultRequestPolicy" : {
            "headerContentType" : "text/plain | application/json | application/xml"
        }
    }
}
```

Para obter mais informações sobre a `SetTopicAttribute` ação, acesse a *Referência [SetTopicAttributes](https://docs.aws.amazon.com/sns/latest/api/API_SetTopicAttributes.html)de API do Amazon Simple Notification Service*. Para obter mais informações sobre os cabeçalhos do tipo de conteúdo HTTP compatíveis, consulte [Criação de uma política HTTP/S de entrega](sns-message-delivery-retries.md#creating-delivery-policy).