如何找出哪台机器继续从SQS队列中读取和删除消息

时间:2016-01-03 10:45:10

标签: amazon-web-services amazon-sqs

我有一个SQS队列和几个从它们读取的机器。虽然我关闭了所有这些,但是有人继续阅读并从队列中删除消息。

有没有办法找到从SQS队列中读取消息的机器的ip号。

由于

2 个答案:

答案 0 :(得分:2)

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

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

  • AddPermission
  • createQueue方法
  • DeleteQueue
  • PurgeQueue
  • RemovePermission
  • SetQueueAttributes

这意味着不会记录消息的使用者,这意味着CloudTrail无法为您回答此问题。

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

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

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

答案 1 :(得分:0)

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

这是多余的,但是如果您不知道将代码部署在哪里(因为您不知道使用消息的计算机/组),那么这是多余的。

我建议您在SQS管理控制台中手动创建消息(“队列操作”>“发送消息”),然后创建消息,以使您知道使用者应用程序将抛出错误(即格式错误或其他原因)。然后在相关位置搜索错误-希望这可以让您检测是哪台机器抛出了错误。