Enviar mensagens do Amazon SNS para uma fila do SQS em uma conta diferente - Amazon Simple Notification Service

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

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 para filas do Amazon SQS). 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 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 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: Definir a política de tópico usando o AWS Management Console

  1. Faça login no console do Amazon SNS.

  2. No painel de navegação, escolha Topics (Tópicos).

  3. Selecione um tópico e escolha Edit (Editar).

  4. Na página Edit MyTopic (Editar MyTopic), expanda a seção Access policy (Política de acesso).

  5. 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 usuário ou a função do IAM também precisará ter sns:subscribe para permitir a assinatura da respectiva fila.

  6. Escolha Save changes (Salvar alterações).

    Um usuário com as credenciais da conta 111122223333 pode assinar MyTopic.

Etapa 2: adicionar uma assinatura de fila do Amazon SQS a um tópico em outra Conta da AWS usando o AWS Management Console

Antes de começar, verifique se você tem os ARNs do tópico e da fila e se concedeu permissão ao tópico para enviar mensagens à fila.

  1. Faça login no console do Amazon SQS.

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

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

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

  5. No menu Specify an Amazon SNS topic available for this queue (Especificar um tópico do Amazon SNS disponível para esta fila), escolha o Amazon SNS topic (Tópico do Amazon SNS) para a fila.

  6. Selecione Enter Amazon SNS topic ARN (Inserir o ARN do tópico do Amazon SNS) e insira o Amazon Resource Name (ARN) (Nome do recurso da Amazon (ARN)) do tópico.

  7. Escolha Save (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

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 Pending Confirmation (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.

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.

Etapa 2: adicionar uma assinatura de fila do Amazon SQS a um tópico em outra Conta da AWS usando o AWS Management Console

Antes de começar, verifique se você tem os ARNs do tópico e da fila e se concedeu permissão ao tópico para enviar mensagens à fila.

  1. Faça login no console do Amazon SNS.

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

  3. Na página Subscriptions (Assinaturas), escolha Create subscription (Criar assinatura).

  4. Na página Create subscription (Criar inscrição), na seção Details (detalhes), faça o seguinte:

    1. Para Topic ARN (ARN de tópico), insira o ARN do tópico.

    2. Em Protocol (Protocolo), escolha Amazon SQS.

    3. Em Endpoint, insira o ARN de uma fila.

    4. Selecione Create subscription.

      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: Como confirmar uma assinatura com o uso do AWS Management Console

  1. Faça login no console do Amazon SQS.

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

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

  4. Na coluna Body (Corpo), faça o seguinte:

    1. Escolha More Details (Mais detalhes).

    2. 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 ConfirmSubscription 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...
    3. 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.

  5. Faça login como o proprietário da assinatura no console do Amazon SNS. O proprietário da assinatura executa a confirmação.

  6. Escolha o tópico pertinente.

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

  8. Clique em Confirm subscription (Confirmar assinatura).

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

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

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

Como faço para forçar uma assinatura a exigir autenticação em solicitações de cancelamento de assinatura?

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.