J'ai lancé un appel d'API Amazon Simple Queue Service (Amazon SQS) et l'erreur « AccessDenied » s’est produite.
Brève description
Lorsque je lance un appel d'API Amazon SQS, des erreurs « AccessDenied » ou « AccessDeniedException » similaires aux suivantes se produisent :
« Une erreur (AccessDenied) s'est produite lors de l'appel de l'opération SendMessage : L'accès à la ressource https://sqs.us-east-1.amazonaws.com/ est refusé. »
-ou-
« Une erreur (KMS.AccessDeniedException) s'est produite lors de l'appel de l'opération SendMessage : L'utilisateur : arn:aws:iam::xxxxx:user/xxxx n'est pas autorisé à exécuter : kms:GenerateDataKey sur la ressource : arn:aws:kms:us-east-1:xxxx:key/xxxx avec un refus explicite. »
Résolution
Stratégie d'accès Amazon SQS et politique IAM
Remarque : si des erreurs se produisent lorsque vous exécutez des commandes de l'interface de la ligne de commande AWS (AWS CLI), reportez-vous à Résoudre les erreurs de l'interface de la ligne de commande AWS. Assurez-vous également d’utiliser la version la plus récente de l'AWS CLI.
-
La stratégie d'accès SQS ou la politique AWS Identity and Access Management (IAM) doivent inclure des autorisations explicites d'accès à l'action.
-
Il est recommandé d'accorder le moindre privilège uniquement aux autorisations requises pour effectuer une tâche. Pour plus d'informations, reportez-vous à Appliquer des autorisations de moindre privilège.
-
Si la file d'attente SQS se trouve dans un autre compte, la stratégie d'accès SQS et la politique IAM doivent autoriser explicitement l'accès.
Important : un refus explicite dans les politiques remplace une autorisation explicite.
-
Si la politique utilise un élément de condition, vérifiez que la condition restreint l'accès.
-
Si l'utilisateur ou le rôle relève d’une organisation AWS Organizations qui utilise des SCP, vérifiez que le SCP ne bloque pas l'utilisateur ou le rôle.
Pour confirmer l'identité IAM utilisée pour effectuer des appels d'API, exécutez la commande get-caller-identity de l'AWS CLI :
aws sts get-caller-identity
Pour plus d'informations sur les autorisations d'accès Amazon SQS, reportez-vous à Quelles sont les autorisations nécessaires pour accéder à une file d'attente Amazon SQS ?
Autorisations AWS Key Management Service (AWS KMS)
Si le chiffrement côté serveur (SSE) est activé dans votre file d'attente Amazon SQS, les autorisations doivent être accordées aux producteurs et aux consommateurs. Les autorisations requises sont fournies avec une clé AWS KMS gérée par AWS ou une clé gérée par le client. Une stratégie de clé gérée par le client doit inclure des autorisations d'accès pour les producteurs et consommateurs de files d'attente. Vous pouvez aussi mettre à jour la politique IAM pour inclure les autorisations AWS KMS requises pour la clé AWS KMS.
Pour accéder à une file d'attente SSE Amazon SQS à partir d’un autre compte, cette file d'attente doit utiliser une clé gérée par le client. Vous ne pouvez pas utiliser de clé gérée par AWS, car seules les politiques relatives aux clés gérées par le client peuvent être modifiées. La stratégie de clé AWS KMS doit autoriser l'accès entre comptes à la clé AWS KMS. La politique IAM doit inclure les autorisations d'accès à la clé AWS KMS.
Pour plus d'informations, reportez-vous à Gestion des clés.
Politique relative aux points de terminaison d'un VPC
Si vous accédez à SQS par le biais d'un point de terminaison Amazon Virtual Private Cloud (Amazon VPC), la politique de point de terminaison SQS VPC doit en autoriser l'accès.
Cet exemple de politique de point de terminaison d'un VPC indique que l'utilisateur IAM MyUser est autorisé à envoyer des messages à la file d'attente SQS MyQueue. Les autres actions, utilisateurs IAM et ressources SQS se voient refuser l'accès via le point de terminaison VPC.
{
"Statement": [
{
"Action": [
"sqs:SendMessage"
],
"Effect": "Allow",
"Resource": "arn:aws:sqs:us-east-2:123456789012:MyQueue",
"Principal": {
"AWS": "arn:aws:iam:123456789012:user/MyUser"
}
}
]
}
Remarque : vous ne pouvez utiliser des VPC qu'avec des points de terminaison Amazon SQS HTTPS.
Autorisations de console SQS
Pour afficher les files d'attente et les attributs SQS depuis la console SQS, les utilisateurs doivent être autorisés à exécuter les actions ListQueues et GetQueueAttributes :
{
"Sid": "Statement1",
"Effect": "Allow",
"Action": [
"sqs:ListQueues",
"sqs:GetQueueAttributes"
],
"Resource": "*"
}
Remarque : vous ne pouvez pas utiliser l'action de l'API ListQueues avec des files d'attente spécifiques. L'API ListQueues doit être appliquée à la ressource « * » ou à « arn:aws:sqs:region:account_id:* ».
Politique de refus de toutes les files d'attente
Vous risquez de perdre l'accès à la file d'attente SQS si une politique de refus totale est ajoutée, comme dans l'exemple suivant :
{
"Sid": "deny-sqs-actions",
"Effect": "Deny",
"Principal": "*",
"Action": "SQS:*",
"Resource": "queueName"
}
Si vous avez perdu l'accès à la file d'attente SQS, utilisez les informations d'identification de l'utilisateur root pour accéder à la file d'attente et supprimez la politique de refus de tout. Pour plus d'informations, reportez-vous à Comment résoudre et prévenir les problèmes d'accès aux files d'attente Amazon SQS lors de l'utilisation d'une politique de refus des files d'attente ?
Informations connexes
Tutoriel : Envoyer un message à une file d'attente Amazon SQS depuis Amazon Virtual Private Cloud
Autorisations d'API Amazon SQS : Actions et référence de ressources