如何找出哪台机器一直在读取和删除 SQS 队列中的消息

How to find out which machine keeps reading and deleting messages from an SQS queue

我有一个 SQS 队列和几台从中读取数据的机器。虽然我已经关闭了所有这些,但仍然有人继续从队列中读取和删除消息。

有什么方法可以找到从 SQS 队列读取消息的机器的 ip 号。

谢谢

不,您无法获取执行这些操作的 IP 或 EC2 实例,但您可以采取一些步骤来尝试缩小消耗消息的范围。


CloudTrail 只会将以下操作记录到 SQS:

  • 添加权限
  • 创建队列
  • 删除队列
  • 清除队列
  • 删除权限
  • 设置队列属性

这意味着消息的消费者未被记录,意味着 CloudTrail 无法为您回答这个问题。

您可以使用 IAM 控制台尝试隔离正在访问 SQS 服务的用户或角色。这不会将其缩小到哪个队列,但总比没有好。您可以在 Access Advisor 选项卡下查看每个 user/role 是否正在使用 SQS。

如果这还不足以缩小范围,那么您可能不得不向 SQS 队列添加策略以开始阻止 users/roles 从该特定队列获取消息。这将是一个猜测和检查的游戏。或者,您可以锁定队列,这样只有特定的用户或角色才能从队列中读取。

如果您为此队列使用 cross-account-access,则上述步骤将不会有用,因为您将无法获得相同级别的可见性。此外,如果许多不同的服务器或应用程序使用相同的角色或用户,这种方法也将不起作用。如果是这种情况,这将是开始应用最小特权的好时机,因为它可以帮助解决这些类型的问题。

您可以在您的消息消费应用程序中编写一个程序来 运行 这里的一些查询 https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-metadata.html 然后将例如实例 ID 记录到您知道可以选择的某个地方它了。

但是如果您不知道在哪里部署此代码(因为您不知道正在使用消息的 machine/group),这是多余的。

我建议在 SQS 管理控制台(队列操作 > 发送消息)中手动创建一条消息,并创建一条消息,以便您知道您的消费者应用程序会抛出错误(即格式错误或其他) .然后搜索错误的相关位置 - 这有望让您检测到是哪台机器抛出的。