为什么 terraform 会出现“SignatureDoesNotMatch: Signature expired”的错误?

AXE*_*abs 6 amazon-web-services aws-cli terraform

运行 terraform 命令时,我开始得到以下信息:

$ terraform refresh
Error refreshing state: 1 error(s) occurred:

* SignatureDoesNotMatch: Signature expired: 20170226T035111Z is now earlier than 20170227T013047Z (20170227T014547Z - 15 min.)
        status code: 403, request id: 7626f995-fc8e-11e6-9b73-7990b2a1af41
Run Code Online (Sandbox Code Playgroud)

这是什么意思?如何解决?

Mar*_*ins 5

AWS API 使用一种身份验证机制,该机制涉及客户端创建表示请求的签名。此签名包括发出请求时间的时间戳,作为降低重放攻击风险的措施。

签名机制假设客户端和服务器都具有稍微准确的系统时钟,这样客户端的时间与服务器的时间相差不超过 15 分钟。

因此,任何使用 AWS API 的系统(无论是通过 Terraform 还是其他方式)都必须具有相当准确的系统时钟,这一点很重要。由于各种原因,虚拟机经常会受到系统时钟漂移的影响,因此最好ntpd在大多数虚拟机上运行以防止其系统时钟漂移过多。


AXE*_*abs 1

事实证明,我安装 terraform 的虚拟机与时间不同步。使用日期命令和当前时间解决了该问题。