有没有办法找出谁在阅读我的SQS消息?

时间:2019-06-20 09:56:58

标签: java amazon-web-services amazon-sqs amazon-cloudtrail

我有一个队列,一旦我在其中发送一些消息,就会从该队列中读取消息。我尚未配置“死信队列”,因此如果处理发送的消息产生异常,则消息应始终存在。

我的代码是SpringBootApplication,它侦听该队列并在发送错误消息时产生Exception。监听是通过JMS监听器完成的。

更改队列名称后,相同的消息会保留在那里,直到我手动将其删除为止。但是在以前的队列中,它被删除了,据我所知,我发现这确实很奇怪,原因是我没有在任何地方运行我的服务。

我需要找出谁正在读取和删除我的SQS中的消息。 (IP地址,AWS凭证等)有办法吗? 我听说过CloudTrail并试图弄清楚。

2 个答案:

答案 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 用户或角色的信息已处于活动状态,并且具有删除消息所需的权限,您或许能够确定原因。

定期进行此类练习是确保将访问权限保持在适当级别的好方法。许多人惊讶地发现,遗留项目中的角色或帐户仍处于活动状态。