我有一个队列,一旦我在其中发送一些消息,就会从该队列中读取消息。我尚未配置“死信队列”,因此如果处理发送的消息产生异常,则消息应始终存在。
我的代码是SpringBootApplication,它侦听该队列并在发送错误消息时产生Exception。监听是通过JMS监听器完成的。
更改队列名称后,相同的消息会保留在那里,直到我手动将其删除为止。但是在以前的队列中,它被删除了,据我所知,我发现这确实很奇怪,原因是我没有在任何地方运行我的服务。
我需要找出谁正在读取和删除我的SQS中的消息。 (IP地址,AWS凭证等)有办法吗? 我听说过CloudTrail并试图弄清楚。
答案 0 :(得分:1)
是的,AWS CloudTrail是必经之路。
来自Logging Amazon SQS API Calls Using AWS CloudTrail - Amazon Simple Queue Service:
Amazon SQS与 AWS CloudTrail 集成,该服务提供用户,角色或AWS服务进行的Amazon SQS调用记录。 CloudTrail将与Amazon SQS队列相关的API调用捕获为事件,包括来自Amazon SQS控制台的调用和来自Amazon SQS API的代码调用。
如果消息消失得很快,我建议您查看是否有 AWS Lambda函数被触发从Amazon SQS队列运行。它可以非常快速地消耗消息。
答案 1 :(得分:0)
您提到了 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"
}
]
}
此处的另一个有价值的信息来源是您的 IAM (Identity and Access Management) 服务。在这里,您可以查看用户和角色的最后一个活动。
掌握了有关 IAM 用户或角色的信息已处于活动状态,并且具有删除消息所需的权限,您或许能够确定原因。
定期进行此类练习是确保将访问权限保持在适当级别的好方法。许多人惊讶地发现,遗留项目中的角色或帐户仍处于活动状态。