aws/aws-secretsmanager-jdbc
GitHub: aws/aws-secretsmanager-jdbc
AWS 官方提供的 JDBC 驱动包装库,让 Java 应用无需硬编码即可从 Secrets Manager 安全获取数据库连接凭证。
Stars: 194 | Forks: 86
# AWS Secrets Manager JDBC 库
[](https://github.com/aws/aws-secretsmanager-jdbc/actions/workflows/CI.yml)
[](https://codecov.io/gh/aws/aws-secretsmanager-jdbc)
**AWS Secrets Manager JDBC 库**使 Java 开发人员能够使用存储在 AWS Secrets Manager 中的密钥轻松连接到 SQL 数据库。
## 许可证
该库根据 Apache 2.0 许可证授权。
## 功能特性
- 为常见的 JDBC 驱动程序提供包装器,实现简单的数据库连接
- 通过 c3p0 提供数据库连接池支持
## 从源码构建
从 GitHub 下载代码后,您可以使用 Maven 进行构建。
- 要在构建中禁用 GPG 签名,请使用以下命令:`mvn clean install -Dgpg.skip=true`
- 要构建默认(非 shaded)JAR,请使用以下命令:`mvn clean install`
- 要构建包含所有依赖项的 shaded(uber)JAR,请使用以下命令:`mvn clean install -Pshade`
shaded JAR 将生成在 `target/` 目录中,并带有 `-shaded` 分类器,例如:`target/aws-secretsmanager-jdbc-2.0.3-shaded.jar`
## 使用说明
使用 SQL 连接库的推荐方式是通过 Maven 引入。最新发布版本可在以下网址找到:https://mvnrepository.com/artifact/com.amazonaws.secretsmanager/aws-secretsmanager-jdbc
```
com.amazonaws.secretsmanager
aws-secretsmanager-jdbc
2.0.0
```
要使用最新构建版本(预发布版),请不要忘记启用从 Maven 下载 snapshot jars。
```
allow-snapshots
true
snapshots-repo
https://aws.oss.sonatype.org/content/repositories/snapshots
false
true
```
### 使用示例
我们提供的数据库驱动程序会拦截对真实数据库驱动程序的调用,并将 secret ID 替换为实际的登录凭证。
这可以防止将数据库凭证硬编码到您的应用程序代码中。
以下是一个使用密钥同时解析 endpoint 和登录凭证的示例。
```
// Load the JDBC driver
Class.forName( "com.amazonaws.secretsmanager.sql.AWSSecretsManagerPostgreSQLDriver" ).newInstance();
// Retrieve the connection info from the secret using the secret ARN
String URL = "secretId";
// Populate the user property with the secret ARN to retrieve user and password from the secret
Properties info = new Properties( );
info.put( "user", "secretId" );
// Establish the connection
conn = DriverManager.getConnection(URL, info);
```
要指定自定义的 endpoint 和端口而不是从密钥中解析,请将 `jdbc-secretsmanager` 前缀与您的数据库信息一起使用。
```
// Options to resolve the connection information
// Set url to secret arn to resolve endpoint and port from secret
String URL = "secretId";
// Use jdbc-secretsmanager prefix to specify endpoint and port instead of resolving from secret
String URL = "jdbc-secretsmanager:postgresql://example.com:5432/database";
```
密钥应采用正确的 JSON 格式。有关更多信息,请参阅 [AWS Secrets Manager 文档](https://docs.aws.amazon.com/secretsmanager/latest/userguide/reference_secret_json_structure)。例如:
```
{
"host": "",
"username": "",
"password": "",
"dbname": "",
"port": ""
}
```
我们支持多种驱动程序。有关更多信息,请参阅 [AWS Secrets Manager JDBC 文档](https://docs.aws.amazon.com/secretsmanager/latest/userguide/retrieving-secrets_jdbc)。
## 凭证
此库使用[默认凭证提供程序链](https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/credentials.html)。可以通过以下选项覆盖某些默认设置:
1. 在 `secretsmanager.properties` 文件中设置 PrivateLink DNS endpoint URL 和区域:
```
drivers.vpcEndpointUrl= #The endpoint URL
drivers.vpcEndpointRegion= #The endpoint region
```
2. 通过将 `AWS_SECRET_JDBC_REGION` 环境变量设置为首选区域,或者通过 `secretsmanager.properties` 文件来覆盖主区域:
```
drivers.region= #The region to use.
```
3. 通过在 `secretsmanager.properties` 文件中进行以下设置来启用后量子 TLS (PQTLS):
```
drivers.postQuantumTlsEnabled=true
```
有关 AWS SDK 中后量子 TLS 的更多信息,请参阅 [AWS SDK for Java 文档](https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/http-configuration.html#post-quantum-tls)。
**注意**:PQ-TLS 使用依赖于系统库的 AWS Common Runtime (CRT),目前在 macOS 或 Windows 上可能无法按预期工作 ([参考](https://github.com/awslabs/aws-crt-java#tls-behavior))。
如果此驱动程序运行在 EKS 上,该库可能会获取其运行节点的凭证,而不是 service account 角色的凭证 ([问题](https://github.com/aws/aws-secretsmanager-jdbc/issues/55))。要解决此问题,请将 `software.amazon.awssdk:sts` 的版本 `2` 作为依赖项添加到您的 Gradle/Maven 项目文件中。
标签:Amazon Web Services, Apache 2.0, AWS, c3p0, DPI, JDBC, JS文件枚举, Maven, Secrets Manager, SQL, StruQ, 云计算, 代码分析, 凭证管理, 域名枚举, 安全, 开源库, 搜索引擎爬虫, 数据库连接, 数据库驱动, 漏洞验证, 系统审计, 规则引擎, 超时处理, 连接池