

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

# Enviar mensagens do Amazon SNS para uma fila do SQS em uma conta diferente
<a name="sns-send-message-to-sqs-cross-account"></a>

Este documento descreve como publicar uma notificação em um tópico do Amazon SNS com uma ou mais inscrições em filas do Amazon SQS em outra conta. Você pode configurar o tópico e as filas da mesma forma que faria se eles estivessem na mesma conta (consulte [Fanout de notificações do Amazon SNS para filas do Amazon SQS para processamento assíncrono](sns-sqs-as-subscriber.md)). A maior diferença é a forma de lidar com a confirmação de inscrição, e isso depende de como você inscreve a fila no tópico.

É prática recomendada seguir as etapas mencionadas na seção [Proprietário da fila cria a assinatura](#SendMessageToSQS.cross.account.queueowner) quando possível, porque a confirmação é automática quando o proprietário da fila cria a inscrição.

**nota**  
Se a fila do Amazon SQS tiver um grande volume de mensagens, recomendamos que o proprietário da fila crie a assinatura.

## Proprietário da fila cria a assinatura
<a name="SendMessageToSQS.cross.account.queueowner"></a>

A conta que criou a fila do Amazon SQS é proprietária da fila. Quando o proprietário da fila cria uma assinatura, ela não requer confirmação. A fila começa a receber notificações do tópico assim que a ação `Subscribe` é concluída. Para permitir que o proprietário da fila assine o tópico do proprietário, este último deve conceder à conta do proprietário da fila permissão para chamar a ação `Subscribe` no tópico.

### Etapa 1: Para definir a política de tópicos usando o Console de gerenciamento da AWS
<a name="sns-tutorial-set-topic-policy"></a>

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

1. No painel de navegação, escolha **Tópicos**.

1. Selecione um tópico e escolha **Editar**.

1. Na *MyTopic* página **Editar**, expanda a seção **Política de acesso**.

1. Insira a seguinte política:

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

   Essa política concede à conta `111122223333` permissão para chamar `sns:Subscribe` em `MyTopic` na conta `123456789012`.

   Um usuário com as credenciais da conta `111122223333` pode assinar `MyTopic`. Essa permissão possibilita que o ID da conta delegue a permissão ao usuário ou à função do IAM. Somente os usuários da conta raiz ou administrador terão permissão para chamar `sns:Subscribe`. O IAM também user/role deve `sns:subscribe` permitir que sua fila se inscreva.

1. Escolha **Salvar alterações**.

   Um usuário com as credenciais da conta `111122223333` pode se inscrever MyTopic.

### Etapa 2: Para adicionar uma assinatura de fila do Amazon SQS a um tópico em outro usando o Conta da AWS Console de gerenciamento da AWS
<a name="sns-tutorial-add-sqs-subscription-to-sns-topic-another-account"></a>

Antes de começar, verifique se você tem o ARNs tópico e a fila e se [deu permissão ao tópico para enviar mensagens para a fila](subscribe-sqs-queue-to-sns-topic.md#SendMessageToSQS.sqs.permissions).

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

1. No painel de navegação, escolha **Queues** (Filas).

1.  Na lista de filas, escolha a **fila** que você deseja assinar em um tópico do Amazon SNS.

1. Escolha **Subscribe to Amazon SNS topic** (Inscrever-se no tópico do Amazon SNS).

1. No menu **Especificar um tópico do Amazon SNS disponível para esta fila**, escolha o **Tópico do Amazon SNS** para a fila.

1. Selecione **Inserir o ARN do tópico do Amazon SNS** e insira o **Nome do recurso da Amazon (ARN)** do tópico.

1. Escolha **Salvar**.
**nota**  
Para poder se comunicar com o serviço, a fila deve ter permissões para o Amazon SNS.
Como você é o proprietário da fila, você não precisa confirmar a assinatura.

## Um usuário que não é proprietário da fila cria uma assinatura
<a name="SendMessageToSQS.cross.account.notqueueowner"></a>

Qualquer usuário que criar uma assinatura, mas não for o proprietário da fila, deverá confirmar a assinatura.

Quando você usa a ação `Subscribe`, o Amazon SNS envia uma confirmação de assinatura para a fila. A assinatura é exibida no console do Amazon SNS, com seu ID de assinatura definido como **Confirmação pendente**.

Para confirmar a inscrição, o usuário com permissão para ler mensagens da fila precisa recuperar o URL de confirmação da inscrição e o proprietário da inscrição precisa confirmá-la usando o URL de confirmação. Até que a inscrição seja confirmada, nenhuma notificação publicada no tópico é enviada para a fila. Para confirmar a assinatura, você pode usar o console do Amazon SQS ou a ação `[ReceiveMessage](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/Query_QueryReceiveMessage.html)`.

**nota**  
Antes de inscrever um endpoint no tópico, certifique-se de que a fila possa receber mensagens do tópico definindo a permissão `sqs:SendMessage` para a fila. Para obter mais informações, consulte [Etapa 2: Conceder permissão ao tópico do Amazon SNS para enviar mensagens à fila do Amazon SQS](subscribe-sqs-queue-to-sns-topic.md#SendMessageToSQS.sqs.permissions).

### Etapa 1: Para adicionar uma assinatura de fila do Amazon SQS a um tópico em outro usando o Conta da AWS Console de gerenciamento da AWS
<a name="sns-tutorial-add-sqs-subscription-to-sns-topic-another-account"></a>

Antes de começar, verifique se você tem o ARNs tópico e a fila e se [deu permissão ao tópico para enviar mensagens para a fila](subscribe-sqs-queue-to-sns-topic.md#SendMessageToSQS.sqs.permissions).

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. Na página **Assinaturas**, escolha **Criar assinatura**.

1.  Na página **Criar assinatura**, na seção **Detalhes**, faça o seguinte:

   1. Para **ARN de tópico**, insira o ARN do tópico.

   1. Em **Protocol** (Protocolo), escolha **Amazon SQS**.

   1. Em **Endpoint**, insira o ARN de uma fila.

   1. Selecione **Criar assinatura**.
**nota**  
Para poder se comunicar com o serviço, a fila deve ter permissões para o Amazon SNS.

Veja a seguir um exemplo de instrução de política que permite ao tópico do Amazon SNS enviar mensagem à fila do Amazon SQS.

```
{
   "Sid": "Stmt1234",
   "Effect": "Allow",
   "Principal": "*",
   "Action": "sqs:SendMessage",
   "Resource": "arn:aws:sqs:us-west-2:111111111111:QueueName",
   "Condition": {
      "ArnEquals": {
         "aws:SourceArn": "arn:aws:sns:us-west-2:555555555555:TopicName"
      }
   }
}
```

### Etapa 2: Para confirmar uma assinatura usando o Console de gerenciamento da AWS
<a name="sns-tutorial-confirm-subscription-console"></a>

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

1. Selecione a fila que tem uma inscrição pendente no tópico.

1. Escolha **Send and receive messages** (Enviar e receber mensagens), depois escolha **Poll for messages** (Pesquisar mensagens).

   Uma mensagem com a confirmação de assinatura é recebida na fila.

1. Na coluna **Corpo**, faça o seguinte:

   1. Escolha **Mais detalhes**.

   1. Na caixa de diálogo **Message Details** (Detalhes da mensagem), localize e anote o valor **SubscribeURL**. Este é seu link de assinatura (exemplo abaixo). Para obter detalhes adicionais sobre a validação de token de API, consulte [https://docs.aws.amazon.com/sns/latest/api/API_ConfirmSubscription.html](https://docs.aws.amazon.com/sns/latest/api/API_ConfirmSubscription.html) na Referência da API do Amazon SNS.

      ```
      https://sns.us-west-2.amazonaws.com/?Action=ConfirmSubscription&TopicArn=arn:aws:sns:us-east-2:123456789012:MyTopic&Token=2336412f37fb...
      ```

   1. Anote o link de confirmação da inscrição. O URL deve ser transmitido do proprietário da fila para o proprietário da assinatura. O proprietário da assinatura precisa inserir o URL no [console do Amazon SNS](https://console.aws.amazon.com/sns/v3/home).

1. Faça login como o **proprietário da assinatura** no [console do Amazon SNS](https://console.aws.amazon.com/sns/v3/home). O proprietário da assinatura executa a confirmação.

1. Escolha o **tópico** pertinente.

1. Escolha a **inscrição** pertinente na tabela de listas de assinatura do tópico. Ela é identificada como “Confirmação pendente”.

1. Clique em **Confirm subscription** (Confirmar assinatura).

1. Uma janela modal é exibida solicitando o link de confirmação da assinatura. **Cole** o link de confirmação da inscrição.

1. Selecione **Confirm subscription** (Confirmar assinatura) na janela modal.

   Uma resposta em XML é exibida, por exemplo:

   ```
   <ConfirmSubscriptionResponse>
      <ConfirmSubscriptionResult>
         <SubscriptionArn>arn:aws:sns:us-east-2:123456789012:MyTopic:1234a567-bc89-012d-3e45-6fg7h890123i</SubscriptionArn>
      </ConfirmSubscriptionResult>
      <ResponseMetadata>
         <RequestId>abcd1efg-23hi-jkl4-m5no-p67q8rstuvw9</RequestId>
      </ResponseMetadata>
   </ConfirmSubscriptionResponse>
   ```

   A fila inscrita está pronta para receber mensagens do tópico.

1. (Opcional) Se você exibir a assinatura do tópico no console do Amazon SNS, poderá ver que a mensagem **Confirmação pendente** foi substituída pelo ARN da assinatura na coluna **ID da assinatura**.

## Como faço para forçar uma assinatura a exigir autenticação em solicitações de cancelamento de assinatura?
<a name="sns-send-message-to-sqs-cross-account-AuthenticateOnUnsubscribe"></a>

O proprietário da assinatura precisa definir o sinalizador `AuthenticateOnUnsubscribe` como true na confirmação de assinatura.
+ `AuthenticateOnUnsubscribe` é definido automaticamente como true quando o proprietário da fila cria a inscrição.
+ `AuthenticateOnUnsubscribe` não pode ser definido como true quando o link de confirmação da assinatura é acessado sem autenticação.