Abonnement d'une file d'attente Amazon SQS à une rubrique Amazon SNS - Amazon Simple Notification Service

Abonnement d'une file d'attente Amazon SQS à une rubrique Amazon SNS

Pour permettre à une rubrique Amazon SNS d'envoyer des messages à une file d'attente Amazon SQS, effectuez l'une des opérations suivantes :

Pour savoir comment configurer une rubrique pour envoyer des messages à une file d'attente située dans un autre compte AWS, consultez Envoi de messages Amazon SNS à une file d'attente Amazon SQS d'un autre compte.

Pour obtenir un modèle AWS CloudFormation créant une rubrique qui envoie des messages à deux files d'attente, consultez Utilisation d'un modèle AWS CloudFormation pour créer une rubrique qui envoie des messages à des files d'attente Amazon SQS.

Étape 1 : obtenir l'ARN de la file d'attente et de la rubrique

Lorsque vous abonnez une file d'attente à votre rubrique, vous avez besoin d'une copie de l'ARN de la file d'attente. De même, lorsque vous accordez à la rubrique l'autorisation d'envoyer des messages à la file d'attente, vous avez besoin d'une copie de l'ARN de la rubrique.

Pour obtenir l'ARN de la file d'attente, vous pouvez utiliser la console Amazon SQS ou l'action d'API GetQueueAttributes.

Pour obtenir l'ARN de la file d'attente à partir de la console Amazon SQS

  1. Connectez-vous à l’AWS Management Console et ouvrez la console Amazon SQS à l’adresse https://console.aws.amazon.com/sqs/.

  2. Cochez la case correspondant à la file d'attente dont vous souhaitez obtenir l'ARN.

  3. Sur l'onglet Détails, copiez la valeur de l'ARN afin de pouvoir l'utiliser pour l'abonnement à la rubrique Amazon SNS.

Pour obtenir l'ARN de la rubrique, vous pouvez utiliser la console Amazon SNS, la commande sns-get-topic-attributes ou l'action d'API GetQueueAttributes.

Pour obtenir l'ARN de la rubrique à partir de la console Amazon SNS

  1. Connectez-vous à la console Amazon SNS.

  2. Dans le panneau de navigation, sélectionnez la rubrique dont vous souhaitez obtenir l'ARN.

  3. Dans la section Détails, copiez la valeur du champ ARN afin de pouvoir l'utiliser pour accorder à la rubrique Amazon SNS l'autorisation d'envoyer des messages à la file d'attente.

Étape 2 : autoriser la rubrique Amazon SNS à envoyer des messages à la file d'attente Amazon SQS

Pour qu'une rubrique Amazon SNS soit en mesure d'envoyer des messages à une file d'attente, vous devez définir une politique sur la file d'attente qui permette à la rubrique Amazon SNS d'effectuer l'action sqs:SendMessage.

Avant d'abonner une file d'attente à une rubrique, vous avez besoin d'une rubrique et d'une file d'attente. Si vous n'avez pas encore créé de rubrique ou de file d'attente, faites-le maintenant. Pour plus d'informations, consultez Création d'une rubrique et Création d'une file d'attente dans le Guide du développeur Amazon Simple Queue Service.

Pour définir une politique sur une file d'attente, vous pouvez utiliser la console Amazon SQS ou l'action d'API SetQueueAttributes. Avant de commencer, assurez-vous que vous disposez de l'ARN de la rubrique que vous souhaitez autoriser à envoyer des messages à la file d'attente. Si vous abonnez une file d'attente à plusieurs rubriques, votre stratégie doit contenir un élément Statement pour chaque rubrique.

Pour définir une politique SendMessage sur une file d'attente à l'aide de la console Amazon SQS

  1. Connectez-vous à l’AWS Management Console et ouvrez la console Amazon SQS à l’adresse https://console.aws.amazon.com/sqs/.

  2. Cochez la case de la file d'attente dont vous souhaitez définir la politique, choisissez l'onglet Politique d'accès, puis choisissez Modifier.

  3. Dans la Politique d'accès, définissez qui peut accéder à votre file d'attente.

    • Ajoutez une condition qui autorise l'action pour la rubrique.

    • Définissez Principal en tant que service Amazon SNS, comme indiqué dans l'exemple ci-dessous.

    • Utiliser les clés de condition globales aws:SourceArn ou aws:SourceAccount pour se protéger contre le scénario Député confus. Pour utiliser ces clés de condition, définissez la valeur de l'ARN de votre sujet. Si votre file d'attente est abonnée à plusieurs rubriques, vous pouvez utiliser aws:SourceAccount à la place.

    Par exemple, la politique suivante permet à MyTopic d'envoyer des messages à 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" } } } ] }

Étape 3 : abonner la file d'attente à la rubrique Amazon SNS

Pour envoyer des messages à une file d'attente via une rubrique, vous devez abonner la file d'attente à la rubrique Amazon SNS. Spécifiez la file d'attente à l'aide de son ARN. Pour réaliser un abonnement à une rubrique, vous pouvez utiliser la console Amazon SNS, la CLI sns-subscribe de commande ou l'action d'API Subscribe. Avant de commencer, assurez-vous que vous disposez de l'ARN de la file d'attente que vous souhaitez abonner.

  1. Connectez-vous à la console Amazon SNS.

  2. Dans le panneau de navigation, choisissez Rubriques.

  3. Sur la page Rubriques, choisissez une rubrique.

  4. Sur la page MaRubrique, sur la page Souscriptions, choisissez Créer un abonnement.

  5. Sur la page Créer un abonnement, dans la section Détails , procédez comme suit :

    1. Vérifiez la valeur de ARN de la rubrique.

    2. Pour Protocole, choisissez Amazon SQS.

    3. Pour Point de terminaison, saisissez l'ARN d'une file d'attente Amazon SQS.

    4. Choisissez Create Subscription (Créer un abonnement).

    Lorsque l'abonnement est confirmé, le champ ID de l'abonnement de votre nouvel abonnement affiche son ID d'abonnement. Si le propriétaire de la file d'attente crée l'abonnement, ce dernier est automatiquement confirmé et l'abonnement doit être actif presque immédiatement.

    En général, vous abonnez votre propre file d'attente à votre propre rubrique dans votre propre compte. Cependant, vous pouvez également abonner une file d'attente d'un autre compte à votre rubrique. Si l'utilisateur qui crée l'abonnement n'est pas le propriétaire de la file d'attente (par exemple, si un utilisateur du compte A abonne une file d'attente du compte B à une rubrique du compte A), l'abonnement doit être confirmé. Pour plus d'informations sur l'abonnement d'une file d'attente d'un autre compte et la confirmation de l'abonnement, consultez la page Envoi de messages Amazon SNS à une file d'attente Amazon SQS d'un autre compte.

Étape 4 : autoriser les utilisateurs à accéder aux actions appropriées sur la rubrique et la file d'attente

Vous devez utiliser AWS Identity and Access Management (IAM) pour autoriser uniquement les utilisateurs appropriés à effectuer une publication dans la rubrique Amazon SNS et à lire/supprimer des messages à partir de la file d'attente Amazon SQS. Pour plus d'informations sur le contrôle des actions sur les rubriques et les files d'attente pour les utilisateurs IAM, consultezUtilisation de politiques basées sur l'identité avec Amazon SNS et Gestion des identités et des accès dans Amazon SQS dans le Guide du développeur Amazon Simple Queue Service.

Il existe deux façons de contrôler l'accès à une rubrique ou une file d'attente :

  • Ajoutez une politique à un utilisateur ou un groupe IAM. La façon la plus simple d'accorder à des utilisateurs des autorisations d'accès à des rubriques ou des files d'attente consiste à créer un groupe et à lui ajouter la politique appropriée, puis à ajouter des utilisateurs à ce groupe. Il est beaucoup plus facile d'ajouter ou de supprimer des utilisateurs dans un groupe que de suivre les politiques que vous définissez pour des utilisateurs individuels.

  • Ajoutez une politique à une rubrique ou une file d'attente. Si vous souhaitez accorder des autorisations d'accès à une rubrique ou une file d'attente à un autre compte AWS, la seule façon de procéder consiste à ajouter une politique dont le principal est le compte Compte AWS auquel vous voulez octroyer des autorisations.

Vous devez utiliser la première méthode dans la plupart des cas (appliquer des politiques à des groupes et gérer les autorisations accordées aux utilisateurs en ajoutant ou supprimant les utilisateurs appropriés dans les groupes). Si vous avez besoin d'accorder des autorisations à un utilisateur d'un autre compte, vous devez utiliser la seconde méthode.

Ajout d'une politique à un utilisateur ou un groupe IAM

Si vous avez ajouté la politique suivante à un utilisateur ou un groupe IAM, vous devez accorder à cet utilisateur ou aux membres de ce groupe l'autorisation d'effectuer l'action sns:Publish sur la rubrique MaRubrique.

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

Si vous avez ajouté la politique suivante à un utilisateur ou un groupe IAM, vous devez accorder à cet utilisateur ou aux membres de ce groupe l'autorisation d'effectuer les actions sqs:ReceiveMessage et sqs:DeleteMessage sur les files d'attente MyQueue1 et 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" ] } ] }

Ajout d'une politique à une rubrique ou une file d'attente

Les exemples de politiques suivants montrent comment accorder à un autre compte des autorisations d'accès à une rubrique et une file d'attente.

Note

Lorsque vous accordez à un autre compte Compte AWS l'accès à une ressource de votre compte, vous permettez également aux utilisateurs IAM disposant d'autorisations d'accès de niveau administrateur (accès générique) d'accéder à cette ressource. Tous les autres utilisateurs IAM de l'autre compte se voient automatiquement refuser l'accès à votre ressource. Si vous voulez accorder à des utilisateurs IAM spécifiques de ce compte Compte AWS l'accès à votre ressource, le compte ou un utilisateur IAM disposant d'un accès de niveau administrateur doit déléguer des autorisations pour la ressource à ces utilisateurs IAM. Pour plus d'informations sur la délégation entre comptes, consultez la section Activation d'accès entre comptes du guide Utilisation d'IAM.

Si vous avez ajouté la politique suivante à une rubrique MyTopic dans le compte 123456789012, vous devez accorder au compte 111122223333 l'autorisation d'effectuer l'action sns:Publish sur cette rubrique.

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

Si vous avez ajouté la politique suivante à une file d'attente MyQueue dans le compte 123456789012, vous devez accorder au compte 111122223333 l'autorisation d'effectuer les actions sqs:ReceiveMessage et sqs:DeleteMessage sur cette file d'attente.

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

Étape 5 : Tester les abonnements de la file d'attente à une rubrique

Vous pouvez tester les abonnements d'une file d'attente à une rubrique en effectuant une publication dans la rubrique et en affichant le message que la rubrique envoie à la file d'attente.

Pour effectuer une publication dans une rubrique à l'aide de la console Amazon SNS

  1. En utilisant les informations d'identification du compte Compte AWS ou de l'utilisateur IAM disposant d'une autorisation de publication dans la rubrique, connectez-vous à AWS Management Console et ouvrez la console Amazon SNS à l'adresse https://console.aws.amazon.com/sns/.

  2. Dans le panneau de navigation, sélectionnez la rubrique et choisissez Publier dans la rubrique.

  3. Dans la zone Sujet, entrez un objet (par exemple, Testing publish to queue). Dans la zone Message, saisissez du texte (par exemple, Hello world!) et choisissez Publier un message. Le message suivant s'affiche : Votre message a été publié.

Pour afficher le message à partir de la rubrique à l'aide de la console Amazon SQS

  1. Servez-vous des informations d'identification du compte Compte AWS ou de l'utilisateur IAM disposant des autorisations permettant d'afficher des messages dans la file d'attente, pour vous connecter à la AWS Management Console et ouvrez la console Amazon SQS à l'adresse https://console.aws.amazon.com/sqs/.

  2. Cochez la case correspondant à la file d'attente qui est abonnée à la rubrique.

  3. Dans la zone de liste déroulante Actions sur la file d'attente, sélectionnez Afficher/Supprimer des messages, puis choisissez Commencer la recherche de messages. Un message de type Notification s'affiche.

  4. Dans la colonne Corps, choisissez Plus de détails. La zone Détails des messages contient un document JSON qui inclut l'objet et le message que vous avez publiés dans la rubrique. Le message se présente comme le document JSON suivant.

    { "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. Choisissez Fermer. Vous venez d'effectuer une publication dans une rubrique qui envoie des messages de notification à une file d'attente.