You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修改AWS SNS Topic访问策略配置自定义SES发件人ID

解决SNS主题自定义SES发件人不生效的问题

你的问题核心在于两个关键点:SNS主题访问策略缺少必要的授权主体(Principal),以及发布消息时未指定自定义发件人参数。以下是具体修正步骤:

1. 修正SNS主题的访问策略

你当前的策略缺少Effect和Principal字段,导致授权规则完全无效。需要添加允许发布消息的主体(比如你的AWS账号根用户,或者实际用来发布消息的IAM角色/用户ARN),同时保留SourceARN条件限制仅允许关联的SES身份:

{
  "Version": "2008-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::myaccid:root" // 替换为实际发布消息的IAM实体ARN,比如指定角色/用户
      },
      "Action": "SNS:Publish",
      "Resource": "arn:aws:sns:region:myaccid:test-std-topic",
      "Condition": {
        "StringEquals": {
          "AWS:SourceOwner": "myaccid",
          "AWS:SourceArn": "arn:aws:ses:region:myaccid:identity/no-reply@stackexample.com"
        }
      }
    }
  ]
}

2. 给SES已验证身份添加授权策略

需要允许SNS服务使用你的SES身份发送邮件,在SES控制台找到no-reply@stackexample.com身份,添加以下权限策略:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "sns.amazonaws.com"
      },
      "Action": "ses:SendEmail",
      "Resource": "arn:aws:ses:region:myaccid:identity/no-reply@stackexample.com"
    }
  ]
}

3. 发布消息时显式指定自定义发件人

无论是用AWS CLI还是SDK发布消息,必须主动指定Source参数为你的已验证SES邮箱,否则SNS会默认使用AWS内置发件人:

AWS CLI示例:

aws sns publish \
  --topic-arn arn:aws:sns:region:myaccid:test-std-topic \
  --message "你的消息内容" \
  --subject "邮件主题" \
  --source "no-reply@stackexample.com"

Python SDK(boto3)示例:

import boto3

sns_client = boto3.client('sns')
response = sns_client.publish(
    TopicArn='arn:aws:sns:region:myaccid:test-std-topic',
    Message='你的消息内容',
    Subject='邮件主题',
    Source='no-reply@stackexample.com'
)

完成以上三步后,SNS发送的邮件就会使用你指定的SES邮箱作为发件人,而非默认的AWS邮箱。

内容的提问来源于stack exchange,提问作者Travis

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 06:52:45