如何允许组织中的 AWS 账户将消息发布到我账户中的 Amazon SNS 主题?

上次更新日期:2021 年 9 月 20 日

我希望 Amazon Simple Notification Service(Amazon SNS)主题接受从我的 AWS Organizations 中组织的任何 AWS 账户发布的消息。该如何进行设置?

简短描述

配置 Amazon SNS 主题的访问策略,以允许组织中的任何账户将消息发布到主题。在访问策略中,包括全局条件键 aws:PrincipalOrgID 并指定您组织的 ID。

解决方法

1.    在 Organizations 控制台中查找您组织的 ID。有关更多信息,请参阅从管理账户查看组织的详细信息

2.    在 Amazon SNS 控制台中创建主题。记下新主题的 Amazon Resource Name(ARN)

3.    在 Amazon SNS 控制台中,通过执行以下操作来编辑主题:
在导航窗格中,选择 Topics (主题)
选择您创建的主题。然后选择 Edit (编辑)
Edit<topicName> (编辑<主题名称>) 页面上,展开 Access policy -optional (访问策略 – 可选)
将以下示例策略粘贴到 JSON 编辑器中,然后选择 Save changes (保存更改)

重要信息:请将 snsTopicArn 替换为主题的 ARN。然后将 myOrgId 替换为您组织的 ID。

{
  "Version": "2008-10-17",
  "Id": "__default_policy_ID",
  "Statement": [
    {
      "Sid": "allow-publish-from-organization-accounts",
      "Effect": "Allow",
      "Principal": {
        "AWS": "*"
      },
      "Action": [
        "sns:Publish"
      ],
      "Resource": "snsTopicArn",
      "Condition": {
        "StringEquals": {
          "aws:PrincipalOrgID": "myOrgId"
        }
      }
    }
  ]
}

提示:要允许组织中的账户执行更多 Amazon SNS API 操作(如 GetTopicAttributes),请在策略的 Action (操作) 下添加操作。

4.    利用您的电子邮件地址订阅 SNS 主题以进行测试。在创建订阅时,请确保指定您的主题的 ARN

5.    在您的电子邮件中,找到来自 AWS 通知的订阅确认消息,并确认订阅。

6.    使用组织中的任何 AWS 账户,将消息发布到您账户中的 SNS 主题。在发布请求中,请确保指定主题的 ARN

已发布的消息将显示在您的电子邮件中。