我有 sqs 队列,它没有定义策略。队列不属于我,我不知道它是如何使用的,我也不想破坏它。我需要添加从不同帐户发送消息的权限,即:
{
"Version": "2012-10-17",
"Id": "Queue1_Policy_UUID",
"Statement": [{
"Sid":"Queue1_Send_Receive",
"Effect": "Allow",
"Principal": { "AWS": [ "111122223333" ] },
"Action": [ "sqs:SendMessage" ],
"Resource": "arn:aws:sqs:us-east-1:my-queue"
}]
}
将此类策略添加到队列将覆盖默认策略,该策略授予对创建队列的帐户的完全访问权限。我找不到此默认策略的定义/等效项。
如何将我的语句添加到队列的资源策略中,而不中断拥有队列的帐户的访问权限?
您显示的策略将授予向队列发送消息的权限。
最安全的选择是专门添加想要向队列发送消息的资源的 ARN。例如,如果某些代码使用 IAM 角色,您可以添加如下权限:
"Principal": {
"AWS": [
"111122223333",
"arn:aws:iam::123456789012:role/role-from-other-account"
]
},
或者,如果您希望信任整个 AWS 账户,只需添加该帐号:
"Principal": {
"AWS": [
"111122223333",
"123456789012"
]
},
为此,其他帐户中还必须有一个策略来授予资源使用 SQS 队列的权限。例如,如果“其他”账户 (
Other-Role
) 中的 IAM 角色想要“此”账户 (This-Account
) 中的 SQS 角色,那么它将需要以下权限:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "sqs:SendMessage",
"Resource": "arn:aws:sqs:us-east-2:111122223333:queue1"
}
]
}
这是因为必须将跨账户权限添加到发送账户和接收资源中的IAM实体。这会阻止其他人访问您的资源,除非您专门授予许可。