aws:SourceAccount和aws:SourceOwner AWS SNS访问策略声明之间有什么区别

问题描述

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:SourceAccountaws:SourceOwner政策声明之间的区别吗?

解决方法

仅当资源的所有者与该资源所属的帐户不同时,才能看到差异。这是一个高级设置。这是官方文档的摘录,其中提供了这种设置的示例。

...另一个帐户可能拥有您帐户中的资源。例如,信任帐户可能允许信任帐户创建新资源,例如在Amazon S3存储桶中创建新对象。

Source

,

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向您的主题发送消息。

希望有帮助。如果不清楚,请发表评论,我会尝试解释更多。

输入更多信息以使情况更清楚。

  1. 以S3发送SNS消息为例。 在这种情况下,AWS将使用内部S3帐户的凭证并代表您的 帐户 而不是来自 资源的电话> 。因此,我们需要使用aws:SourceAccount在策略中执行验证。

  2. 以SES发送SNS消息为例。 在这种情况下,AWS将使用内部S3帐户的凭证并代表您的 资源 (而不是来自 帐户)拨打电话> 。因此,我们需要在策略中使用aws:SourceOwner。

我建议您从文档中逐案参考,以了解需要使用哪一个。但我希望您现在了解其中两个之间的区别。

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...