Ошибка SDK AWS node.js — SignatureDoesNotMatch: Срок действия подписи истек

Node.js версии 0.10.25

SDK AWS версии latest - 2.0.23

У меня есть приложение, которое постоянно прослушивает очередь (SQS), и если в этой очереди есть сообщения, приложение прочитает сообщение, обработает его и сохранит некоторые данные в S3. Когда я запускаю приложение примерно через 20 минут, я постоянно получаю следующую ошибку.

Potentially unhandled rejection [160] SignatureDoesNotMatch: Signature expired: 20141104T062952Z is now earlier than 20141104T062952Z (20141104T064452Z - 15 min.)
at Request.extractError (/myproject/node_modules/aws-sdk/lib/protocol/query.js:39:29)
at Request.callListeners (/myproject/node_modules/aws-sdk/lib/sequential_executor.js:100:18)
at Request.emit (/myproject/node_modules/aws-sdk/lib/sequential_executor.js:77:10)
at Request.emit (/myproject/node_modules/aws-sdk/lib/request.js:604:14)
at Request.transition (/myproject/node_modules/aws-sdk/lib/request.js:21:12)
at AcceptorStateMachine.runTo (/myproject/node_modules/aws-sdk/lib/state_machine.js:14:12)
at /myproject/node_modules/aws-sdk/lib/state_machine.js:26:10
at Request.<anonymous> (/myproject/node_modules/aws-sdk/lib/request.js:22:9)
at Request.<anonymous> (/myproject/node_modules/aws-sdk/lib/request.js:606:12)
at Request.callListeners (/myproject/node_modules/aws-sdk/lib/sequential_executor.js:104:18)

Это не проблема с моим системным временем. Мое системное время синхронизировано со временем моего экземпляра EC2. Почему я получаю эту ошибку? Это связано с SQS или S3?


person Srivathsa    schedule 04.11.2014    source источник
comment
Недавно я заметил некоторую странность в последней версии node.js sdk, где цепочка учетных данных начала смотреть на роль профиля экземпляра раньше, чем моя среда предоставила учетные данные и выдавала мне аналогичные ошибки. Пробовали ли вы понизить версию своего пакета, например, до версии 2.0.10 или около того, просто чтобы убедиться, что это недавняя ошибка?   -  person mattr    schedule 04.11.2014
comment
@mattyice - я этого не пробовал. Дам вам знать после этого :)   -  person Srivathsa    schedule 04.11.2014


Ответы (3)


Я знаю, что это старый вопрос, но сегодня я испытал его на себе.

К счастью, в AWS NodeJS SDK теперь есть этот параметр конфигурации под названием correctClockSkew, который исправит смещение системных часов при возникновении ошибки:

http://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/Config.html#correctClockSkew-property

person Churro    schedule 25.09.2015
comment
Это правильный ответ. Amazon следует рассмотреть возможность установки по умолчанию значения true. Использование AWS Javascript SDK в браузере в наши дни более распространено, и время браузера ненадежно. - person Gary Weiss; 16.03.2016

Спасибо Лорен Сигал (Amazon) за его быстрый ответ. См. https://github.com/aws/aws-sdk-js/issues/401 для более подробной информации. Короче говоря, SDK не повторяет ошибки подписи, для которых существует обходной путь.

AWS.events.on('retry', function(resp) {
  if (resp.error.code === 'SignatureDoesNotMatch') {
    resp.error.retryable = true;
  }
});

Это не регрессия, т. е. это не ошибка, появившаяся в 2.0.23.

person Srivathsa    schedule 05.11.2014

Вероятно, время на вашем компьютере указано неверно.

Несоответствие подписи связано с тем, что процесс аутентификации зависит от синхронизации часов.

Проверьте время на своей машине.

В Linux/WSL вы можете запустить sudo hwclock -s для исправления. Для других ОС потребуются другие команды.

person mikemaccana    schedule 10.06.2021