访问 Amazon SQS 队列需要什么权限?

2 分钟阅读
0

我想访问 Amazon Simple Queue Service(Amazon SQS)队列。访问队列需要哪些 SQS 访问策略和 AWS Identity and Access Management (IAM) 策略权限?

解决方法

要访问 Amazon SQS 队列,您必须向 SQS 访问策略和/或 IAM 策略添加权限。具体权限要求取决于 SQS 队列和 IAM 角色是否来自同一账户。

同一账户

SQS 访问策略或 IAM 策略中必须有允许访问的语句。

注意:如果 SQS 访问策略或 IAM 策略明确允许访问,但另一项策略明确拒绝访问,则队列访问将被拒绝。

IAM 用户策略SQS 访问策略结果
允许允许允许
允许既不允许也不拒绝允许
允许拒绝拒绝
既不允许也不拒绝允许允许
既不允许也不拒绝既不允许也不拒绝隐式拒绝
既不允许也不拒绝拒绝拒绝
拒绝允许拒绝
拒绝既不允许也不拒绝拒绝
拒绝拒绝拒绝

不同账户

SQS 访问策略和 IAM 策略中都必须有允许访问的语句。

IAM 用户策略SQS 访问策略结果
允许允许允许
允许既不允许也不拒绝隐式拒绝
允许拒绝拒绝
既不允许也不拒绝允许隐式拒绝
既不允许也不拒绝既不允许也不拒绝隐式拒绝
既不允许也不拒绝拒绝拒绝
拒绝允许拒绝
拒绝既不允许也不拒绝拒绝
拒绝拒绝拒绝

策略语句示例

以下策略示例显示了为允许对 SQS 队列进行跨账户访问,而必须对 IAM 策略和 SQS 队列访问策略设置的权限。

第一个策略授予 username1 向资源 arn:aws:sqs:us-east-1:123456789012:queue_1 发送消息的权限。

第二个策略允许 username1 向队列发送消息。

有关这些策略的更多信息,请参阅 IAM 策略类型:如何及何时使用它们

username1 的 IAM 策略语句示例

{
   "Version": "2012-10-17",
   "Statement": [{
      "Effect": "Allow",
      "Action": "sqs:SendMessage",
      "Resource": "arn:aws:sqs:us-east-1:123456789012:queue_1"
   }]
}

queue_1 的 SQS 资源策略语句示例

{
   "Version": "2012-10-17",
   "Id": "Queue1_Policy",
   "Statement": [{
      "Sid":"Queue1_AllActions",
      "Effect": "Allow",
      "Principal": {
         "AWS": [
            "arn:aws:iam::111122223333:user/username1"
         ]
      },
      "Action": "sqs:SendMessage",
      "Resource": "arn:aws:sqs:us-east-1:123456789012:queue_1"
   }]
}

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