我想访问 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"
}]
}