Inscrever uma fila do Amazon SQS em um tópico do Amazon SNS
Para permitir que um tópico do Amazon SNS envie mensagens a uma fila do Amazon SQS, siga um destes procedimentos:
-
Use o console do Amazon SQS
, o que simplifica o processo. Para obter mais informações,consulte Subscribing an Amazon SQS queue to an Amazon SNS topic no Guia do desenvolvedor do Amazon Simple Queue Service. -
Siga estas etapas:
Para saber mais sobre como configurar um tópico para enviar mensagens a uma fila que está em uma conta da AWS diferente, consulte Enviar mensagens do Amazon SNS para uma fila do SQS em uma conta diferente.
Para ver um modelo do AWS CloudFormation que cria um tópico que envia mensagens para duas filas, consulte Automatize as mensagens do Amazon SNS para o Amazon SQS com AWS CloudFormation.
Etapa 1: Obter o ARN da fila e do tópico
Ao inscrever uma fila em seu tópico, você precisará de uma cópia do ARN da fila. Da mesma forma, ao conceder permissão para o tópico enviar mensagens para a fila, você precisará de uma cópia do ARN do tópico.
Para obter o ARN da fila, você pode usar o console do Amazon SQS ou a ação de API GetQueueAttributes.
Para obter o ARN da fila do console do Amazon SQS
Faça login no AWS Management Console e abra o console do Amazon SQS em https://console.aws.amazon.com/sqs/
. -
Marque a caixa de seleção da fila cujo ARN você deseja obter.
-
Na seção Details (Detalhes), copie o valor do ARN e use-o para se inscrever no tópico do Amazon SSN.
Para obter o ARN do tópico, use o console do Amazon SNS, o comando sns-get-topic-attributes
ou a ação da API GetQueueAttributes
.
Para obter o ARN do tópico do console do Amazon SNS
Faça login no console do Amazon SNS
. -
No painel de navegação, selecione o tópico do qual você deseja obter o ARN.
-
Na seção Details (Detalhes), copie o valor de ARN a fim de usá-lo para conceder permissão ao tópico do Amazon SNS para enviar mensagens à fila.
Etapa 2: Conceder permissão ao tópico do Amazon SNS para enviar mensagens à fila do Amazon SQS
Para que um tópico do Amazon SNS possa de enviar mensagens a uma fila, você deve definir uma política na fila que permita que o tópico do Amazon SNS execute a ação sqs:SendMessage
.
Antes de inscrever uma fila em um tópico, você precisa de um tópico e uma fila. Se ainda não criou um tópico ou uma fila, crie-os agora. Para obter mais informações, consulte Criar um tópico e Criar uma fila no Guia do desenvolvedor do Amazon Simple Queue Service.
Para definir uma política em uma fila, você pode usar o console do Amazon SQS ou a ação da API SetQueueAttributes. Antes de começar, verifique se você tem o ARN do tópico que você deseja permitir que envie mensagens para a fila. Se você estiver assinando uma fila para vários tópicos, sua política deverá conter um elemento Statement
para cada tópico.
Para definir uma política de SendMessage em uma fila usando o console do Amazon SQS
Faça login no AWS Management Console e abra o console do Amazon SQS em https://console.aws.amazon.com/sqs/
. -
Marque a caixa da fila cuja política você deseja definir, escolha a guia Access policy (Política de acesso) e escolha Edit (Editar).
-
NoPolítica de acesso, defina quem pode acessar sua fila.
-
Adicione uma condição que permite a ação para o tópico.
-
Defina
Principal
como o serviço do Amazon SNS, conforme exibido no exemplo abaixo. -
Use as chaves de condição globais
aws:SourceArn
ouaws:SourceAccount
para se proteger contra o cenário confused deputy. Para usar essas chaves de condição, defina o valor como o ARN de seu tópico. Se sua fila estiver inscrita em vários tópicos, useaws:SourceAccount
em seu lugar.
Por exemplo, a política a seguir permite que MyTopic envie mensagens para MyQueue.
{ "Statement": [ { "Effect": "Allow", "Principal": { "Service": "sns.amazonaws.com" }, "Action": "sqs:SendMessage", "Resource": "arn:aws:sqs:us-east-2:123456789012:MyQueue", "Condition": { "ArnEquals": { "aws:SourceArn": "arn:aws:sns:us-east-2:123456789012:MyTopic" } } } ] }
-
Etapa 3: Inscrever a fila no tópico do Amazon SNS
Para enviar mensagens para uma fila por meio de um tópico, você deve inscrever a fila no tópico do Amazon SNS. Você especifica a fila por meio de sua ARN. Para se inscrever em um tópico, use o console do Amazon SNS, o comando sns-subscribe
da CLI ou a ação da API Subscribe
. Antes de começar, verifique se você tem o ARN para a fila que deseja inscrever.
Faça login no console do Amazon SNS
. -
No painel de navegação, escolha Tópicos.
-
Na página Tópicos, escolha um tópico.
-
Na página
MeuTópico
, na página Inscrições, escolha Criar inscrição. -
Na página Criar inscrição, na seção Detalhes, faça o seguinte:
-
Verifique o ARN do tópico.
-
Em Protocol (Protocolo), escolha Amazon SQS.
-
Em Endpoint, insira o ARN de uma fila do Amazon SQS.
-
Escolha Create Subscription (Criar assinatura).
Quando a inscrição for confirmada, o ID da inscrição da nova inscrição exibirá o ID da inscrição. Se o proprietário da fila criar a inscrição, ela será automaticamente confirmada e deverá ser ativada quase que imediatamente.
Geralmente, você inscreverá sua própria fila em seu próprio tópico em sua própria conta. No entanto, você também pode inscrever uma fila de uma conta diferente em seu tópico. Se o usuário que criar a inscrição não for o proprietário da fila (por exemplo, se um usuário da conta A inscreve uma fila da conta B para um tópico na conta A), a inscrição deverá ser confirmada. Para obter mais informações sobre como inscrever uma fila de uma conta diferente e confirmar a inscrição, consulte Enviar mensagens do Amazon SNS para uma fila do SQS em uma conta diferente.
-
Etapa 4: Conceder aos usuários permissões para o tópico apropriado e as ações da fila
Você deve usar o AWS Identity and Access Management (IAM) para permitir que apenas usuários apropriados publiquem no tópico do Amazon SNS e leiam/excluam mensagens da fila do Amazon SQS. Para obter mais informações sobre como controlar ações em tópicos e filas para usuários do IAM, consulteUsar políticas baseadas em identidade com o Amazon SNS, eIdentity and Access Management no Amazon SQSno Guia do desenvolvedor do Amazon Simple Queue Service.
Há duas maneiras de controlar o acesso a um tópico ou uma fila:
-
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 ou filas é 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 ou à fila. Se deseja conceder permissões para um tópico ou fila para outra conta da 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 para um usuário em outra conta, use o segundo método.
Adicionar uma política a um usuário ou grupo do IAM
Se você tiver adicionado a política a seguir a um usuário ou grupo do IAM estará concedendo a esse usuário ou membros desse grupo permissão para executar a ação sns:Publish
no tópico MyTopic.
{ "Statement": [ { "Effect": "Allow", "Action": "sns:Publish", "Resource": "arn:aws:sns:us-east-2:123456789012:MyTopic" } ] }
Se você tiver adicionado a política a seguir a um usuário ou grupo do IAM, estará concedendo a esse usuário ou membros do grupo permissão para executar as ações sqs:ReceiveMessage
e sqs:DeleteMessage
nas filas MyQueue1 e MyQueue2.
{ "Statement": [ { "Effect": "Allow", "Action": [ "sqs:ReceiveMessage", "sqs:DeleteMessage" ], "Resource": [ "arn:aws:sqs:us-east-2:123456789012:MyQueue1", "arn:aws:sqs:us-east-2:123456789012:MyQueue2" ] } ] }
Adição de uma política a um tópico ou uma fila
Os exemplos de políticas a seguir mostram como conceder a outra conta permissões para um tópico e uma fila.
nota
Ao conceder à outra Conta da AWS acesso a um recurso em sua conta, você também está concedendo permissões para o recurso em questão aos usuários do IAM com acesso de nível de administrador (acesso coringa). Todos os outros usuários do IAM na outra conta têm automaticamente o acesso negado a seus recursos. Se desejar conceder a usuários específicos do IAM dessa Conta da AWS acesso a seu recurso, a conta ou um usuário do IAM com acesso de nível de administrador deverá delegar permissões para o recurso para esses usuários do IAM. Para obter mais informações sobre a delegação entre contas, consulte Habilitar acesso entre contas no Guia de uso do IAM.
Se adicionou a seguinte política a um tópico MeuTópico na conta, você pode conceder à conta 123456789012 permissão 111122223333 para executar a ação sns:Publish
no tópico.
{ "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "111122223333" }, "Action": "sns:Publish", "Resource": "arn:aws:sns:us-east-2:123456789012:MyTopic" } ] }
Se adicionar a seguinte política à fila MyQueue na conta 123456789012, você concederá à conta 111122223333 permissão para executar as ações sqs:ReceiveMessage
e sqs:DeleteMessage
na fila.
{ "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "111122223333" }, "Action": [ "sqs:DeleteMessage", "sqs:ReceiveMessage" ], "Resource": [ "arn:aws:sqs:us-east-2:123456789012:MyQueue" ] } ] }
Etapa 5: Testar as assinaturas de fila do tópico
Você pode testar as inscrições de fila de um tópico publicando nele e visualizando a mensagem que ele envia para a fila.
Para publicar um tópico usando o console do Amazon SNS
-
Usando as credenciais da Conta da AWS ou do usuário do IAM com permissão para publicar no tópico, faça login no AWS Management Console e abra o console do Amazon SNS em https://console.aws.amazon.com/sns/
. -
No painel de navegação, escolha o tópico e selecione Publicar no tópico.
-
Na caixa Assunto, digite um assunto (por exemplo,
Testing publish to queue
), na caixa Mensagem, digite algum texto (por exemplo,Hello world!
) e escolha Publicar mensagem. Será exibida a seguinte mensagem: Your message has been successfully published.
Para visualizar a mensagem do tópico usando o console do Amazon SQS
-
Usando as credenciais da Conta da AWS ou do usuário do IAM com permissão para visualizar mensagens na fila, faça login no AWS Management Console e abra o console do Amazon SQS em https://console.aws.amazon.com/sqs/
. -
Escolha uma fila que esteja inscrita no tópico.
-
Escolha Send and receive messages (Enviar e receber mensagens), depois escolha Poll for messages (Pesquisar mensagens). Uma mensagem com um tipo de Notificação é exibida.
-
Na coluna Corpo, escolha Mais detalhes. A caixa Detalhes da mensagem inclui um documento JSON que contém o assunto e a mensagem publicada no tópico. A mensagem é semelhante ao seguinte documento JSON.
{ "Type" : "Notification", "MessageId" : "63a3f6b6-d533-4a47-aef9-fcf5cf758c76", "TopicArn" : "arn:aws:sns:us-west-2:123456789012:MyTopic", "Subject" : "Testing publish to subscribed queues", "Message" : "Hello world!", "Timestamp" : "2012-03-29T05:12:16.901Z", "SignatureVersion" : "1", "Signature" : "EXAMPLEnTrFPa3...", "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:c7fe3a54-ab0e-4ec2-88e0-db410a0f2bee" }
-
Escolha Fechar. Você publicou com sucesso em um tópico que envia mensagens de notificação para uma fila.