sia*_*ian 8 java amazon-sqs amazon-web-services amazon-cloudtrail
我有一个队列,只要我在其中发送一些消息,就会从中读取消息。我没有配置死信队列,所以如果处理发送的消息产生异常,消息应该总是在那里。
我的代码是一个 SpringBootApplication,它侦听该队列并在发送一些错误消息时产生异常。侦听是通过 JMS 侦听器完成的。
更改队列名称后,相同的消息会一直存在,直到我手动删除它。但是在之前的队列中它被删除了,据我所知,我发现这真的很奇怪,因为我没有在任何地方运行我的服务。
我需要找出谁正在从我的 SQS 读取和删除消息。(IP 地址、AWS 凭证或其他东西)有办法吗?我听说过 CloudTrail 并试图弄清楚。
您提到了CloudTrail,这确实是识别 IP 和身份的正确服务。
也就是说,我强烈建议您也检查您的队列权限。您可以在 AWS 控制台中通过查看 SQS 队列并单击访问策略选项卡来执行此操作。在此示例中,用户jbezos有权接收和删除消息。有关这些权限值的详细信息位于权限参考中
{
"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"
}
]
}
Run Code Online (Sandbox Code Playgroud)
另一个有价值的信息来源是您的IAM(身份和访问管理)服务。在这里,您可以查看用户和角色的最后活动。
有了有关 IAM 用户或角色已处于活动状态并且具有删除消息所需权限的信息,您也许能够确定原因。
定期进行此类练习是确保访问保持在适当水平的好方法。许多人惊讶地发现剩余项目中的角色或帐户仍然处于活动状态。