Cas d'exemple pour le contrôle d'accès Amazon SNS - Amazon Simple Notification Service

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Cas d'exemple pour le contrôle d'accès Amazon SNS

Cette section décrit quelques exemples de cas d'utilisation standard du contrôle d'accès.

Autoriser l'accès Compte AWS à une rubrique

Supposons que vous disposiez d'une rubrique dans le système Amazon SNS. Dans le cas le plus simple, vous voulez autoriser un ou plusieurs comptes Comptes AWS à accéder à une action de rubrique spécifique (par exemple, Publish).

Pour ce faire, utilisez l'action d'API Amazon SNS AddPermission. Elle prend une rubrique, une liste d'ID de Compte AWS, une liste des actions et une étiquette, et crée automatiquement une nouvelle instruction dans la politique de contrôle d'accès de la rubrique. Dans ce cas, vous n'écrivez pas de politique vous-même, car Amazon SNS génère automatiquement la nouvelle instruction de politique. Vous pouvez supprimer l'instruction de politique ultérieurement en appelant RemovePermission avec son étiquette.

Par exemple, si vous avez appelé le AddPermission sujet arn:aws:sns:us-east- 2:444455556666 :MyTopic, avec l'ID 1111-2222-3333, l'action et l'étiquette, Amazon SNS générera Publish et insérera la déclaration de Compte AWS politique de contrôle d'accès suivante : grant-1234-publish

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

Une fois que cette instruction est ajoutée, l'utilisateur avec Compte AWS 1111-2222-3333 peut publier des messages dans la rubrique.

Limiter les abonnements à HTTPS

Dans l'exemple suivant, vous limitez le protocole de transmission des notifications à HTTPS.

Vous devez savoir comment écrire votre propre politique pour la rubrique, car l'action Amazon SNS AddPermission ne vous permet pas de spécifier une restriction de protocole lorsque vous autorisez un utilisateur à accéder à votre rubrique. Dans ce cas, vous souhaitez écrire votre propre politique, puis utiliser l'action SetTopicAttributes pour définir l'attribut Policy de la rubrique sur votre nouvelle politique.

L'exemple suivant de politique complète donne à l'ID de compte Compte AWS 1111-2222-3333 la possibilité de s'abonner à des notifications à partir d'une rubrique.

{ "Statement": [{ "Sid": "Statement1", "Effect": "Allow", "Principal": { "AWS": "111122223333" }, "Action": ["sns:Subscribe"], "Resource": "arn:aws:sns:us-east-2:444455556666:MyTopic", "Condition": { "StringEquals": { "sns:Protocol": "https" } } }] }

Publier des messages dans une file d'attente Amazon SQS

Dans ce cas d'utilisation, vous souhaitez publier des messages provenant de votre rubrique dans la file d'attente Amazon SQS. A l'instar d'Amazon SNS, Amazon SQS utilise le langage de politique de contrôle d'accès d'Amazon. Pour autoriser Amazon SNS à envoyer des messages, vous devez utiliser l'action Amazon SQS SetQueueAttributes pour définir une politique sur la file d'attente.

Là encore, vous aurez besoin de savoir comment écrire votre propre politique, car l'action Amazon SQS AddPermission ne crée pas d'instructions de politique avec des conditions.

Note

L'exemple présenté ci-dessous est une politique Amazon SQS (contrôlant l'accès à votre file d'attente), et non une politique Amazon SNS (contrôlant l'accès à votre rubrique). Les actions sont des actions Amazon SQS et la ressource est l'Amazon Resource Name (ARN) de la file d'attente. Vous pouvez déterminer l'ARN de la file d'attente en récupérant l'attribut QueueArn de la file d'attente avec l'action GetQueueAttributes.

{ "Statement": [{ "Sid": "Allow-SNS-SendMessage", "Effect": "Allow", "Principal": { "Service": "sns.amazonaws.com" }, "Action": ["sqs:SendMessage"], "Resource": "arn:aws:sqs:us-east-2:444455556666:MyQueue", "Condition": { "ArnEquals": { "aws:SourceArn": "arn:aws:sns:us-east-2:444455556666:MyTopic" } } }] }

Cette politique utilise la condition aws:SourceArn pour limiter l'accès à la file d'attente en fonction de la source du message envoyé à la file d'attente. Vous pouvez utiliser ce type de politique pour permettre à Amazon SNS d'envoyer des messages à votre file d'attente uniquement si les messages proviennent de l'une de vos propres rubriques. Dans ce cas, vous spécifiez un de vos sujets en particulier, dont l'ARN est arn:aws:sns:us-east- 2:444455556666 :. MyTopic

La politique précédente constitue un exemple de politique Amazon SQS que vous pouvez écrire et ajouter à une file d'attente spécifique. Il accorderait l'accès à Amazon SNS et à d'autres services AWS. Amazon SNS accorde une politique par défaut à toutes les rubriques nouvellement créées. La politique par défaut accorde l'accès à votre rubrique à tous les autres services AWS. Cette politique par défaut utilise une condition aws:SourceArn pour s'assurer que les services AWS accèdent à votre rubrique uniquement pour le compte de ressources AWS que vous possédez.

Autoriser les notifications d'évènements Amazon S3 à publier dans une rubrique

Dans ce cas, vous souhaitez configurer une politique de rubrique afin que le compartiment Amazon S3 d'un autre compte Compte AWS puisse effectuer une publication dans votre rubrique. Pour plus d'informations sur la publication de notifications à partir d'Amazon S3, accédez à la page Configuration de la notification des évènements de compartiment.

Cet exemple suppose que vous écriviez votre propre politique et utilisiez ensuite l'action SetTopicAttributes pour définir l'attribut Policy de la rubrique sur votre nouvelle politique.

L'exemple de déclaration suivant utilise la condition SourceAccount pour s'assurer que seul le compte propriétaire Amazon S3 peut accéder à la rubrique. Dans cet exemple, le propriétaire de la rubrique est 111122223333 et le propriétaire Amazon S3 est 444455556666. L'exemple indique que tout compartiment Amazon S3 appartenant à 444455556666 est autorisé à publier sur. MyTopic

{ "Statement": [{ "Effect": "Allow", "Principal": { "Service": "s3.amazonaws.com" }, "Action": "sns:Publish", "Resource": "arn:aws:sns:us-east-2:111122223333:MyTopic", "Condition": { "StringEquals": { "AWS:SourceAccount": "444455556666" } } }] }

Lors de la publication d'évènements sur Amazon SNS, les services suivants prennent en charge aws:SourceAccount :

  • Amazon API Gateway

  • Amazon CloudWatch

  • Amazon DevOps Guru

  • Amazon ElastiCache

  • Amazon GameLift

  • API SMS et Voix Amazon Pinpoint

  • Amazon RDS

  • Amazon Redshift

  • Amazon S3 Glacier

  • Amazon SES

  • Amazon Simple Storage Service

  • AWS CodeCommit

  • AWS Directory Service

  • AWS Lambda

  • AWS Systems Manager Incident Manager

Autoriser Amazon SES à publier sur une rubrique appartenant à un autre compte

Vous pouvez autoriser un autre service AWS à publier sur une rubrique appartenant à un autre Compte AWS. Supposons que vous vous êtes connecté au compte 111122223333, que vous avez ouvert Amazon SES et que vous avez créé un e-mail. Pour publier des notifications concernant cet e-mail dans une rubrique Amazon SNS appartenant au compte 444455556666, vous devez créer une politique comme la suivante. Pour ce faire, vous devez fournir des informations sur le principal (l'autre service) et sur la propriété de chaque ressource. L'instruction Resource fournit l'ARN de rubrique, qui inclut l'ID de compte du propriétaire de la rubrique, 444455556666. L'instruction "aws:SourceOwner": "111122223333" spécifie que votre compte est propriétaire de l'e-mail.

{ "Version": "2008-10-17", "Id": "__default_policy_ID", "Statement": [ { "Sid": "__default_statement_ID", "Effect": "Allow", "Principal": { "Service": "ses.amazonaws.com" }, "Action": "SNS:Publish", "Resource": "arn:aws:sns:us-east-2:444455556666:MyTopic", "Condition": { "StringEquals": { "aws:SourceOwner": "111122223333" } } } ] }

Lors de la publication d'évènements sur Amazon SNS, les services suivants prennent en charge aws:SourceOwner :

  • Amazon API Gateway

  • Amazon CloudWatch

  • Amazon DevOps Guru

  • Amazon ElastiCache

  • Amazon GameLift

  • API SMS et Voix Amazon Pinpoint

  • Amazon RDS

  • Amazon Redshift

  • Amazon SES

  • AWS CodeCommit

  • AWS Directory Service

  • AWS Lambda

  • AWS Systems Manager Incident Manager

aws:SourceAccount par rapport à aws:SourceOwner

Important

aws:SourceOwner est obsolète et les nouveaux services peuvent s’intégrer à Amazon SNS uniquement via aws:SourceArn et aws:SourceAccount. Amazon SNS assure toujours la rétrocompatibilité des services existants qui prennent actuellement en charge aws:SourceOwner.

Les clés de condition aws:SourceAccount et aws:SourceOwner sont chacune définies par certains Services AWS lorsqu'ils publient dans une rubrique Amazon SNS. Lorsqu'elle est prise en charge, la valeur sera la valeur à 12 chiffres de l'ID de compte AWS au nom duquel le service publie des données. Certains services prennent en charge l'un et d'autres prennent en charge l'autre.

Autoriser les comptes d'une organisation dans AWS Organizations à publier dans une rubrique d'un autre compte

Le service AWS Organizations vous aide à gérer la facturation, à contrôler l'accès et la sécurité et à partager les ressources de manière centralisée dans l'ensemble de vos comptes Comptes AWS.

Vous pouvez trouver votre ID d'organisation dans la console Organisations. Pour plus d'informations, consultez Affichage des détails d'une organisation à partir du compte de gestion.

Dans cet exemple, n'importe quel compte Compte AWS de l'organisation myOrgId peut publier dans la rubrique Amazon SNS MyTopic dans le compte 444455556666. La politique vérifie la valeur de l'ID de l'organisation à l'aide de la clé de condition globale aws:PrincipalOrgID.

{ "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "*" }, "Action": "SNS:Publish", "Resource": "arn:aws:sns:us-east-2:444455556666:MyTopic", "Condition": { "StringEquals": { "aws:PrincipalOrgID": "myOrgId" } } } ] }

Autoriser la publication de n'importe quelle CloudWatch alarme dans un sujet d'un autre compte

Dans ce cas, toutes les CloudWatch alarmes associées au compte 111122223333 peuvent être publiées sur une rubrique Amazon SNS associée au compte. 444455556666

{ "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "*" }, "Action": "SNS:Publish", "Resource": "arn:aws:sns:us-east-2:444455556666:MyTopic", "Condition": { "ArnLike": { "aws:SourceArn": "arn:aws:cloudwatch:us-east-2:111122223333:alarm:*" } } } ] }

Limiter la publication à une rubrique Amazon SNS uniquement à partir d'un point de terminaison de VPC spécifique

Dans ce cas, la rubrique dans le compte 444455556666 est autorisée à publier uniquement à partir du point de terminaison de VPC avec l'ID vpce-1ab2c34d.

{ "Statement": [{ "Effect": "Deny", "Principal": "*", "Action": "SNS:Publish", "Resource": "arn:aws:sns:us-east-2:444455556666:MyTopic", "Condition": { "StringNotEquals": { "aws:sourceVpce": "vpce-1ab2c34d" } } }] }