В моем приложении я использую Cognito User Pools для управления идентификацией, и у меня есть специальная учетная запись службы, которая имеет доступ ко всем данным пользователей в бэкэнд-приложении Python. У меня также есть лямбда-функция, которая запускается ночью, аутентифицируется как этот специальный административный пользователь с ADMIN_NO_SRP_AUTH
и выполняет обслуживание.
Проблема, с которой я столкнулся сейчас, заключается в том, что мне нужно передать пароль пользователя, хотя роль IAM в Lambda настроена для привилегированного доступа к Cognito User Pool. В идеале я хотел бы иметь возможность получить токен JWT для произвольного пользователя из Cognito без необходимости знать его пароль (или в идеале вообще отключить интерактивный вход для этого пользователя).
У меня есть пара альтернативных подходов:
Сохраняйте логику в том виде, в каком она есть сейчас, с надежно введенным паролем из хранилища параметров. Однако, сделав это, мне нужно будет спроектировать систему, которая периодически поворачивает пароль.
Создайте случайную строку в лямбде прямо перед входом в систему, сбросьте пароль учетной записи службы с помощью AdminSetUserPassword
, а затем войдите с этим именем. Это решает проблему с ротацией, но кажется неправильным способом и склонно к гоночным условиям.
Реализация CUSTOM_AUTH
с вызовом. Это кажется неоправданно сложным, поскольку мне придется самому заново разрабатывать лямбда-вызовы вместо того, чтобы просто полагаться на ванильные роли IAM.
Отказаться от подхода к учетной записи службы и дать лямбда-доступу к бэкенду другой метод аутентификации. Это выполнимо, но мне нравится концепция наличия только одного метода аутентификации на бэкэнде через Cognito JWT.
Мне кажется странным, что есть привилегированная операция "войти как любой пользователь" с административными учетными данными, или, может быть, я просто что-то упускаю?