Conecte-se a um banco de dados SQL com credenciais em um segredo do AWS Secrets Manager
Em aplicações Java, você pode usar os drivers de conexão SQL do Secrets Manager para se conectar aos bancos de dados MySQL, PostgreSQL, Oracle e MSSQLServer usando credenciais armazenadas no Secrets Manager. Cada driver empacota o driver JDBC base para que você possa usar chamadas JDBC para acessar o seu banco de dados. No entanto, em vez de passar um nome de usuário e senha para a conexão, você fornece o ID de um segredo. O driver chama o Secrets Manager para recuperar o valor do segredo e usa as credenciais no segredo para se conectar ao banco de dados. O driver também armazena em cache as credenciais usando a biblioteca em cache no lado do cliente de Java. Assim, as conexões futuras não exigem uma chamada para o Secrets Manager. Por padrão, o cache é atualizado a cada hora e também quando o segredo é alternado. Para configurar o cache, consulte SecretCacheConfiguration.
É possível baixar o código-fonte no GitHub
Para usar os drivers de conexão SQL do Secrets Manager:
-
A sua aplicação deve estar em Java 8 ou superior.
-
O seu segredo deve ser um dos seguintes:
Um segredo de banco de dados na estrutura JSON esperada. Para verificar o formato, no console do Secrets Manager, veja o seu segredo e escolha Retrieve secret value (Recuperar o valor do segredo). Como alternativa, na AWS CLI, chame get-secret-value.
Um segredo gerenciado pelo Amazon RDS. Para esse tipo de segredo, é necessário especificar um endpoint e uma porta ao estabelecer a conexão.
Se o banco de dados for replicado para outras regiões, para se conectar a uma réplica de banco de dados em outra região, especifique o endpoint regional e a porta ao criar a conexão. Você pode armazenar informações de conexão regional no segredo como pares de chave-valor adicionais, nos parâmetros do SSM Parameter Store ou na configuração do código.
Para adicionar o driver ao seu projeto, no arquivo de compilação do Maven pom.xml
, adicione a seguinte dependência para o driver. Para obter mais informações, consulte Secrets Manager SQL Connection Library
<dependency> <groupId>com.amazonaws.secretsmanager</groupId> <artifactId>aws-secretsmanager-jdbc</artifactId> <version>1.0.8</version> </dependency>
O driver usa a cadeia de fornecedores de credenciais padrão. Se você executar o driver no Amazon EKS, ele poderá retirar as credenciais do nó em que está sendo executado, em vez do perfil da conta de serviço. Para resolver isso, adicione a versão 1 de com.amazonaws:aws-java-sdk-sts
ao seu arquivo de projeto Gradle ou Maven como uma dependência.
Para definir um URL de endpoint de DNS do AWS PrivateLink e uma região no arquivo secretsmanager.properties
:
drivers.vpcEndpointUrl =
endpoint URL
drivers.vpcEndpointRegion =endpoint region
Para substituir a região primária, defina a variável de ambiente AWS_SECRET_JDBC_REGION
ou faça a seguinte alteração no arquivo secretsmanager.properties
:
drivers.region =
region
Exemplos:
Estabeleça uma conexão com um banco de dados
O exemplo a seguir mostra como estabelecer uma conexão com um banco de dados usando as credenciais e informações sobre a conexão em um segredo. Assim que você tiver uma conexão, será possível usar chamadas JDBC para acessar o banco de dados. Para obter mais informações, consulte JDBC Basics
Estabelecer uma conexão especificando o endpoint e a porta
O exemplo a seguir mostra como estabelecer uma conexão com um banco de dados usando as credenciais em um segredo com um endpoint e uma porta que você especifica.
Os segredos gerenciados pelo Amazon RDS não incluem o endpoint e a porta do banco de dados. Para se conectar a um banco de dados usando credenciais principais em um segredo gerenciado pelo Amazon RDS, você as especifica em seu código.
Segredos que são replicados para outras regiões podem melhorar a latência da conexão com o banco de dados regional, mas não contêm informações diferentes de conexão em relação ao segredo da origem. Cada réplica é uma cópia do segredo de origem. Para armazenar informações de conexão regional no segredo, adicione mais pares de chave-valor para as informações de endpoint e porta das regiões.
Assim que você tiver uma conexão, será possível usar chamadas JDBC para acessar o banco de dados. Para obter mais informações, consulte JDBC Basics
Use o grupo de conexões c3p0 para estabelecer uma conexão
O exemplo a seguir mostra como estabelecer um pool de conexões com um arquivo c3p0.properties
que usa o driver para recuperar credenciais e informações de conexão do segredo. Em user
e jdbcUrl
, insira o ID do segredo para configurar o grupo de conexões. Em seguida, você pode recuperar conexões do grupo e usá-las como qualquer outra conexão de banco de dados. Para obter mais informações, consulte JDBC Basics
Para obter mais informações sobre c3p0, consulte c3p0
Usar o agrupamento de conexões c3p0 para estabelecer uma conexão especificando o endpoint e a porta
O exemplo a seguir mostra como estabelecer um pool de conexões com um arquivo c3p0.properties
que use o driver para recuperar credenciais em um segredo com um endpoint e uma porta que você especifica. Em seguida, você pode recuperar conexões do grupo e usá-las como qualquer outra conexão de banco de dados. Para obter mais informações, consulte JDBC Basics
Os segredos gerenciados pelo Amazon RDS não incluem o endpoint e a porta do banco de dados. Para se conectar a um banco de dados usando credenciais principais em um segredo gerenciado pelo Amazon RDS, você as especifica em seu código.
Segredos que são replicados para outras regiões podem melhorar a latência da conexão com o banco de dados regional, mas não contêm informações diferentes de conexão em relação ao segredo da origem. Cada réplica é uma cópia do segredo de origem. Para armazenar informações de conexão regional no segredo, adicione mais pares de chave-valor para as informações de endpoint e porta das regiões.