Enviando SNS mensagens da Amazon para uma SQS fila da Amazon 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á.

Enviando SNS mensagens da Amazon para uma SQS fila da Amazon em uma conta diferente

Este documento descreve como publicar uma notificação para um SNS tópico da Amazon com uma ou mais assinaturas de SQS filas da Amazon em outra conta. Você pode configurar o tópico e as filas da mesma forma que faria se eles estivessem na mesma conta (consulte Envie SNS notificações da Amazon para SQS filas da Amazon para processamento assíncrono). 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 SQS fila da Amazon 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 SQS fila da Amazon é a 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 SNSconsole da Amazon.

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

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

  4. Na edição MyTopicpágina, expanda a seção 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 permite que o ID da conta delegue permissão ao IAM usuário/função. Somente os usuários da conta raiz ou administrador terão permissão para chamar sns:Subscribe. O IAM usuário/função também deve sns:subscribe permitir que sua fila se inscreva.

  6. Escolha Salvar alterações.

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

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

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.

  1. Faça login no SQSconsole da Amazon.

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

  3. Na lista de filas, escolha a fila para assinar o tópico da AmazonSNS.

  4. Escolha o SNStópico Inscrever-se na Amazon.

  5. No menu Especificar um SNS tópico da Amazon disponível para esta fila, escolha o SNStópico da Amazon para sua fila.

  6. Escolha Inserir SNS tópico da Amazon ARN e, em seguida, insira o nome de recurso da Amazon do tópico (ARN).

  7. Escolha Salvar.

    nota
    • Para poder se comunicar com o serviço, a fila deve ter permissões para a AmazonSNS.

    • 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 Subscribe ação, a Amazon SNS envia uma confirmação de assinatura para a fila. A assinatura é exibida no SNS console da Amazon, com seu ID de assinatura definido como Confirmação pendente.

Para confirmar a assinatura, um usuário com permissão para ler mensagens da fila deve recuperar a confirmação da assinaturaURL, e o proprietário da assinatura deve confirmar a assinatura usando a confirmação da assinatura. URL 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 SQS console da Amazon ou a ReceiveMessage ação.

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: dê permissão ao SNS tópico da Amazon para enviar mensagens para a SQS fila da Amazon.

Etapa 1: Para adicionar uma assinatura de SQS fila da Amazon a um tópico em outro Conta da AWS usando o AWS Management Console

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.

  1. Faça login no SNSconsole da Amazon.

  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. ARNEm Tópico, insira o ARN do tópico.

    2. Em Protocolo, escolha Amazon SQS.

    3. Em Endpoint, insira o ARN da fila.

    4. Selecione Create subscription.

      nota
      • Para poder se comunicar com o serviço, a fila deve ter permissões para a AmazonSNS.

A seguir está um exemplo de declaração de política que permite que o SNS tópico da Amazon envie uma mensagem para a SQS fila da Amazon.

{ "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 AWS Management Console

  1. Faça login no SQSconsole da Amazon.

  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 Detalhes da mensagem, localize e anote o URL valor Inscrever-se. Este é seu link de assinatura (exemplo abaixo). Para obter detalhes adicionais sobre a validação do API token, consulte ConfirmSubscriptiona SNS API Referência da Amazon.

      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 passado do proprietário da fila para o proprietário da assinatura. O proprietário da assinatura deve URL inserir o no SNSconsole da Amazon.

  5. Faça login como proprietário da assinatura no SNSconsole da Amazon. O proprietário da assinatura realiza 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 XML resposta é 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ê visualizar a assinatura do tópico no SNS console da Amazon, poderá ver que a mensagem de confirmação pendente foi substituída pela assinatura ARN na coluna 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.