【问题标题】:SES AWS Error Code: SignatureDoesNotMatch, Status Code: 403SES AWS 错误代码:SignatureDoesNotMatch,状态代码: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

标签: php amazon-web-services amazon amazon-ses


【解决方案1】:

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

【讨论】:

  • 谢谢老兄,我运行了sudo ntpdate ntp.ubuntu.com,然后再次执行了代码,它成功了!你救了我!
  • 我认为这可能发生在我身上:stackoverflow.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 仪表板下创建)不起作用。

【讨论】:

    猜你喜欢
    • 2017-01-19
    • 1970-01-01
    • 2018-06-01
    • 2022-12-30
    • 1970-01-01
    • 1970-01-01
    • 2023-02-21
    • 2016-01-18
    • 2018-06-14
    相关资源
    最近更新 更多