Я нашел решение / обходной путь, которым я поделюсь здесь.
Пожалуйста, не стесняйтесь комментировать, если вы найдете лучший способ!
TL; DR: обходной путь работает, потому что он делает только 1 запрос к SSM (на лямбду) вместо 6 благодаря рекурсиву GetParametersByPath вместо GetParameterHistory.
Итак, чтобы упростить мой вариант использованиябыло хранить секрет для шифрования токена и использовать его в течение 10 часов.
Примечание: IRL, я использую 3 разных секрета, следовательно, P1, P2, P3 в вопросе.Далее я буду упрощать и говорить только об 1 секрете, поскольку он работает аналогично для любого количества секретов (пока вы не достигнете максимального количества параметров в SSM, которое составляет 10K ...)
Ранее оно работало какэто: я вращаю секрет каждый час, я дешифрую токен против последних 10 версий -> если пользователь отправляет токен, которому 11 часов или больше, я больше не могу расшифровать его.
Теперь вместоимея один параметр с несколькими версиями, у меня есть несколько параметров, из которых безопасно использовать только последнюю версию.
Мое хранилище параметров SSM ранее выглядело (для каждого параметра)
/secret/P1
А теперь это выглядит как
/secrets/P1/s1 -> a secret
/secrets/P1/s2 -> a secret
...
/secrets/P1/s10 -> a secret
/secrets/P1/current -> s4
Мой код теперь выполняет GetParametersByPath ("/ secrets") с рекурсией, чтобы получить в одном запросе все действительные секреты для всех параметров (то есть P1, P2, P3).
Таким образом, каждая лямбда выполняет один запрос, есть небольшой шанс нажать RateExceeded.
Когда клиент отправляет токен, я пытаюсьpt против 10 текущих секретов.
Секретное вращение изменилось на: получить / текущий и изменить следующий (т. е. если ток равен s4, мы изменим s5 и установим / current на s5)
В качестве последнего замечания, я также реализовал улучшение, которое заключается в добавлении / токе в токен (незашифрованный).
При этом мне не нужно проверять 10 секретов, а только тот, который содержится втокен.
Обратите внимание, что я мог бы сделать это улучшение раньше (отправив незашифрованный номер версии в токене), я просто не думал об этом раньше.
Надеюсь, это кому-то поможет