AWS文档具有examples of different SNS access control配置。
有两个类似的配置示例:
first one允许从另一个帐户的S3存储桶向SNS主题发布通知:
{
"Effect": "Allow",
"Principal": {
"Service": "s3.amazonaws.com"
},
"Action": "sns:Publish",
"Resource": "arn:aws:sns:us-east-2:111122223333:MyTopic",
"Condition": {
"StringEquals": {
"AWS:SourceAccount": "444455556666"
}
}
}
second one允许将来自另一个帐户的SES电子邮件的通知发布到SNS主题:
{
"Effect": "Allow",
"Principal": {
"Service": "ses.amazonaws.com"
},
"Action": "SNS:Publish",
"Resource": "arn:aws:sns:us-east-2:444455556666:MyTopic",
"Condition": {
"StringEquals": {
"aws:SourceOwner": "111122223333"
}
}
}
区别在于,第一个示例使用aws:SourceAccount
,第二个示例使用aws:SourceOwner
。
文档中有一个专用段落称为“ aws:SourceAccount versus aws:SourceOwner”,但我不清楚这两个语句之间的区别。
请您说明aws:SourceAccount
和aws:SourceOwner
政策声明之间的区别吗?
答案 0 :(得分:1)
仅当资源的所有者与该资源所属的帐户不同时,才能看到差异。这是一个高级设置。这是官方文档的摘录,其中提供了这种设置的示例。
...另一个帐户可能拥有您帐户中的资源。例如,信任帐户可能允许信任帐户创建新资源,例如在Amazon S3存储桶中创建新对象。
答案 1 :(得分:0)
1。 SourceOwner用于授予从特定帐户访问另一个AWS服务的权限
例如,我们要定义一个策略,该策略仅允许帐户111122223333中的SES向主题444455556666发布消息
{
"Version": "2008-10-17",
"Id": "__default_policy_ID",
"Statement": [
{
"Sid": "__default_statement_ID",
"Effect": "Allow",
"Principal": {
"Service": "ses.amazonaws.com"
},
"Action": "SNS:Publish",
"Resource": "arn:aws:sns:us-east-2
:444455556666:MyTopic",
"Condition": {
"StringEquals": {
"aws:SourceOwner": "111122223333"
}
}
}
]
}
2。 SourceAccount用于授予IAM角色从帐户到主题的访问权限。
例如,我们要定义一个策略,该策略仅允许帐户444455556666将消息发布到主题111122223333
{ “声明”:[{ “效果”:“允许”, “校长”:{ “ AWS”:“ *” }, “ Action”:“ sns:Publish”, “资源”:“ arn:aws:sns:us-east-2 :111122223333:MyTopic“, “健康)状况”: { “ StringEquals”:{ “ AWS:SourceAccount”:“ 444455556666” } } }] }
现在对于情况1,如果您只有1个帐户,则没有意义,因为SES将使用与SNS相同的帐户。但是,如果您有更多的帐户,则可以带来好处,即只允许特定帐户的SES向您的主题发送消息。
希望有帮助。如果不清楚,请发表评论,我会尝试解释更多。
输入更多信息以使情况更清楚。
以S3发送SNS消息为例。 在这种情况下,AWS将使用内部S3帐户的凭证并代表您的 帐户 而不是来自 资源的电话> 。因此,我们需要使用aws:SourceAccount在策略中执行验证。
以SES发送SNS消息为例。 在这种情况下,AWS将使用内部S3帐户的凭证并代表您的 资源 (而不是来自 帐户)拨打电话> 。因此,我们需要在策略中使用aws:SourceOwner。
我建议您从文档中逐案参考,以了解需要使用哪一个。但我希望您现在了解其中两个之间的区别。