2

AWS 文档包含不同 SNS 访问控制配置的示例。

有两个类似的配置示例:

一个允许将通知从另一个账户的 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"
    }       
  }
}

第二允许将通知从另一个帐户的 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 与 aws:SourceOwner ”的专用段落,但我仍不清楚这两个语句之间的区别。

您能否澄清政策声明aws:SourceAccountaws:SourceOwner政策声明之间的区别?

4

2 回答 2

3

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

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

资源

于 2020-10-20T11:09:04.357 回答
1

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”:“*”},“操作”:“sns:发布”,“资源”:“arn:aws:sns: us-east-2 :111122223333:MyTopic", "Condition": { "StringEquals": { "AWS:SourceAccount": "444455556666" } } }] }

现在对于案例 #1,如果您只有 1 个帐户,这是没有意义的,因为 SES 将使用与 SNS 相同的帐户。但是如果您有更多帐户,它会带来好处,您只允许特定帐户的 SES 向您的主题发送消息。

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

提供更多信息以使事情更清楚。

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

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

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

于 2020-09-08T20:10:42.840 回答