SES AWS 错误代码:SignatureDoesNotMatch,状态代码:403

Posted

技术标签:

【中文标题】SES AWS 错误代码:SignatureDoesNotMatch,状态代码:403【英文标题】:SES AWS Error Code: SignatureDoesNotMatch, Status Code: 403 【发布时间】:2014-04-22 22:34:58 【问题描述】:

我在尝试通过 Amazon SES 发送邮件时收到 AWS 错误代码:SignatureDoesNotMatch,状态代码:403。

我已确认我使用的是通过https://console.aws.amazon.com/iam/home?#users 创建的正确凭据,并且错误仍然存​​在。

我假设我在 iam/home 上创建的凭据实际上是全局的,但我不知道我进一步做错了什么。整个错误是:

AWS 错误代码:SignatureDoesNotMatch,状态代码:403,AWS 请求 ID:xxx,AWS 错误类型:客户端,AWS 错误消息:签名已过期: 20140314T031111Z 现在早于 20140317T15116Z (20140317T151111Z - 5 分钟),用户代理:aws-sdk-php2/2.5.3 Guzzle/3.8.1 curl/7.22.0 PHP/5.3.10-1ubuntu3.10 /url/Vendor/Aws/Common/Exception/NamespaceExceptionFactory.php 上线 91

实际代码是我从中提取的代码:http://docs.aws.amazon.com/aws-sdk-php/latest/class-Aws.Ses.SesClient.html#_sendEmail

我正在本地环境中触发此脚本。

我在哪里可以找到有效的凭据?

【问题讨论】:

我已经解决了我的问题,将区域 us-east-1 更改为 us-west-2 【参考方案1】:

这看起来像是时钟偏差问题。您发送请求的机器的时间与 Amazon SES 服务器的时间相差太大。这会导致您的签名无效。您的凭据可能没问题。更正您机器的时钟或与 NTP 服务器同步。

【讨论】:

谢谢老兄,我运行了sudo ntpdate ntp.ubuntu.com,然后再次执行了代码,它成功了!你救了我! 我认为这可能发生在我身上:***.com/questions/23700422/… 我的 EC2 服务器位于巴西圣保罗 (sa-east-1),我在北弗吉尼亚 (us-east-1) 使用 SES )。由于无法访问服务器,如何知道 SES 设置的时间是多少? 感谢@DerekGardiner 发布该命令。这也正是我的问题。我正在运行一个本地 vagrant box 来运行我的 Ruby on Rails 应用程序。每次计算机进入休眠状态,而我忘记关闭 vagrant box 时,vagrant box 上的时钟就会不同步。这正是我需要的解决方案! @DerekGardiner 实际上你的评论救了我:D【参考方案2】:

除了这个解决方案,我还做了以下事情。

1) 我在 IAM 中使用 PowerUser 策略创建了用户。 2) 更新了我的代码中的密钥/访问密钥。

现在它正在工作。

不确定为什么 SMTP 凭据(在 SES 仪表板下创建)不起作用。

【讨论】:

以上是关于SES AWS 错误代码:SignatureDoesNotMatch,状态代码:403的主要内容,如果未能解决你的问题,请参考以下文章

带有 GMail 的 AWS SES(仅发送)

编码错误:在通过 AWS SES 的 MIME 文件数据中

AWS-SES 电子邮件地址未经验证。邮箱帐户

JavaScript - 使用 AWS SES 发送电子邮件

Aws ses 电子邮件发件人在本地工作,但在部署时无法在 tomcat 中工作

如何使用带有 Postfix 的 AWS SES 接收退回的邮件