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的主要内容,如果未能解决你的问题,请参考以下文章
JavaScript - 使用 AWS SES 发送电子邮件