Como configuro meu endpoint do Amazon SQS entre contas diferentes para o tópico do Amazon SNS?

8 minuto de leitura
0

Eu tenho uma fila do Amazon Simple Queue Service (Amazon SQS) na conta A. Quero assinar essa fila no meu tópico do Amazon Simple Notification Service (Amazon SNS) na conta B.

Breve descrição

Crie uma assinatura do tópico do Amazon SNS como proprietário do tópico. Ou crie a assinatura na fila do Amazon SQS como proprietário da fila. Para criar a assinatura com sucesso, ambas as abordagens devem ter as permissões apropriadas.

Resolução

Importante: Para assinar como proprietário da fila, certifique-se de que sua política de acesso a tópicos do SNS na conta B tenha as permissões apropriadas. Essas permissões permitem que a fila do SQS na conta A assine o tópico do SNS. Para assinar como proprietário do tópico, certifique-se de que sua política de acesso à fila do SQS na conta A tenha as permissões apropriadas. A conta A deve ter permissões para permitir que o tópico do SNS envie o URL de confirmação da assinatura.

Assine como proprietário da fila

Para assinar uma fila como proprietário da fila, conclua as tarefas a seguir.

Modifique a política de acesso do SNS na conta B

Conclua as seguintes etapas:

  1. Faça login no console do Amazon SNS na conta B.
  2. Mude para a Região apropriada da AWS.
  3. Escolha Tópicos e, em seguida, selecione seu tópico do SNS.
  4. Escolha Editar.
  5. Expanda a seção Política de acesso.
  6. Copie e cole a seguinte política de acesso na seção Editor JSON:
    {
      "Statement": [
        {
          "Effect": "Allow",
          "Principal": {
            "AWS": "111122223333"
          },
          "Action": "sns:Subscribe",
          "Resource": "arn:aws:sns:Region:account-id:topic-name"
        }
      ]
    }
    Observação: Substitua o ARN da conta da AWS e do tópico do SNS por seus valores.
  7. Escolha Salvar.

Como proprietário da fila, siga estas etapas para assinar sua fila do SQS da conta A no seu tópico do SNS da conta B:

  1. Faça login no console do Amazon SQS na conta A.
  2. Mude para a Região apropriada.
  3. Escolha Filas e, em seguida, selecione sua fila do SQS.
  4. Na seção Assinaturas do SNS, selecione Assinar tópico do Amazon SNS.
  5. Em Especificar um tópico do Amazon SNS disponível para essa fila, selecione o menu suspenso. Em seguida, escolha Inserir ARN do tópico do Amazon SNS.
  6. No campo de texto Um tópico do Amazon SNS que pode enviar notificações para uma fila do Amazon SQS, preencha o ARN do seu tópico do SNS.
  7. Escolha Salvar.
  8. Faça login no console do Amazon SNS na conta B.
  9. Escolha Tópicos e, em seguida, selecione seu tópico do SNS.
  10. Para verificar se a assinatura foi confirmada para seu tópico do SNS na conta B, consulte a seção Assinaturas.
    Observação: Depois de criar a assinatura, uma instrução é adicionada à política de acesso da fila do SQS. A política permite que o tópico do SNS envie mensagens para a sua fila. A política é semelhante ao seguinte:
{
      "Sid": "topic-subscription-arn:aws:sns:Region:account-id:topic-name",
      "Effect": "Allow",
      "Principal": {
        "AWS": "*"
      },
      "Action": "SQS:SendMessage",
      "Resource": "arn:aws:sqs:Region:account-id:queue-name",
      "Condition": {
        "ArnLike": {
          "aws:SourceArn": "arn:aws:sns:Region:account-id:topic-name"
        }
      }
    }

Assine como proprietário do tópico

Para assinar uma fila como proprietário do tópico, conclua as tarefas a seguir.

Modifique a fila do SQS na conta A

Conclua as seguintes etapas:

  1. Faça login no console do Amazon SQS na conta A.
  2. Mude para a Região apropriada.
  3. Escolha Filas e, em seguida, selecione sua fila do SQS.
  4. Escolha Editar.
  5. Expanda a seção Política de acesso.
  6. Copie e cole a seguinte política de acesso no editor JSON:
    {
          "Sid": "Allow_SNS_topic_in_Account_B_to_Send_Message",
          "Effect": "Allow",
          "Principal": {
            "AWS": "*"
          },
          "Action": "SQS:SendMessage",
          "Resource": "arn:aws:sqs:Region:account-id:queue-name",
          "Condition": {
            "ArnLike": {
              "aws:SourceArn": "arn:aws:sns:Region:account-id:topic-name"
            }
          }
        }
    Observação: Substitua o ARN da fila do SQS e o ARN do tópico do SNS pelos seus valores.

Como proprietário do tópico, conclua as etapas a seguir para assinar sua fila do SQS em outra conta:

  1. Faça login no console do Amazon SNS na conta B.
  2. Mude para a Região apropriada.
  3. Escolha Tópicos e, em seguida, selecione seu tópico do SNS.
  4. Em Assinaturas, selecione Criar assinatura.
  5. Escolha a lista suspensa Protocolo e, em seguida, selecione Amazon SQS.
  6. Selecione Criar assinatura.
  7. Para confirmar a assinatura, faça login no console do Amazon SQS na conta A.
  8. Escolha Filas e, em seguida, selecione a fila do SQS assinada.
  9. Escolha Enviar e receber mensagens.
  10. Selecione Pesquisar mensagens. Uma mensagem do Amazon SNS aparece na seção Mensagens.
  11. Selecione a ID da mensagem. Em SubscribeURL, copie o URL entre aspas.
  12. Para ver o ConfirmSubscriptionResult com SubscriptionArn, cole esse link de URL em seu navegador e pressione Enter.
  13. Faça login no console do Amazon SNS na conta B.
  14. Escolha Tópicos e, em seguida, selecione seu tópico do SNS.
  15. Para verificar se a assinatura foi confirmada, consulte o status da assinatura em Assinaturas. O status da assinatura muda de Confirmação pendente para Confirmado.

Observação: Como a assinatura pertence à conta do SNS, você não pode ver a assinatura listada no console do SQS.

Dicas para solução de problemas

Para solucionar problemas com suas filas, conclua as tarefas a seguir com base no seu caso.

Minha fila do SQS está criptografada

As filas do SQS criptografadas com uma chave do AWS Key Management Service (AWS KMS) podem restringir o acesso entre contas. Se você não definir uma chave para sua fila criptografada, a fila usará a chave do AWS KMS (SSE-KMS) como chave padrão. Essa chave permite acesso somente para a entidade principal na mesma conta. Para obter mais informações, consulte Criptografia em repouso no Amazon SQS.

Para acessar filas criptografadas que usam SSE-KMS, crie uma chave do AWS KMS gerenciada pelo cliente. Em seguida, adicione permissões na política de chave que permitam que o serviço do SNS faça as chamadas de API do AWS KMS.

Para permitir que o serviço do SNS use os métodos de API GenerateDataKey e Decrypt, adicione a seguinte instrução à política de chave gerenciada pelo cliente:

{
      "Effect": "Allow",
      "Principal": {
            "Service": "sns.amazonaws.com"
      },
      "Action": [
            "kms:GenerateDataKey*",
            "kms:Decrypt"
      ],
      "Resource": "*"
}

Para obter mais informações, consulte Configurar a criptografia no servidor (SSE) para uma fila (console).

Minha assinatura ainda está pendente no console do SNS quando eu crio minha assinatura no console do Amazon SNS

Para solucionar esse erro, use as etapas a seguir:

  1. Exclua sua assinatura. Em seguida, comece a partir da etapa 13 das etapas anteriores.

  2. Para usar a AWS Command Line Interface (AWS CLI) para pesquisar sua fila do SQS, execute o seguinte comando para recuperar SubscriptionURL:

    aws sqs receive-message --queue-url https**:**//sqs.us-east-1.amazonaws.com/80398EXAMPLE/MyQueue --attribute-names All --message-attribute-names All --max-number-of-messages 10

    Observação: se você receber erros ao executar comandos da AWS CLI, consulte Solucionar erros da AWS CLI. Além disso, verifique se você está usando a versão mais recente da AWS CLI.

  3. Copie e cole esse URL no seu navegador para confirmar a assinatura. Substitua o URL da fila pelo seu.

Quando eu copio e colo minha política de acesso a tópicos do SNS, vejo o erro "Couldn't set topic access policy"

Quando eu copio e colo minha política de acesso a tópicos do SNS, vejo o seguinte erro:

"Couldn't set topic access policy.Error code: InvalidParameter - Error message: An error occurred while setting the attribute access policy. Invalid parameter: Policy Error: null."

Use as etapas a seguir para solucionar o erro:

  1. Para garantir que a sintaxe da sua política esteja correta, copie e cole a política de acesso no site da ferramenta JSON Validator.
  2. Revise sua política de acesso para garantir que não haja uma Instrução duplicada. Verifique se há uma vírgula após sua primeira ID da instrução.

Meu ID de assinatura aparece como “Excluído” no console do Amazon SNS

Na integração entre contas do SNS e do SQS, o proprietário da assinatura é determinado pelo local de onde a assinatura é criada.

Se a assinatura for criada a partir da conta do SQS, o SQS será o proprietário da assinatura. Se a assinatura for criada a partir da conta do SNS, o SNS será o proprietário da assinatura.

Se você chamar a API de cancelamento de assinatura de uma conta que não possui a assinatura, a assinatura entrará no status Excluída. Ou, se você tentar excluir a assinatura do console, a assinatura entrará no status Excluída. Enquanto a assinatura do tópico do SNS estiver no status Excluída, a conta que possui a assinatura não poderá assinar novamente o mesmo endpoint no tópico.

Após 48 horas, o Amazon SNS limpa a assinatura Excluída e a conta proprietária da assinatura pode assinar novamente o mesmo endpoint no tópico.

Para assinar novamente antes de 48 horas, chame a API de assinatura da conta da AWS que possui o tópico do SNS para recriar a assinatura.

Práticas recomendadas

Autentique sua assinatura do SNS em sua fila do SQS. Com essa configuração, somente o proprietário do tópico e o proprietário da assinatura podem cancelar a assinatura da fila do SQS do tópico do SNS.

Informações relacionadas

Como enviar mensagens do Amazon SNS para uma fila do Amazon SQS em uma conta diferente

Permita que as notificações de eventos do Amazon Simple Storage Service (Amazon S3) sejam publicadas em um tópico

Como resolvo erros de autorização ao tentar adicionar assinantes a um tópico do Amazon SNS?

Conhecer o período de reutilização da chave de dados

AWS OFICIAL
AWS OFICIALAtualizada há 2 meses