憑據管家JDBC客戶端(SecretsManager JDBC)基于KMS憑據管家動態RDS憑據,封裝了業務邏輯、最佳實踐和設計模式,更易于開發者在業務系統中集成。憑據管家JDBC客戶端主要用于在數據庫應用中使用動態RDS憑據,告別對數據庫賬號密碼機密信息的硬編碼。
功能特性
- 提供通用的Java數據庫連接JDBC(Java Database Connectivity)驅動,支持簡單的數據庫連接。
- 通過c3p0和DBCP數據庫連接池連接數據庫。
- 支持使用AccessKey、STS和ECS實例RAM角色等多種訪問方式獲取動態RDS憑據。
- 支持用戶自定義的憑據刷新頻率。
使用限制
- 僅支持動態RDS憑據,建議您使用雙賬號托管的動態RDS憑據。關于如何創建動態RDS憑據,請參見創建動態RDS憑據。
- 僅支持Java 1.8及以上版本。
- 僅支持MySQL、SQL Server、PostgreSQL和MariaDB四種數據庫類型。
安裝SDK
憑據管家JDBC客戶端支持Java語言,您可以訪問憑據管家JDBC開源代碼倉庫了解更多安裝信息。
您可以通過Maven的方式安裝Java SDK,需要添加的依賴信息如下:
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>aliyun-secretsmanager-jdbc</artifactId>
<version>x.x.x</version>
</dependency>
說明 憑據管家JDBC客戶端具體版本,請參見aliyun-secretsmanager-jdbc release。
配置訪問方式
阿里云憑據管家JDBC客戶端啟動時需要通過解析配置文件(secretsmanager.properties)加載訪問方式,不同訪問方式的配置文件示例如下:
- 通過AAP Client Key訪問(推薦)
關于如何創建Client Key,請參見為AAP綁定Client Key。
說明 憑據管家JDBC客戶端在1.0.7及以上版本支持基于Client Key應用接入點訪問憑據管家。## 配置訪問方式。 credentials_type=client_key ## 讀取Client Key的解密密碼:支持從環境變量或者文件讀取。 client_key_password_from_env_variable=#your client key private key password environment variable name# client_key_password_from_file_path=#your client key private key password file path# ## 讀取Client Key的私鑰文件。 client_key_private_key_path=#your client key private key file path# ## 配置關聯的KMS地域。 cache_client_region_id=[{"regionId":"#regionId#"}]
- 通過AccessKey訪問
## 配置訪問方式。 credentials_type=ak ## 配置AccessKey ID。 credentials_access_key_id=#credentials_access_key_id# ## 配置AccessKey Secret。 credentials_access_secret=#credentials_access_secret# ## 配置關聯的KMS地域。 cache_client_region_id=[{"regionId":"#regionId#"}] ## 用戶自定義的刷新頻率。默認為6小時,最小值為5分鐘,單位為毫秒。 refresh_secret_ttl=21600000
說明 關于如何獲取AccessKey,請參見獲取AccessKey。 - 通過STS訪問
## 配置訪問方式。 credentials_type=sts ## 配置AccessKey ID。 credentials_access_key_id=#credentials_access_key_id# ## 配置AccessKey Secret。 credentials_access_secret=#credentials_access_secret# ## 配置訪問憑據Session名稱。 credentials_role_session_name=#credentials_role_session_name# ## 配置RAM角色ARN。 credentials_role_arn=#credentials_role_arn# ## 配置訪問憑據Policy。 credentials_policy=#credentials_policy# ## 配置關聯的KMS地域。 cache_client_region_id=[{"regionId":"#regionId#"}] ## 用戶自定義的刷新頻率。默認為6小時,最小值為5分鐘,單位為毫秒。 refresh_secret_ttl=21600000
說明 關于如何獲取AccessKey,請參見獲取AccessKey。 - 通過ECS實例RAM角色訪問
## 配置訪問方式。 credentials_type=ecs_ram_role ## 配置ECS實例RAM角色名稱。 credentials_role_name=#credentials_role_name# ## 配置關聯的KMS地域。 cache_client_region_id=[{"regionId":"#regionId#"}] ## 用戶自定義的刷新頻率。默認為6小時,最小值為5分鐘,單位為毫秒。 refresh_secret_ttl=21600000
說明 關于如何創建并授權ECS實例RAM角色,請參見從ECS實例安全訪問KMS。
示例代碼
- 使用JDBC方式訪問數據庫
使用JDBC方式訪問MySQL示例代碼如下:
import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; public class SecretManagerJDBCSample { public static void main(String[] args) throws Exception { Class.forName("com.aliyun.kms.secretsmanager.MysqlSecretsManagerSimpleDriver"); Connection connect = null; try { connect = DriverManager.getConnection("secrets-manager:mysql://<your-mysql-ip>:<your-mysql-port>/<your-database-name>", "#your-mysql-secret-name#",""); } catch(SQLException e) { e.printStackTrace(); } } }
- 使用數據庫連接池c3p0訪問數據庫
配置c3p0配置文件(c3p0.properties)示例代碼如下:
c3p0.user=#your-mysql-secret-name# c3p0.driverClass=com.aliyun.kms.secretsmanager.MysqlSecretsManagerSimpleDriver c3p0.jdbcUrl=secrets-manager:mysql://<your-mysql-ip>:<your-mysql-port>/<your-database-name>
- 使用數據庫開源框架訪問數據庫
配置Spring配置文件示例代碼如下:
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" > <property name="driverClass" value="com.aliyun.kms.secretsmanager.MysqlSecretsManagerSimpleDriver" /> <property name="user" value="#your-mysql-secret-name#" /> <property name="jdbcUrl" value="secrets-manager:mysql://<your-mysql-ip>:<your-mysql-port>/<your-database-name>" /> <property name="maxPoolSize" value="500" /> <property name="minPoolSize" value="5" /> <property name="initialPoolSize" value="20" /> </bean> <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate" > <property name="dataSource" ref="dataSource" /> </bean>