Рубрики
Без рубрики

Весенняя загрузка: Обработка смены или смены пароля AWS RDS без перезапуска

В этой статье рассказывается о том, как вы можете обрабатывать ротацию секретов AWS RDS без перезапуска Spring Boot… С пометкой aws, java, весенняя загрузка, пароль.

В этой статье рассказывается о том, как вы можете обрабатывать ротацию секретов AWS RDS без перезапуска приложения Spring Boot.

У меня была проблема, из-за которой мне приходилось обновлять подключение к базе данных всякий раз, когда пароль базы данных обновлялся для моего экземпляра AWS RDS. Это может быть связано с политикой ежемесячной смены паролей или может быть скомпрометированы учетные данные базы данных, и вы хотите, чтобы все ваши запущенные приложения продолжали работать даже при изменении пароля базы данных.

Для решения такого рода проблем AWS предоставляет библиотеку, которая будет обрабатывать это обновление подключения к базе данных даже без перезапуска приложения Spring Boot.

В AWS есть библиотека с открытым исходным кодом под названием AWS Secrets Manager JDBC , которая обрабатывает подключение к базе данных во время работы вашего приложения и взаимодействия с экземпляром RDS.

Давайте посмотрим, как это работает.

Во-первых, добавьте следующую зависимость в файл сборки. Учитывая maven, это будет выглядеть следующим образом


    com.amazonaws.secretsmanager
    aws-secretsmanager-jdbc
    1.0.5

Затем укажите URL-адрес источника данных JDBC со схемой jdbc-менеджер секретов вместо jdbc

spring:
  datasource:
    url: jdbc-secretsmanager:mysql://database-host:3306/rotate_db

Далее Вам нужно указать имя класса драйвера. В этой статье мы будем придерживаться экземпляра MySQL RDS. Так что это будет com.amazonaws.менеджер секретов.sql. AWS Secrets Manager MySQL Диск .

Для этой библиотеки также требуется библиотека подключений к конкретной базе данных. Поэтому вам нужно будет добавить библиотеку MySQL connector, которая обычно является артефактом mysql-connector-java . Это будет использовано для установления фактического соединения с базой данных.

В случае, если вы имеете дело с другими базами данных, вы можете найти соответствующие драйверы из исходного кода здесь

Затем создайте секрет AWS для экземпляра RDS, используя раздел учетные данные базы данных в диспетчере секретов AWS.

Затем в файле свойств application.yaml укажите секретное имя, которое вы только что создали, в качестве имени пользователя, и вам не нужно указывать пароль, так как он теперь хранится в диспетчере секретов.

Ваш файл свойств должен выглядеть примерно так.

spring:
  datasource:
    url: jdbc-secretsmanager:mysql://database-host:3306/rotate_db
    username: secret/rotation
    driver-class-name: com.amazonaws.secretsmanager.sql.AWSSecretsManagerMySQLDriver

Теперь, чтобы приложение могло взаимодействовать с AWS и получать секретное значение, вам необходимо настроить и настроить интерфейс командной строки AWS. Вот ссылка на него.

Как только вы это сделаете, ваше приложение сможет подключиться к AWS, экспортировав переменную среды AWS_PROFILE с помощью профиля, который вы настроили при настройке конфигурации AWS. На этом вы закончили с изменениями.

Теперь запустите приложение, и оно должно иметь возможность связаться с менеджером секретов AWS, чтобы получить учетные данные и начать связь с экземпляром AWS RDS.

Вы можете проверить это, нажав на опцию “Повернуть секрет” в разделе “Секрет”, которая сгенерирует новый пароль для базы данных и проверит связь с базой данных.

Вот ссылка GitHub на мою реализацию.

Бонус:

Это также работает, если у вас есть интеграция с liquibase. Вам просто нужно указать тот же URL-адрес в конфигурации liquibase и секрет базы данных в качестве имени пользователя, и настройка liquibase будет работать для вас.

spring:
  datasource:
    url: jdbc-secretsmanager:mysql://database-host:3306/rotate_db
    username: secret/rotation
    driver-class-name: com.amazonaws.secretsmanager.sql.AWSSecretsManagerMySQLDriver

  liquibase:
    url: jdbc-secretsmanager:mysql://database-host:3306/rotate_db
    user: secret/rotation

Наслаждайтесь!! развлекайся!!

Оригинал: “https://dev.to/amrutprabhu/spring-boot-handle-aws-rds-password-change-or-rotation-without-restarting-301l”