全部產品
Search
文件中心

Key Management Service:憑據管家JDBC用戶端

更新時間:Jul 06, 2024

憑據管家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>