Подключение к AWS RDS из Java без предоставления пароля
Я успешно смог подключиться к RDS, как и любое другое соединение с базой данных. Я использую данные Spring jpa (хранилище) для выполнения операции CRUD на postgres db. В настоящее время я предоставляю URL базы данных и учетные данные в файле свойств
spring:
datasource:
url: jdbc:postgresql://<rds-endpoint>:5432/<dbschema>
username: <dbuser>
password: <dbpassword>
Однако это не вариант при подключении к производству или подготовке производства. Какова лучшая практика здесь. Предоставляет ли AWS какой-либо встроенный механизм для чтения этих данных с конечной точки, как в случае доступа к S3?
Мое намерение не раскрывать пароль.
2 ответа
Вам доступно несколько вариантов:
- Используйте недавно анонсированный доступ IAM к Postgres RDS
- Используйте System Manager Parameter Store для хранения пароля
- Используйте Secrets Manager для хранения пароля и автоматического поворота учетных данных
Для 2 и 3 найдите пароль при запуске приложения в Spring с помощью PropertyPlaceholderConfiguration и клиента AWSSimpleSystemsManagement (запрос GetParameter). SystemsManager может прокси-запросы к SecretsManager, чтобы сохранить единый интерфейс в вашем коде для доступа к параметрам.
Учетные данные IAM более безопасны в этом:
- При использовании профилей экземпляров EC2 для доступа к базе данных используются кратковременные временные учетные данные.
- Если не на EC2, вы можете сгенерировать токены аутентификации.
- Пароль не сохраняется в вашей конфигурации.
- Если у вас есть отдельная команда баз данных, они могут управлять доступом независимо от пользователя приложения.
- Удаление доступа может быть сделано через IAM
Я нашел еще один общий вариант - использование AWS Secret Manager ( ссылка на документацию)
Конкретным решением RDS является подключение к экземпляру БД с помощью AWS SDK с использованием IAMDBAuth