如何排查和防止使用拒绝队列策略时的 Amazon SQS 队列访问问题?

上次更新日期:2021 年 7 月 29 日

由于使用了拒绝队列策略,我失去了对 Amazon Simple Queue Service (Amazon SQS) 队列的访问权限。如何重新获得对 Amazon SQS 队列的访问权限,以及如何防止再次失去访问权限?

简短描述

如果由于拒绝队列策略而失去对 Amazon SQS 队列的访问,则可以尝试使用 AWS 账户根用户凭证访问队列。或者,尝试使用从策略中排除的实体访问队列(如适用)。

还可以遵循一些最佳实践,以防止在使用拒绝队列策略时失去对 Amazon SQS 队列的访问权限。

以下拒绝策略示例拒绝所有 IAM 实体访问所有 Amazon SQS 队列操作:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "deny-sqs-actions",
      "Effect": "Deny",
      "Principal": "*",
      "Action": "SQS:*",
      "Resource": "queueName"
    }
  ]
}

解决方法

排查 Amazon SQS 队列访问权限问题

如果在 Amazon SQS 访问策略中使用拒绝策略时失去对 Amazon SQS 队列的访问权限,请尝试以下步骤:

  1. 使用根用户凭证访问队列。账户拥有者根用户凭证允许完全访问账户中的所有资源。这其中包括删除与 Amazon SQS 队列关联的全部拒绝资源策略。
  2. 如果拒绝策略仅限于特定实体,则尝试获取对策略中排除的实体的访问权限。注意:验证排除的实体是否具有访问队列所需的权限。

如果无法使用根用户凭证,或者不确定哪些实体被排除在拒绝策略之外,请联系 AWS Support。创建支持案例并提供以下信息:

  1. 确认您曾尝试使用根用户凭证访问 Amazon SQS 队列。提供无法使用根用户凭证的原因,或者使用根用户凭证无法解决问题的原因。
  2. 确认您是队列拥有者
  3. 提供需要队列访问权限的详细原因。

避免失去对 Amazon SQS 队列的访问权限

为防止失去对 Amazon SQS 队列的访问权限,在队列访问策略中使用拒绝策略时,请遵循以下最佳实践。

  1. 请勿显式拒绝根用户账户,否则您可能会完全失去对队列的访问权限。
  2. 使用“拒绝”策略旁边的“允许”策略,以确保仍然有实体可以获得对队列的访问权限。注意允许策略优先于包含显式拒绝的拒绝策略。有关更多信息,请参阅授权

包括允许拒绝语句的策略示例:

{
   "Version": "2012-10-17",
   "Id": "Queue1_Policy_UUID",
   "Statement": [{
      "Sid":"Queue1_Allow_Access",
      "Effect": "Allow",
      "Principal": {"AWS": "arn:aws:iam::111122223333:user/User1"},
      "Action": “sqs:*",
      "Resource": "queueName"
   }, {
      "Sid":"Queue1_Deny_Access",
      "Effect": "Deny",
      “NotPrincipal": {"AWS": "arn:aws:iam::111122223333:user/User1"},
      "Action": "sqs:*",
      "Resource": "queueName"
   }]
}

此策略示例实现了以下功能:

  • 允许特定 IAM 用户 (User1) 访问指定 Amazon SQS 队列上的所有 Amazon SQS 操作。
  • 拒绝对指定 IAM 用户 (User1) 以外的所有主体的队列访问权限。

拒绝策略中的“NotPrincipal”不包括指定的主体。但是,还需要允许语句来向排除的主体授予访问权限。


这篇文章对您有帮助吗?


您是否需要账单或技术支持?