При запуске команд 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
Что это означает? Как это исправить?
API-интерфейсы AWS используют механизм аутентификации, при котором клиент создает подпись, представляющую запрос. Эта подпись включает отметку времени, когда был сделан запрос, в качестве меры по снижению риска атак повторного воспроизведения.
Механизм подписи предполагает, что и клиент, и сервер имеют довольно точные системные часы, так что время клиента не более чем на 15 минут отличается от времени сервера.
Поэтому важно, чтобы любая система, в которой используются API-интерфейсы AWS - будь то через Terraform или иным способом, - имела достаточно точные системные часы. Виртуальные машины часто страдают от дрейфа системных часов по разным причинам, поэтому рекомендуется запустить ntpd
на большинстве виртуальных машин, чтобы их системные часы не слишком сильно отклонялись.
Оказалось, что моя виртуальная машина, на которой был установлен terraform, не синхронизировалась со временем. Использование команды даты и текущего времени решило проблему.