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.
Gestion de l'accès pour les files d'attente Amazon SQS chiffrées avec des politiques de moindre privilège
Vous pouvez utiliser Amazon SQS pour échanger des données sensibles entre les applications à l'aide du chiffrement côté serveur (SSE) intégré àAWS Key Management Service (KMS). Grâce à l'intégration d'Amazon SQS AWS KMS, vous pouvez gérer de manière centralisée les clés qui protègent Amazon SQS, ainsi que les clés qui protègent vos autres ressources. AWS
Plusieurs AWS services peuvent agir comme des sources d'événements qui envoient des événements à Amazon SQS. Pour permettre à une source d'événements d'accéder à la file d'attente cryptée Amazon SQS, vous devez configurer la file d'attente avec une clé gérée par le client AWS KMS . Utilisez ensuite la politique clé pour autoriser le service à utiliser les méthodes d' AWS KMS API requises. Le service requiert également des autorisations pour authentifier l'accès et permettre à la file d'attente d'envoyer des événements. Pour cela, vous pouvez utiliser une stratégie Amazon SQS, qui est basée sur les ressources que vous pouvez utiliser pour contrôler l'accès à la file d'attente Amazon SQS et à ses données.
Les sections suivantes fournissent des informations sur la façon de contrôler l'accès à votre file d'attente Amazon SQS chiffrée par le biais de la politique Amazon SQS et AWS KMS de la politique clé. Les stratégies décrites dans ce guide vous aideront à respecter le principe de moindre privilège.
Ce guide décrit également comment les stratégies basées sur les ressources résolvent le problème de député confus en utilisant les clés contextuelles de condition IAM globales aws:SourceArn
, aws:SourceAccount
et aws:PrincipalOrgID
.
Rubriques
Présentation
Dans cette rubrique, nous allons vous présenter un cas d'utilisation courant pour illustrer comment créer la stratégie de clé et la stratégie de file d'attente Amazon SQS. Ce cas d'utilisation est représenté dans l'image suivante.

Dans cet exemple, le producteur du message est une rubrique Amazon Simple Notification Service (SNS) configurée pour diffuser en éventail les messages vers votre file d'attente Amazon SQS chiffrée. Le consommateur de messages est un service informatique, tel qu'une AWS Lambdafonction, une instance Amazon Elastic Compute Cloud (EC2) ou un AWS Fargateconteneur. Votre file d'attente Amazon SQS est ensuite configurée pour envoyer les messages en échec à une file d'attente de lettres mortes (DLQ). Cela est utile pour le débogage de votre application ou de votre système de messagerie, car DLQs cela vous permet d'isoler les messages non consommés afin de déterminer pourquoi leur traitement a échoué. Dans la solution définie dans cette rubrique, un service de calcul tel qu'une fonction Lambda est utilisé pour traiter les messages stockés dans la file d'attente Amazon SQS. Si le destinataire du message se trouve dans un cloud privé virtuel (VPC), l'instruction de la stratégie DenyReceivingIfNotThroughVPCE incluse dans ce guide vous permet de limiter la réception des messages à ce VPC spécifique.
Note
Ce guide contient uniquement les autorisations IAM requises sous forme d'instructions de stratégie. Pour élaborer la politique, vous devez ajouter les instructions à votre politique Amazon SQS ou à votre politique AWS KMS clé. Ce guide ne fournit pas d'instructions sur la façon de créer la file d'attente Amazon SQS ou la AWS KMS clé. Pour savoir comment créer ces ressources, consultez les sections Création d'une file d'attente Amazon SQS et Création de clés.
La stratégie Amazon SQS définie dans ce guide ne permet pas de rediriger les messages directement vers la même file d'attente Amazon SQS ou vers une autre.
Stratégie de clé respectant le principe du moindre privilège pour Amazon SQS
Dans cette section, nous décrivons les autorisations de moindre privilège requises AWS KMS pour la clé gérée par le client que vous utilisez pour chiffrer votre file d'attente Amazon SQS. Avec ces autorisations, vous pouvez limiter l'accès aux seules entités prévues en implémentant le moindre privilège. La stratégie de clé doit comprendre les instructions de stratégie suivantes, que nous décrivons en détail ci-dessous :
Accorder des autorisations d'administrateur à la AWS KMS clé
Pour créer une AWS KMS clé, vous devez fournir des autorisations d' AWS KMS administrateur au rôle IAM que vous utilisez pour déployer la AWS KMS clé. Ces autorisations d'administrateur sont définies dans l'instruction de stratégie AllowKeyAdminPermissions
suivante. Lorsque vous ajoutez cette déclaration à votre politique AWS KMS clé, assurez-vous de la <admin-role ARN>
remplacer par le nom de ressource Amazon (ARN) du rôle IAM utilisé pour déployer la AWS KMS clé, gérer la AWS KMS clé, ou les deux. Il peut s'agir du rôle IAM de votre pipeline de déploiement ou du rôle d'administrateur de votre organisation dans AWS Organizations
{ "Sid": "AllowKeyAdminPermissions", "Effect": "Allow", "Principal": { "AWS": [ "
<admin-role ARN>
" ] }, "Action": [ "kms:Create*", "kms:Describe*", "kms:Enable*", "kms:List*", "kms:Put*", "kms:Update*", "kms:Revoke*", "kms:Disable*", "kms:Get*", "kms:Delete*", "kms:TagResource", "kms:UntagResource", "kms:ScheduleKeyDeletion", "kms:CancelKeyDeletion" ], "Resource": "*" }
Note
Dans une politique AWS KMS clé, la valeur de l'Resource
élément doit être*
, ce qui signifie « cette AWS KMS clé ». L'astérisque (*
) identifie la AWS KMS clé à laquelle la politique clé est attachée.
Accorde l'accès en lecture seule aux métadonnées de clés
Pour accorder à d'autres rôles IAM un accès en lecture seule à vos métadonnées de clés, ajoutez l'instruction AllowReadAccessToKeyMetaData
à votre stratégie de clé. Par exemple, l'instruction suivante vous permet de répertorier toutes les AWS KMS clés de votre compte à des fins d'audit. Cette instruction accorde à l'utilisateur AWS root un accès en lecture seule aux métadonnées clés. Par conséquent, tout principal IAM du compte peut avoir accès aux métadonnées de clés lorsque ses stratégies basées sur l'identité disposent des autorisations répertoriées dans l'instruction suivante : kms:Describe*
, kms:Get*
et kms:List*
. Assurez-vous de les remplacer <account-ID>
par vos propres informations.
{ "Sid": "AllowReadAcesssToKeyMetaData", "Effect": "Allow", "Principal": { "AWS": [ "arn:aws:iam::
<accountID>
:root" ] }, "Action": [ "kms:Describe*", "kms:Get*", "kms:List*" ], "Resource": "*" }
Accorder des autorisations KMS Amazon SNS à Amazon SNS pour la publication de messages dans la file d'attente
Pour permettre à votre rubrique Amazon SNS de publier des messages dans votre file d'attente Amazon SQS chiffrée, ajoutez l'instruction de stratégie AllowSNSToSendToSQS
à votre stratégie de clé. Cette déclaration accorde à Amazon SNS l'autorisation d'utiliser la AWS KMS clé pour publier dans votre file d'attente Amazon SQS. Assurez-vous de les remplacer <account-ID>
par vos propres informations.
Note
La déclaration Condition
in the limite l'accès au seul service Amazon SNS sur le même AWS compte.
{ "Sid": "AllowSNSToSendToSQS", "Effect": "Allow", "Principal": { "Service": [ "sns.amazonaws.com" ] }, "Action": [ "kms:Decrypt", "kms:GenerateDataKey" ], "Resource": "*", "Condition": { "StringEquals": { "aws:SourceAccount": "
<account-id>
" } } }
Permettre aux consommateurs de déchiffrer les messages de la file d'attente
L'instruction AllowConsumersToReceiveFromTheQueue
suivante accorde au consommateur de messages Amazon SQS les autorisations requises pour déchiffrer les messages reçus de la file d'attente Amazon SQS chiffrée. Lorsque vous joignez la déclaration de politique, remplacez-la <consumer's runtime role ARN>
par l'ARN du rôle d'exécution IAM du destinataire du message.
{ "Sid": "AllowConsumersToReceiveFromTheQueue", "Effect": "Allow", "Principal": { "AWS": [ "
<consumer's execution role ARN>
" ] }, "Action": [ "kms:Decrypt" ], "Resource": "*" }
Stratégie Amazon SQS du moindre privilège
Cette section décrit les stratégies de file d'attente Amazon SQS relatives au moindre privilège pour le cas d'utilisation couvert par ce guide (par exemple, Amazon SNS vers Amazon SQS). La stratégie définie est conçue pour empêcher tout accès involontaire en utilisant à la fois des instructions Deny
et Allow
. Les instructions Allow
donnent accès à l'entité ou aux entités prévues. Les instructions Deny
évitent que d'autres entités indésirables n'accèdent à la file d'attente Amazon SQS, tout en excluant l'entité prévue dans la condition de stratégie.
La stratégie Amazon SQS inclut les instructions suivantes, que nous décrivons en détail ci-dessous :
Restreindre les autorisations de gestion Amazon SQS
L'instruction de stratégie RestrictAdminQueueActions
suivante limite les autorisations de gestion Amazon SQS uniquement au(x) rôle(s) IAM que vous utilisez pour déployer la file d'attente, la gérer, ou les deux. Veillez à remplacer les <placeholder values>
par vos propres informations. Spécifiez l'ARN du rôle IAM utilisé pour déployer la file d'attente Amazon SQS, ainsi que celui de tous ARNs les rôles d'administrateur devant disposer d'autorisations de gestion Amazon SQS.
{ "Sid": "RestrictAdminQueueActions", "Effect": "Deny", "Principal": { "AWS": "*" }, "Action": [ "sqs:AddPermission", "sqs:DeleteQueue", "sqs:RemovePermission", "sqs:SetQueueAttributes" ], "Resource": "
<SQS Queue ARN>
", "Condition": { "StringNotLike": { "aws:PrincipalARN": [ "arn:aws:iam::<account-id>
:role/<deployment-role-name>
", "<admin-role ARN>
" ] } } }
Restreindre les actions de file d'attente Amazon SQS pour l'organisation spécifiée
Pour protéger vos ressources Amazon SQS contre tout accès externe (accès par une entité extérieure à votre organisation AWS), utilisez l'instruction suivante. Cette instruction limite l'accès à la file d'attente Amazon SQS pour l'organisation que vous spécifiez dans la Condition
. Assurez-vous de le <SQS queue ARN>
remplacer par l'ARN du rôle IAM utilisé pour déployer la file d'attente Amazon SQS, puis par <org-id>
l'ID de votre organisation.
{ "Sid": "DenyQueueActionsOutsideOrg", "Effect": "Deny", "Principal": { "AWS": "*" }, "Action": [ "sqs:AddPermission", "sqs:ChangeMessageVisibility", "sqs:DeleteQueue", "sqs:RemovePermission", "sqs:SetQueueAttributes", "sqs:ReceiveMessage" ], "Resource": "
<SQS queue ARN>
", "Condition": { "StringNotEquals": { "aws:PrincipalOrgID": [ "<org-id>
" ] } } }
Accorder des autorisations Amazon SQS aux consommateurs
Pour recevoir des messages de la file d'attente Amazon SQS, vous devez fournir les autorisations nécessaires au consommateur des messages. L'instruction de stratégie suivante accorde au consommateur spécifié les autorisations requises pour consommer les messages de la file d'attente Amazon SQS. Lorsque vous ajoutez cette déclaration à votre politique Amazon SQS, assurez-vous de la <consumer's IAM runtime role ARN>
remplacer par l'ARN du rôle d'exécution IAM utilisé par le consommateur et <SQS queue
ARN>
par l'ARN du rôle IAM utilisé pour déployer la file d'attente Amazon SQS.
{ "Sid": "AllowConsumersToReceiveFromTheQueue", "Effect": "Allow", "Principal": { "AWS": "
<consumer's IAM execution role ARN>
" }, "Action": [ "sqs:ChangeMessageVisibility", "sqs:DeleteMessage", "sqs:GetQueueAttributes", "sqs:ReceiveMessage" ], "Resource": "<SQS queue ARN>
" }
Pour éviter que d'autres entités ne reçoivent des messages de la file d'attente Amazon SQS, ajoutez l'instruction DenyOtherConsumersFromReceiving
à la stratégie de file d'attente Amazon SQS. Cette instruction limite la consommation des messages au consommateur spécifié et n'autorise aucun autre consommateur à y avoir accès, même lorsque ses autorisations d'identité l'y autorisent. Assurez-vous de remplacer <SQS queue ARN>
et <consumer’s
runtime role ARN>
par vos propres informations.
{ "Sid": "DenyOtherConsumersFromReceiving", "Effect": "Deny", "Principal": { "AWS": "*" }, "Action": [ "sqs:ChangeMessageVisibility", "sqs:DeleteMessage", "sqs:ReceiveMessage" ], "Resource": "
<SQS queue ARN>
", "Condition": { "StringNotLike": { "aws:PrincipalARN": "<consumer's execution role ARN>
" } } }
Application du chiffrement en transit
L'instruction de stratégie DenyUnsecureTransport
suivante oblige les consommateurs et les producteurs à utiliser des canaux sécurisés (connexions TLS) pour envoyer et recevoir des messages depuis la file d'attente Amazon SQS. Assurez-vous de le <SQS queue
ARN>
remplacer par l'ARN du rôle IAM utilisé pour déployer la file d'attente Amazon SQS.
{ "Sid": "DenyUnsecureTransport", "Effect": "Deny", "Principal": { "AWS": "*" }, "Action": [ "sqs:ReceiveMessage", "sqs:SendMessage" ], "Resource": "
<SQS queue ARN>
", "Condition": { "Bool": { "aws:SecureTransport": "false" } } }
Limiter la transmission de messages à une rubrique Amazon SNS spécifique
L'instruction de stratégie AllowSNSToSendToTheQueue
suivante permet à la rubrique Amazon SNS spécifiée d'envoyer des messages à la file d'attente Amazon SQS. Assurez-vous de le <SQS queue ARN>
remplacer par l'ARN du rôle IAM utilisé pour déployer la file d'attente Amazon SQS <SNS topic ARN>
et par l'ARN de la rubrique Amazon SNS.
{ "Sid": "AllowSNSToSendToTheQueue", "Effect": "Allow", "Principal": { "Service": "sns.amazonaws.com" }, "Action": "sqs:SendMessage", "Resource": "
<SQS queue ARN>
", "Condition": { "ArnLike": { "aws:SourceArn": "<SNS topic ARN>
" } } }
L'instruction de stratégie DenyAllProducersExceptSNSFromSending
suivante empêche les autres producteurs d'envoyer des messages à la file d'attente. Remplacez <SQS queue ARN>
et <SNS topic
ARN>
par vos propres informations.
{ "Sid": "DenyAllProducersExceptSNSFromSending", "Effect": "Deny", "Principal": { "AWS": "*" }, "Action": "sqs:SendMessage", "Resource": "
<SQS queue ARN>
", "Condition": { "ArnNotLike": { "aws:SourceArn": "<SNS topic ARN>
" } } }
(Facultatif) Restreindre la réception des messages au point de terminaison d'un VPC spécifique
Pour limiter la réception de messages au point de terminaison d'un VPC<SQS
queue ARN>
Remplacez-le par l'ARN du rôle IAM utilisé pour déployer la file d'attente Amazon SQS <vpce_id>
et par l'ID du point de terminaison VPC.
{ "Sid": "DenyReceivingIfNotThroughVPCE", "Effect": "Deny", "Principal": "*", "Action": [ "sqs:ReceiveMessage" ], "Resource": "
<SQS queue ARN>
", "Condition": { "StringNotEquals": { "aws:sourceVpce": "<vpce id>
" } } }
Instructions de stratégie Amazon SQS relatives à la file d'attente de lettres mortes
Ajoutez les instructions de stratégie suivantes, identifiées par leur ID d'instruction, à votre stratégie d'accès DLQ :
-
RestrictAdminQueueActions
-
DenyQueueActionsOutsideOrg
-
AllowConsumersToReceiveFromTheQueue
-
DenyOtherConsumersFromReceiving
-
DenyUnsecureTransport
Outre l'ajout des instructions de stratégie précédentes à votre stratégie d'accès DLQ, vous devez également ajouter une instruction pour restreindre la transmission de messages aux files d'attente Amazon SQS, comme décrit dans la section suivante.
Restreindre la transmission de messages vers des files d'attente Amazon SQS
Pour restreindre l'accès aux files d'attente Amazon SQS provenant du même compte, ajoutez l'instruction de stratégie DenyAnyProducersExceptSQS
suivante à la stratégie de file d'attente DLQ. Cette instruction ne limite pas la transmission de messages à une file d'attente spécifique, car vous devez déployer le DLQ avant de créer la file d'attente principale. Vous ne connaîtrez donc pas l'ARN Amazon SQS lorsque vous créerez le DLQ. Si vous devez limiter l'accès à une seule file d'attente Amazon SQS, modifiez aws:SourceArn
dans la Condition
avec l'ARN de votre file d'attente source Amazon SQS lorsque vous le connaîtrez.
{ "Sid": "DenyAnyProducersExceptSQS", "Effect": "Deny", "Principal": { "AWS": "*" }, "Action": "sqs:SendMessage", "Resource": "
<SQS DLQ ARN>
", "Condition": { "ArnNotLike": { "aws:SourceArn": "arn:aws:sqs:<region>
:<account-id>
:*" } } }
Important
Les stratégies de file d'attente Amazon SQS définies dans ce guide ne limitent pas l'action sqs:PurgeQueue
à un ou plusieurs rôles IAM spécifiques. L'action sqs:PurgeQueue
vous permet de supprimer tous les messages de la file d'attente Amazon SQS. Vous pouvez également utiliser cette action pour modifier le format du message sans remplacer la file d'attente Amazon SQS. Lors du débogage d'une application, vous pouvez effacer la file d'attente Amazon SQS pour supprimer les messages potentiellement erronés. Lorsque vous testez l'application, vous pouvez générer un volume élevé de messages dans la file d'attente Amazon SQS, puis purger la file d'attente pour repartir à zéro avant de passer à la production. La raison pour laquelle cette action n'est pas limitée à un certain rôle est que ce rôle peut ne pas être connu lors du déploiement de la file d'attente Amazon SQS. Vous devrez ajouter cette autorisation à la stratégie basée sur l'identité du rôle pour pouvoir purger la file d'attente.
Prévention des problèmes de député confus entre services
Le problème de député confus est un problème de sécurité dans lequel une entité qui n'a pas l'autorisation d'effectuer une action peut contraindre une entité plus privilégiée à effectuer cette action. Pour éviter cela, AWS fournit des outils qui vous aident à protéger votre compte si vous fournissez à des tiers (comptes croisés) ou à d'autres AWS services (appelés interservices) un accès aux ressources de votre compte. Les instructions de stratégie de cette section peuvent vous aider à éviter le problème de député confus entre services.
L'usurpation d'identité entre services peut se produire lorsqu'un service (le service appelant) appelle un autre service (le service appelé). Le service appelant peut être manipulé pour utiliser ses autorisations afin d'agir sur les ressources d'un autre client de sorte qu'il n'y aurait pas accès autrement. Pour éviter ce problème, les stratégies basées sur les ressources définies dans cet article utilisent les clés contextuelles de condition IAM globales aws:SourceArn
, aws:SourceAccount
et aws:PrincipalOrgID
. Cela limite les autorisations dont dispose un service pour une ressource spécifique, un compte spécifique ou une organisation spécifique dans AWS Organizations.
Utiliser IAM Access Analyzer pour examiner l'accès intercompte
Vous pouvez utiliser AWS IAM Access Analyzer pour examiner vos politiques de file d'attente Amazon SQS et vos politiques clés AWS KMS et vous avertir lorsqu'une file d'attente ou AWS KMS une clé Amazon SQS autorise l'accès à une entité externe. IAM Access Analyzer vous aide à identifier les ressources de votre organisation et de vos comptes partagés avec une entité située en dehors de la zone de confiance. Cette zone de confiance peut être un AWS compte ou l'organisation au sein d' AWS Organizations que vous spécifiez lorsque vous activez IAM Access Analyzer.
IAM Access Analyzer identifie les ressources partagées avec des acteurs externes en utilisant un raisonnement basé sur la logique pour analyser les politiques basées sur les ressources dans votre environnement. AWS Pour chaque instance d'une ressource qui est partagée en dehors de votre zone de confiance, Access Analyzer génère un résultat. Les résultats comprennent des renseignements sur l'accès et le principal externe à qui il est accordé. Révisez les résultats pour déterminer si l'accès est intentionnel et sûr, ou s'il est non intentionnel et représente un risque pour la sécurité. En cas d'accès involontaire, consultez la stratégie concernée et corrigez-la. Consultez ce billet de blog
Pour plus d'informations sur AWS IAM Access Analyzer, consultez la documentation d'AWS IAM Access Analyzer.