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
どういう意味ですか?それを修正するには?
AWS APIは、クライアントがリクエストを表す署名を作成することを含む認証メカニズムを使用します。このシグネチャには、リプレイ攻撃のリスクを軽減するための手段として、要求が行われた時刻のタイムスタンプが含まれています。
署名メカニズムは、クライアントとサーバーの両方がある程度正確なシステムクロックを備えていることを前提としています。そのため、クライアントの時刻はサーバーの時刻と15分以上ずれていません。
そのため、AWS APIが使用されるすべてのシステム(Terraformを介するかどうかにかかわらず)には、適度に正確なシステムクロックがあることが重要です。仮想マシンはさまざまな理由でシステムクロックのドリフトに悩まされることが多いため、ほとんどの仮想マシンで ntpd
を実行して、システムクロックが過度にドリフトしないようにすることをお勧めします。
Terraformがインストールされている私の仮想マシンは、時間とかなり同期していないことがわかりました。 dateコマンドと現在の時刻を使用して問題を解決しました。