8

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

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

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

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

4

1 回答 1

0

您提到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"
    }
  ]
}

另一个有价值的信息来源是您的IAM(身份和访问管理)服务。在这里,您可以查看用户和角色的最后一个活动。

掌握了有关 IAM 用户或角色已处于活动状态以及具有删除消息所需权限的信息,您或许能够确定原因。

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

于 2021-02-13T20:36:52.490 回答