Suscripción de una cola de Amazon SQS a un tema de Amazon SNS - Amazon Simple Notification Service

Suscripción de una cola de Amazon SQS a un tema de Amazon SNS

Para habilitar un tema de Amazon SNS de modo que envíe mensajes a una cola de Amazon SQS, siga uno de estos procedimientos:

Si desea saber cómo configurar un tema para enviar mensajes a una cola que está en otra cuenta de AWS, consulte Envío de mensajes de Amazon SNS a una cola de Amazon SQS de otra cuenta.

Para ver una plantilla de AWS CloudFormation que crea un tema que envía mensajes a dos colas, consulte Automatización de la mensajería de Amazon SNS a Amazon SQS con AWS CloudFormation.

Paso 1: obtener el ARN de la cola y el del tema

Cuando suscriba una cola a un tema, necesitará una copia del ARN de la cola. Del mismo modo, cuando conceda permiso para que el tema envíe mensajes a la cola, necesitará una copia del ARN del tema.

Para obtener el ARN de la cola, puede utilizar la consola de Amazon SQS o la acción GetQueueAttributes de la API.

Para obtener el ARN de la cola de la consola de Amazon SQS, siga estos pasos:
  1. Inicie sesión en la AWS Management Console y abra la consola de Amazon SQS en https://console.aws.amazon.com/sqs/.

  2. Seleccione la casilla de la cola cuyo ARN quiere obtener.

  3. En la sección Detalles, copie el valor del ARN de forma que pueda utilizarlo para suscribirse al tema de Amazon SNS.

Para obtener el ARN del tema, puede utilizar la consola de Amazon SNS, el comando sns-get-topic-attributes o la acción GetQueueAttributes de la API.

Para obtener el ARN del tema desde la consola de Amazon SNS, siga estos pasos:
  1. Inicie sesión en la consola de Amazon SNS.

  2. En el panel de navegación, seleccione el tema cuyo ARN desea obtener.

  3. En la sección Detalles, copie el valor ARN del tema de forma que pueda utilizarlo para conceder permiso al tema de Amazon SNS y enviar mensajes a la cola.

Paso 2: conceder permiso al tema de Amazon SNS y enviar mensajes a la cola de Amazon SQS

Para que un tema de Amazon SNS pueda enviar mensajes a una cola, debe establecer una política en la cola que permita que el tema de Amazon SNS pueda ejecutar la acción sqs:SendMessage.

Antes de suscribir una cola a un tema, necesita un tema y una cola. Si aún no ha creado un tema o una cola, créelos ahora. Para obtener más información, consulte Creación de un tema y Creación de una cola en la Guía para desarrolladores de Amazon Simple Queue Service.

Para establecer una política en una cola, puede utilizar la consola de Amazon SQS o la acción SetQueueAttributes de la API. Antes de comenzar, asegúrese de que dispone del ARN del tema al que desea conceder permiso para enviar mensajes a la cola. Si está suscrito a una cola para varios temas, la política debe contener un elemento Statement para cada tema.

Establecimiento de una política SendMessage en una cola mediante la consola de Amazon SQS
  1. Inicie sesión en la AWS Management Console y abra la consola de Amazon SQS en https://console.aws.amazon.com/sqs/.

  2. Seleccione la casilla de la cola cuya política desea establecer, elija la pestaña Política de acceso y, a continuación, elija Editar.

  3. En la sección Política de acceso, defina quién puede acceder a la cola.

    • Añada una condición que permita la acción para el tema.

    • Establezca Principal para que sea el servicio de Amazon SNS, como se muestra en el ejemplo siguiente.

    • Utilice las claves de condición global aws:SourceArn o aws:SourceAccount para protegerse del escenario de suplente confuso. Para usar estas claves de condición, establezca el valor en el ARN de su tema. Si su cola está suscrita a varios temas, puede utilizar aws:SourceAccount en su lugar.

    Por ejemplo, con la siguiente política, MyTopic puede enviar mensajes a 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" } } } ] }

Paso 3: suscribir la cola al tema de Amazon SNS

Para enviar mensajes a una cola a través de un tema, debe suscribir la cola al tema de Amazon SNS. La cola se especifica con el ARN. Para suscribirse a un tema, puede utilizar la consola de Amazon SNS, el comando sns-subscribe de la CLI o la acción de API Subscribe. Antes de comenzar, asegúrese de que tiene el ARN de la cola que desea suscribir.

  1. Inicie sesión en la consola de Amazon SNS.

  2. En el panel de navegación, elija Temas.

  3. Elija un tema en la página Temas.

  4. En la página MyTopic, en la página Suscripciones, elija Crear suscripción.

  5. En la página Crear suscripción, en la sección Detalles, haga lo siguiente:

    1. Verifique el ARN del tema.

    2. En Protocolo, elija Amazon SQS.

    3. En Punto de conexión, indique el ARN de una cola de Amazon SQS.

    4. Elija Crear suscripción.

    Cuando se confirme la suscripción, el campo ID de suscripción de la nueva suscripción mostrará su ID de suscripción. Si el propietario de la cola crea la suscripción, esta se confirmará de forma automática y se activará casi de inmediato.

    Normalmente, suscribirá su propia cola a su propio tema en su propia cuenta. Sin embargo, también puede suscribir una cola de otra cuenta a su tema. Si el usuario que crea la suscripción no es el propietario de la cola (por ejemplo, si un usuario de una cuenta A suscribe una cola de una cuenta B a un tema de la cuenta A), la suscripción deberá confirmarse. Para obtener más información sobre cómo suscribir una cola desde otra cuenta y confirmar la suscripción, consulte Envío de mensajes de Amazon SNS a una cola de Amazon SQS de otra cuenta.

Paso 4: conceder a los usuarios permisos para las acciones adecuadas del tema y la cola

Debe utilizar AWS Identity and Access Management (IAM) para permitir que solo los usuarios adecuados puedan publicar en el tema de Amazon SNS y leer o eliminar mensajes de la cola de Amazon SQS. Para obtener más información sobre el control de las acciones que pueden realizar los usuarios de IAM en los temas y las colas, consulte Uso de políticas basadas en identidades con Amazon SNS e Identity and Access Management en Amazon SQS en la Guía para desarrolladores de Amazon Simple Queue Service.

Hay dos formas de controlar el acceso a un tema o una cola:

  • Añada una política a un usuario o un grupo de IAM. La forma más sencilla de conceder a los usuarios permisos para temas o colas consiste en crear un grupo, añadir la política adecuada al grupo y, a continuación, añadir usuarios a dicho grupo. Es mucho más fácil añadir y eliminar usuarios de un grupo que mantener un seguimiento de las políticas que se han configurado para los distintos usuarios.

  • Añada una política a un tema o una cola. Si desea conceder permisos para un tema o una cola a otra cuenta de AWS, el único modo de hacerlo es añadiendo una política que tenga como entidad principal la Cuenta de AWS a la que desee conceder los permisos.

Debe utilizar el primer método para la mayoría de los casos (aplicar políticas a grupos y administrar los permisos de los usuarios añadiendo o eliminando los usuarios a los grupos). Si necesita conceder permisos a un usuario de otra cuenta, debe utilizar el segundo método.

Cómo añadir una política a un usuario o un grupo de IAM

Si ha añadido la política siguiente a un usuario o un grupo de IAM, debe conceder a dicho usuario o a los miembros de dicho grupo permiso para ejecutar la acción sns:Publish en el tema MyTopic.

{ "Statement": [ { "Effect": "Allow", "Action": "sns:Publish", "Resource": "arn:aws:sns:us-east-2:123456789012:MyTopic" } ] }

Si ha añadido la siguiente política a un usuario o un grupo de IAM, debe conceder a dicho usuario o a los miembros de dicho grupo permiso para ejecutar las acciones sqs:ReceiveMessage y sqs:DeleteMessage en las colas MyQueue1 y 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" ] } ] }

Cómo añadir una política a un tema o una cola

Las siguientes políticas de ejemplo muestran cómo conceder a otra cuenta permisos sobre un tema y una cola.

nota

Cuando concede a otra Cuenta de AWS acceso a un recurso de su cuenta, también concede a los usuarios de IAM que tienen permisos de acceso de nivel de administrador (acceso a todos los recursos) permisos para ese recurso. Al resto de los usuarios de IAM de la otra cuenta se les deniega de manera automática el acceso al recurso. Si desea conceder a usuarios específicos de IAM en esa Cuenta de AWS acceso a su recurso, la cuenta o el usuario de IAM con acceso de nivel de administrador debe delegar permisos para el recurso a esos usuarios de IAM. Para obtener más información acerca de la delegación entre cuentas, consulte Cómo habilitar el acceso entre cuentas en la Guía del usuario de IAM.

Si ha añadido la política siguiente a un tema MyTopic en la cuenta 123456789012, debe conceder a la cuenta 111122223333 permiso para ejecutar la acción sns:Publish en dicho tema.

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

Si ha añadido la política siguiente a un tema MyQueue en la cuenta 123456789012, debe conceder a la cuenta 111122223333 permiso para ejecutar las acciones sqs:ReceiveMessage y sqs:DeleteMessage en dicha cola.

{ "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "111122223333" }, "Action": [ "sqs:DeleteMessage", "sqs:ReceiveMessage" ], "Resource": [ "arn:aws:sqs:us-east-2:123456789012:MyQueue" ] } ] }

Paso 5: probar las suscripciones de un tema a una cola

Puede probar las suscripciones de un tema a una cola publicando en el tema y viendo el mensaje que el tema envía a la cola.

Para publicar en un tema mediante la consola de Amazon SNS, siga estos pasos:
  1. Con las credenciales de la Cuenta de AWS o del usuario de IAM con permiso para publicar en el tema, inicie sesión en la AWS Management Console y abra la consola de Amazon SNS en https://console.aws.amazon.com/sns/.

  2. En el panel de navegación, seleccione el tema y elija Publicar en tema.

  3. En el cuadro Asunto, escriba un asunto (por ejemplo, Testing publish to queue), en el cuadro Mensaje, introduzca algún texto (por ejemplo, Hello world!) y, por último, elija Publicar mensaje. Aparecerá el siguiente mensaje: Your message has been successfully published.

Para ver el mensaje del tema mediante la consola de Amazon SQS, siga estos pasos:
  1. Con las credenciales de la Cuenta de AWS o del usuario de IAM con permiso para ver los mensajes en la cola, inicie sesión en AWS Management Console y abra la consola de Amazon SQS en https://console.aws.amazon.com/sqs/.

  2. Elija una cola que esté suscrita al tema.

  3. Elija Enviar y recibir mensajes y, a continuación, elija Sondeo de mensajes. Aparecerá un mensaje con el tipo Notificación.

  4. En la columna Cuerpo, elija Más detalles. El cuadro Detalles del mensaje contiene un documento JSON con el tema y el mensaje que ha publicado en el tema. El mensaje tiene un aspecto similar al documento JSON siguiente.

    { "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" }
  5. Elija Cerrar. Ha publicado correctamente en un tema que envía mensajes de notificación a una cola.