aws/aws-secretsmanager-jdbc

GitHub: aws/aws-secretsmanager-jdbc

AWS 官方提供的 JDBC 驱动包装库,让 Java 应用无需硬编码即可从 Secrets Manager 安全获取数据库连接凭证。

Stars: 194 | Forks: 86

# AWS Secrets Manager JDBC 库 [![Java Build](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/9fa0047aea150201.svg)](https://github.com/aws/aws-secretsmanager-jdbc/actions/workflows/CI.yml) [![Coverage](https://codecov.io/gh/aws/aws-secretsmanager-jdbc/branch/v2/graph/badge.svg?token=hCl7eBaSwn)](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, 云计算, 代码分析, 凭证管理, 域名枚举, 安全, 开源库, 搜索引擎爬虫, 数据库连接, 数据库驱动, 漏洞验证, 系统审计, 规则引擎, 超时处理, 连接池