我想访问 Amazon Simple Queue Service (Amazon SQS) 队列。我需要知道访问队列所需的 Amazon SQS 访问策略和 AWS Identity and Access Management (IAM) 策略权限。
解决方法
要访问 Amazon SQS 队列,您必须向 SQS 访问策略、IAM 策略或两者同时添加权限。具体权限要求取决于 SQS 队列和 IAM 角色是否来自同一 AWS 账户。
同一账户
SQS 访问策略或 IAM 策略至少有一个需要包含允许访问的语句。
注意: 如果 SQS 访问策略或 IAM 策略中一个显式允许访问,而另一个策略显式拒绝访问,则会拒绝对队列的访问。
| | |
|---|
| IAM 用户策略 | SQS 访问策略 | SQS 访问策略 |
| 允许 | 允许 | 允许 |
| 允许 | 既不允许也不拒绝 | 允许 |
| 允许 | 拒绝 | 拒绝 |
| 既不允许也不拒绝 | 允许 | 允许 |
| 既不允许也不拒绝 | 既不允许也不拒绝 | 隐式拒绝 |
| 既不允许也不拒绝 | 拒绝 | 拒绝 |
| 拒绝 | 允许 | 拒绝 |
| 拒绝 | 既不允许也不拒绝 | 拒绝 |
| 拒绝 | 拒绝 | 拒绝 |
不同账户
SQS 访问策略和 IAM 策略都需要包含允许访问的语句。
| | |
|---|
| IAM 用户策略 | SQS 访问策略 | 结果 |
| 允许 | 允许 | 允许 |
| 允许 | 既不允许也不拒绝 | 隐式拒绝 |
| 允许 | 拒绝 | 拒绝 |
| 既不允许也不拒绝 | 允许 | 隐式拒绝 |
| 既不允许也不拒绝 | 既不允许也不拒绝 | 隐式拒绝 |
| 既不允许也不拒绝 | 拒绝 | 拒绝 |
| 拒绝 | 允许 | 拒绝 |
| 拒绝 | 既不允许也不拒绝 | 拒绝 |
| 拒绝 | 拒绝 | 拒绝 |
策略语句示例
以下策略示例显示了您必须在 IAM 策略和 SQS 队列访问策略上设置的权限。这些策略允许对 SQS 队列进行跨账户访问。
username1 的 IAM 策略语句示例
以下策略授予 username1 向资源 arn:aws:sqs:us-east-1:123456789012:queue_1 发送消息的权限:
{
"Version": "2012-10-17",
"Statement": [{
"Effect": "Allow",
"Action": "sqs:SendMessage",
"Resource": "arn:aws:sqs:us-east-1:123456789012:queue_1"
}]
}
queue_1 的 SQS 资源策略语句示例
以下策略允许 username1 向 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"
}]
}
有关详细信息,请参阅 IAM 策略类型: 如何以及何时进行使用。