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

1 分钟阅读
0

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

简短描述

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

本文还介绍了需要遵循的最佳实践,以便在使用“拒绝”队列策略时防止 Amazon SQS 队列访问丢失。

以下拒绝策略示例拒绝所有 AWS Identity and Access Management (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”不包括指定的主体。但是,还需要允许语句来向排除的主体授予访问权限。


相关信息

在 Amazon SQS 中管理访问的概览

AWS 官方
AWS 官方已更新 2 年前