我使用Amazon SES时的状态码403:SignatureDoesNotMatch

Dee*_*pak 14 amazon-web-services amazon-ses

我创建了一个新的亚马逊帐户.创建SMTP凭据并使用AWS Java SDK发送电子邮件.但它失败了以下错误:

状态代码:403,AWS服务:AmazonSimpleEmailService,AWS请求ID:xyz,AWS错误代码:SignatureDoesNotMatch,AWS错误消息:我们计算的请求签名与您提供的签名不匹配.检查您的AWS Secret Access Key和签名方法.有关详细信息,请参阅服务文档

Dee*_*pak 21

提供发送电子邮件的密钥不是"SMTP凭据".密钥是全局访问密钥,可以检索http://docs.amazonwebservices.com/ses/latest/GettingStartedGuide/GetAccessIDs.html.

  • 我会被钦佩,但这是真的.您需要为AWS创建全局访问密钥才能访问SES.使用URL https://console.aws.amazon.com/iam/home?#security_credential请注意,这提供了无限制访问AWS账户的密钥.不明白为什么SES不能用更有限的凭证来做... (4认同)
  • 最佳实践是创建一个 IAM 用户,然后为该用户创建一个访问 ID。您现在可以限制用户权限。所有这些操作都必须在 AIM 控制面板中完成:https://console.aws.amazon.com/iam/home (2认同)

小智 10

SMTP凭据无法与SES API(AWS Java SDK)一起使用.事实上,SMTP凭据与为IAM用户手动创建的凭据不同,即使在AWS控制台上的任何位置都看不到这些凭据.看看这里看到的差异:http://docs.aws.amazon.com/ses/latest/DeveloperGuide/using-credentials.html

您实际上不需要创建全局访问凭据(这可能是安全漏洞),但您应该使用以下安全策略创建新的IAM用户,并为该用户创建新凭据.

{
"Version": "2012-10-17",
"Statement":[{
   "Effect":"Allow",
   "Action":["ses:SendEmail", "ses:SendRawEmail"],
   "Resource":"*"
   }
]
}
Run Code Online (Sandbox Code Playgroud)

PS:可能你只需要为已经为SES创建的SMTP IAM用户添加新凭据,但我还没有对此进行测试.

  • 该策略运行良好,但我必须创建另一个凭据才能与其一起使用。 (2认同)