Как обновить пароль postgres при аутентификации в RDS через токен STS (IAM) - PullRequest
0 голосов
/ 13 февраля 2019

Rds уже некоторое время поддерживает аутентификацию на основе IAM в postgres, но я не вижу никаких дискуссий о том, как заставить ее работать в приложении django, где-либо еще.

Это достаточно простая система - ваше приложениезапускается с ролью службы (или имеет ключ доступа и секретный ключ пользователя iam), к которому было прикреплено разрешение на подключение в качестве конкретного пользователя БД через стандартную политику IAM.Всякий раз, когда приложению необходимо подключиться к базе данных, оно использует AWS SDK для запроса токена из STS, который авторизуется через роль службы, поэтому учетные данные не требуются.Он использует полученный токен в качестве пароля при подключении к базе данных, и в базе данных должен быть пользователь с таким именем, настроенный для использования механизма аутентификации iam.Но токены хороши только на 15 минут.Это означает, что фабрике соединений необходимо установить максимальный возраст для соединения, который составляет менее 15 минут, и она должна запрашивать новый токен / пароль каждый раз, когда открывает новое соединение.Django ожидает, что пароль будет установлен при инициализации приложения, а не генерироваться динамически при каждом установлении нового соединения.

Это похоже на то, что django должен поддерживать изначально, а не требует промежуточного программного обеспечения (или творческих хаков).метода __getattr__ в файле config).Настолько, что я не хочу реализовывать такой взлом, не спрашивая более широкое сообщество о решении.Я не разработчик Django.Я парень из Devops, пытающийся заставить приложение Django работать в производстве.Мне не повезло с поиском в Google по поводу поворота учетных данных или динамических настроек.

Очевидное решение состоит в том, чтобы позволить вызываемому пользователю быть назначенным паролю, но это не работает, в настоящее время, без взлома метода __getattr__ dict конфигурации базы данных.Я что-то упускаю из виду, как это настроить?Я использую типичное развертывание nginx-> gunicorn-> django - все в одном контейнере.Кажется, это должно быть проще, чем кажется, поэтому я надеюсь, что просто что-то упустил.

...