最简单的 IAM 策略被拒绝。为什么?

Simplest possible IAM Policy is Denied. Why?

我无法让 IAM 策略为我的 SQS 队列工作,我尝试了 IAM 策略模拟器。无论我的政策多么简单,它总是说它被拒绝了。

以下策略旨在允许对任何 SQS 资源执行任何操作。这是我附加到特定用户的策略,这就是未指定委托人的原因。

{
  "Version": "2012-10-17",
  "Statement": [
    {
        "Action": "sqs:*",
        "Effect": "Allow",
        "Resource": "arn:aws:sqs:::*"
    }
  ]
}

当我尝试 运行 在策略模拟器中执行 listQueues 操作时,我被拒绝了:隐式拒绝(没有匹配的声明)。这个说法怎么可能不符呢?

这是在政策编辑器上被拒绝的屏幕截图:

这不是最简单的 IAM 策略。这是:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Action":  "*",
            "Effect": "Allow",
            "Resource": "*"
        }
    ]
}

您是否在 运行 模拟之前单击策略编辑器底部的 "Apply"?

默认情况下,IAM 策略模拟器将您正在模拟访问的资源的 ARN 设置为 *。由于某种原因,这与 "Resource": "arn:aws:sqs:*:*:*"

的 Resource 子句不匹配

一旦我展开了模拟器的资源部分(见下面的屏幕截图),并粘贴到有效 SQS 资源的 ARN 中,策略就匹配了。请参阅下面屏幕截图的底部。

我发现解决问题的另一件事是@Mark-B 的建议。将 Resource 子句更改为 "Resource": "*"。与策略模拟器的默认资源 * 匹配,而 "Resource": "arn:aws:sqs:*:*:*" 不匹配。