我有一个队列,只要我在其中发送一些消息,就会从该队列中读取消息。我没有配置死信队列,因此如果发送消息的处理产生异常,消息应该始终存在。
我的代码是一个 SpringBootApplication,它监听该队列并在发送错误消息时产生异常。监听是通过 JMS Listener 完成的。
更改队列名称后,相同的消息会保留在那里,直到我手动将其删除。但在之前的队列中,它被删除了,我觉得这很奇怪,因为据我所知,我没有在任何地方运行我的服务。
我需要找出谁正在阅读和删除我的 SQS 中的消息。 (IP 地址、AWS 凭证或其他东西)有办法吗? 我听说过 CloudTrail 并试图弄清楚它。
最佳答案
您提到CloudTrail ,这确实是这里识别IP和身份的正确服务。
也就是说,我强烈建议您也检查您的队列权限。您可以在 AWS 控制台中通过查看 SQS 队列并单击访问策略选项卡来执行此操作。在此示例中,用户jbezos
有权接收和删除消息。有关这些权限值的详细信息位于 permissions reference
{
"Version": "2008-10-17",
"Id": "__default_policy_ID",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::${AWS::AccountId}:jbezos"
},
"Action": [ "sqs:DeleteMessage", "sqs:ReceiveMessage"]
"Resource": "arn:aws:sqs:${AWS::Region}:${AWS::AccountId}:my-test-queue"
}
]
}
这里的另一个有值(value)的信息来源将在您的 IAM (Identity and Access Management) 中。服务。在这里,您可以查看用户和角色的最后 Activity 。
掌握有关 IAM 用户或角色已处于 Activity 状态且具有删除消息所需权限的信息,您也许能够确定原因。
定期进行此类练习是确保访问保持在适当水平的好方法。许多人惊讶地发现剩余项目中的角色或帐户仍然处于 Activity 状态。
关于java - 有没有办法找出谁在阅读我的 SQS 消息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56683442/