全部产品
Search
文档中心

Key Management Service:Klien JDBC Secrets

更新时间:Nov 10, 2025

Jika Anda terhubung ke database menggunakan Java Database Connectivity (JDBC), akun dan kata sandi database dapat disimpan dalam rahasia RDS atau rahasia generik. Anda kemudian dapat mengintegrasikan klien JDBC Secrets ke dalam aplikasi untuk mengautentikasi koneksi database menggunakan rahasia yang dikelola di Key Management Service (KMS). Topik ini menjelaskan cara menginstal dan menggunakan klien JDBC Secrets.

Ikhtisar SDK

Klien JDBC Secrets dirancang untuk skenario di mana Anda menggunakan JDBC untuk terhubung ke database. Klien secara otomatis mengambil rahasia dari KMS guna mengautentikasi koneksi database, sehingga menyederhanakan integrasi. Untuk skenario lain yang memerlukan pengambilan dan penggunaan rahasia, kami menyarankan penggunaan klien Secrets. Alternatifnya, Anda dapat menggunakan SDK instans KMS atau Alibaba Cloud SDK. Untuk informasi selengkapnya, lihat Referensi SDK.

Catatan

Operasi manajemen rahasia hanya dapat dilakukan menggunakan Alibaba Cloud SDK.

Klien JDBC Secrets menyediakan fitur-fitur berikut:

  • Mendukung JDBC, termasuk koneksi database dalam kolam koneksi seperti c3p0 dan DBCP, serta sumber data.

  • Mendukung empat jenis database: MySQL, SQL Server, PostgreSQL, dan MariaDB.

  • Mendukung laju penyegaran rahasia kustom.

Perhatian

  • Jenis rahasia yang didukung: rahasia generik dan rahasia RDS.

    • Jika menggunakan rahasia RDS, kami menyarankan penggunaan rahasia RDS terkelola akun ganda.

    • Jika menggunakan rahasia generik, nilai rahasia harus dalam format JSON berikut.

      {
          "AccountName":"<nama_pengguna_akun_database_anda>",
          "AccountPassword":"<kata_sandi_akun_database_anda>"
      }
  • Bahasa pemrograman yang didukung: Java 8 atau versi lebih baru.

  • Kolam koneksi database yang didukung: c3p0, DBCP, dan Druid.

    Penting

    Kolam koneksi HikariCP bawaan di Spring Boot tidak menangani kode kesalahan JDBC secara standar, yang dapat menyebabkan kegagalan penyegaran rahasia KMS.

Langkah 1: Buat kredensial akses

Skenario 1: Ambil nilai rahasia menggunakan gateway bersama

Anda dapat menggunakan Internet atau virtual private cloud (VPC). Metode autentikasi berbasis RAM yang didukung mencakup peran RAM instans untuk instans Elastic Compute Service (ECS), RamRoleArn, token Security Token Service (STS), dan AccessKey. Untuk informasi selengkapnya, lihat Kelola kredensial akses.

Peran RAM instans ECS

RamRoleArn

Token STS

AccessKey

ClientKey (tidak disarankan)

Skenario 2: Ambil nilai rahasia menggunakan gateway khusus (tidak disarankan)

Skenario ini menggunakan jaringan pribadi KMS. Hanya ClientKey yang dapat digunakan sebagai kredensial akses.

Langkah 2: Instal klien

Anda dapat menginstal klien JDBC Secrets di proyek Anda menggunakan Maven.

<dependency>
    <groupId>com.aliyun</groupId>
    <artifactId>aliyun-secretsmanager-jdbc</artifactId>
    <version>x.x.x</version>
</dependency>
<dependency>
  <groupId>com.aliyun</groupId>
  <artifactId>aliyun-java-sdk-core</artifactId>
  <version>4.x.x</version>
</dependency>
Catatan

Kami menyarankan agar Anda menginstal versi terbaru SDK. Untuk informasi selengkapnya tentang instalasi dan kode sumber, kunjungi aliyun-secretsmanager-jdbc.

Langkah 3: Inisialisasi klien menggunakan file konfigurasi secretsmanager.properties

Tambahkan file konfigurasi secretsmanager.properties ke proyek Anda. Parameter yang digunakan bervariasi tergantung pada kredensial akses yang dipilih.

AccessKey

## Jenis kredensial akses.
credentials_type=ak
## ID AccessKey.
credentials_access_key_id=#credentials_access_key_id#
## Rahasia AccessKey.
credentials_access_secret=#credentials_access_secret#
## Wilayah layanan KMS terkait.
cache_client_region_id=[{"regionId":"#regionId#"}]
## Laju penyegaran kustom. Nilai default: 6 jam. Nilai minimum: 5 menit. Satuan: milidetik.
refresh_secret_ttl=21600000

RamRoleArn

## Jenis kredensial akses.
credentials_type=ram_role
## ID AccessKey.
credentials_access_key_id=#credentials_access_key_id#
## Rahasia AccessKey.
credentials_access_secret=#credentials_access_secret#
## Nama sesi yang terkait dengan kredensial akses.
credentials_role_session_name=#credentials_role_session_name#
## ARN peran RAM.
credentials_role_arn=#credentials_role_arn#
## Kebijakan untuk kredensial akses.
credentials_policy=#credentials_policy#
## Wilayah layanan KMS terkait.
cache_client_region_id=[{"regionId":"#regionId#"}]
## Laju penyegaran kustom. Nilai default: 6 jam. Nilai minimum: 5 menit. Satuan: milidetik.
refresh_secret_ttl=21600000

Peran RAM instans ECS

## Jenis kredensial akses.
credentials_type=ecs_ram_role
## Nama peran RAM ECS.
credentials_role_name=#credentials_role_name#
## Wilayah layanan KMS terkait.
cache_client_region_id=[{"regionId":"#regionId#"}]
## Laju penyegaran kustom. Nilai default: 6 jam. Nilai minimum: 5 menit. Satuan: milidetik.
refresh_secret_ttl=21600000

Token STS

## Jenis kredensial akses.
credentials_type=sts
## ID AccessKey.
credentials_access_key_id=#credentials_access_key_id#
## Rahasia AccessKey.
credentials_access_secret=#credentials_access_secret#
## Nama sesi yang terkait dengan kredensial akses.
credentials_role_session_name=#credentials_role_session_name#
## ARN peran RAM.
credentials_role_arn=#credentials_role_arn#
## Kebijakan untuk kredensial akses.
credentials_policy=#credentials_policy#
## Wilayah layanan KMS terkait.
cache_client_region_id=[{"regionId":"#regionId#"}]
## Laju penyegaran kustom. Nilai default: 6 jam. Nilai minimum: 5 menit. Satuan: milidetik.
refresh_secret_ttl=21600000

ClientKey (gateway bersama)

## Jenis kredensial akses.
credentials_type=client_key
# Jalur file ClientKey.
client_key_private_key_path=#jalur file kunci privat client key Anda#
## Kata sandi dekripsi ClientKey. Anda dapat membaca kata sandi dari variabel lingkungan atau file.
client_key_password_from_env_variable=#nama variabel lingkungan kata sandi kunci privat client key Anda#
client_key_password_from_file_path=#jalur file kata sandi kunci privat client key Anda#
## Wilayah layanan KMS terkait.
cache_client_region_id=[{"regionId":"#regionId#"}]
## Laju penyegaran kustom. Nilai default: 6 jam. Nilai minimum: 5 menit. Satuan: milidetik.
## Konfigurasi berikut mengatur laju penyegaran rahasia menjadi 1 jam.
refresh_secret_ttl=3600000

ClientKey (gateway khusus)

  • Metode 1: Dapatkan kata sandi client key dari variabel lingkungan

    cache_client_dkms_config_info=[{"regionId":"<DKMS_REGION_ID>","endpoint":"<DKMS_ENDPOINT>","passwordFromEnvVariable":"<PASSWORD_ENV_VARIABLE>","clientKeyFile":"<CLIENT_KEY_FILE_PATH>","ignoreSslCerts":false,"caFilePath":"<CA_CERTIFICATE_FILE_PATH>"}]

    Sebelum mengonfigurasi file, definisikan variabel lingkungan dengan nama kustom dan atur kata sandi client key sebagai nilainya. Kemudian, ganti <PASSWORD_ENV_VARIABLE> dengan nama variabel Anda.

    Contoh:

    cache_client_dkms_config_info=[{"regionId":"ap-southeast-1","endpoint":"kst-hzz634e67d126u9p9****.cryptoservice.kms.aliyuncs.com","passwordFromEnvVariable":"passwordFromEnvVariable","clientKeyFile":"C:\RamSecretPlugin\src\main\resources\clientKey_KAAP.json","ignoreSslCerts":false,"caFilePath":"C:\RamSecretPlugin\src\main\resources\PrivateKmsCA_kst-hzz634e67d126u9p9****.pem"}]
  • Metode 2: Dapatkan kata sandi client key dari file

    Nama file default untuk Client Key Password (ClientKeyPassword) setelah diunduh adalah clientKey_****_Password.txt. Anda dapat mengganti nama file tersebut, tetapi perlu mengganti <jalur file Client Key Anda> dalam nilai cache_client_dkms_config_info dengan jalur file baru.

    cache_client_dkms_config_info=[{"regionId":"<regionId dkms Anda >","endpoint":"<endpoint dkms Anda>","passwordFromFilePath":"< jalur file kata sandi Anda >","clientKeyFile":"<jalur file Client Key Anda>","ignoreSslCerts":false,"caFilePath":"<jalur file sertifikat CA Anda>"}]

    Contoh:

    cache_client_dkms_config_info=[{"regionId":"cn-hangzhou","endpoint":"kst-hzz634e67d126u9p9****.cryptoservice.kms.aliyuncs.com","passwordFromFilePath":"C:\RamSecretPlugin\src\main\resources\clientKeyPassword.txt","clientKeyFile":"C:\RamSecretPlugin\src\main\resources\clientKey_KAAP.json","ignoreSslCerts":false,"caFilePath":"C:\RamSecretPlugin\src\main\resources\PrivateKmsCA_kst-hzz634e67d126u9p9****.pem"}]

Deskripsi parameter

Parameter

Deskripsi

Catatan

regionId

ID wilayah instans KMS.

Untuk ID wilayah tertentu, lihat Wilayah dan zona.

endpoint

Nama domain instans KMS, dalam format {ID instans}.kms.aliyuncs.com.

Kunjungi halaman Instances dan periksa Instance VPC Endpoint di halaman detail instans, yang merupakan endpoint.

clientKeyFile

Jalur absolut atau relatif ke file kunci klien dalam format JSON.

  • File kunci klien: Application Access Secret yang diunduh saat Anda membuat kunci klien di titik akses aplikasi (AAP). Nama file default setelah diunduh adalah ClientKey_******.json.

  • Kata sandi: Kata sandi kunci klien yang diunduh saat Anda membuat kunci klien di AAP. Nama file default setelah diunduh adalah ClientKey_******_password.txt.

Penting

Setiap kunci klien memiliki kata sandi unik, keduanya dihasilkan hanya saat pembuatan. Jika Anda kehilangan salah satunya, Anda harus membuat kunci klien baru di AAP. Untuk petunjuknya, lihat Buat titik akses aplikasi.

passwordFromFilePath atau passwordFromEnvVariable

  • passwordFromFilePath: Mendapatkan kata sandi dari file. Nilainya adalah jalur absolut atau relatif ke file yang berisi kata sandi kunci klien.

  • passwordFromEnvVariable: Mendapatkan kata sandi dari variabel lingkungan. Nilainya adalah nama variabel lingkungan yang nilainya adalah kata sandi kunci klien.

ignoreSslCerts

Menentukan apakah akan mengabaikan pemeriksaan validitas pada sertifikat SSL instans KMS. Instans KMS memiliki sertifikat SSL bawaan yang digunakan untuk verifikasi identitas dan komunikasi terenkripsi SSL atau TLS. Nilai yang valid:

  • true: Pemeriksaan validitas diabaikan.

    Jika nilainya true, parameter caFilePath tidak diperlukan.

  • false: Pemeriksaan validitas dilakukan.

Di lingkungan produksi, atur parameter ini ke false.

caFilePath

Jalur absolut atau relatif ke file sertifikat Otoritas Sertifikat (CA) instans KMS.

Sertifikat CA memvalidasi sertifikat SSL instans KMS, termasuk pemeriksaan terhadap penerbit sertifikat, periode validitasnya, dan apakah nama domain cocok dengan endpoint KMS.

Kunjungi halaman Instances. Di halaman detail instans, klik Download di bagian Instance CA Certificate.

Langkah 4: Gunakan klien JDBC secrets untuk terhubung ke database

Penting

Contoh ini hanya menyediakan properti yang perlu dimodifikasi. Anda dapat mengonfigurasi properti lain sesuai kebutuhan.

Terhubung ke database menggunakan JDBC

  • Database MySQL

    Catatan

    Ganti #nama-rahasia-mysql-anda#, <ip-mysql-anda>, <port-mysql-anda>, dan <nama-database-anda> dalam kode contoh dengan nama rahasia, alamat IP server, port, dan nama database yang sebenarnya.

    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.SQLException;
    
    public class SecretManagerJDBCSample {
        public static void main(String[] args) throws Exception {
            // Muat klien JDBC secrets Alibaba Cloud, com.aliyun.kms.secretsmanager.MysqlSecretsManagerSimpleDriver.
            Class.forName("com.aliyun.kms.secretsmanager.MysqlSecretsManagerSimpleDriver");
            Connection connect = null;
            try {
                connect = DriverManager.getConnection("secrets-manager:mysql://<ip-mysql-anda>:<port-mysql-anda>/<nama-database-anda>", "#nama-rahasia-mysql-anda#","");
            } catch(SQLException e) {
                e.printStackTrace();
            }
        }
    }
  • Database SQL Server

    Catatan

    Ganti #nama-rahasia-sqlserver-anda#, <ip-sqlserver-anda>, <port-sqlserver-anda>, dan <nama-database-anda> dalam kode contoh dengan nama rahasia, alamat IP server, port, dan nama database Anda.

    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.SQLException;
    
    public class SecretManagerJDBCSqlServerSample {
    
        public static void main(String[] args) throws Exception{
            // Muat klien JDBC secrets Alibaba Cloud, com.aliyun.kms.secretsmanager.MssqlSecretsManagerSimpleDriver.
            Class.forName("com.aliyun.kms.secretsmanager.MssqlSecretsManagerSimpleDriver");
            Connection connect = null;
            try {
                connect = DriverManager.getConnection("secrets-manager:sqlserver://<ip-sqlserver-anda>:<port-sqlserver-anda>;databaseName=<nama-database-anda>", "#nama-rahasia-sqlserver-anda#", "");
            }  catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
  • Database PostgreSQL

    Catatan

    Ganti #nama-rahasia-postgresql-anda#, <ip-postgresql-anda>, <port-postgresql-anda>, dan <nama-database-anda> dalam kode contoh dengan nama rahasia, alamat IP server, port, dan nama database yang sebenarnya.

    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.SQLException;
    
    public class SecretManagerJDBCPostgreSQLSample {
        public static void main(String[] args) throws Exception {
            // Muat klien JDBC secrets Alibaba Cloud, com.aliyun.kms.secretsmanager.PostgreSQLSecretManagerSimpleDriver.
            Class.forName("com.aliyun.kms.secretsmanager.PostgreSQLSecretManagerSimpleDriver");
            Connection connect = null;
            try {
                connect = DriverManager.getConnection("secrets-manager:postgresql://<ip-postgresql-anda>:<port-postgresql-anda>/<nama-database-anda>", "#nama-rahasia-postgresql-anda#", "");
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
  • Database MariaDB

    Catatan

    Ganti #nama-rahasia-mariadb-anda#, <ip-mariadb-anda>, <port-mariadb-anda>, dan <nama-database-anda> dalam kode contoh dengan nama rahasia, alamat IP server, port, dan nama database yang sebenarnya.

    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.SQLException;
    
    public class SecretManagerJDBCMarialDBSample {
    
    	public static void main(String[] args) throws Exception{
    		// Muat klien JDBC secrets Alibaba Cloud, com.aliyun.kms.secretsmanager.MariaDBSecretManagerSimpleDriver.
    		Class.forName("com.aliyun.kms.secretsmanager.MariaDBSecretManagerSimpleDriver");
    		Connection connect = null;
    		try {
    			connect = DriverManager.getConnection("secrets-manager:mariadb://<ip-mariadb-anda>:<port-mariadb-anda>/<nama-database-anda>", "#nama-rahasia-mariadb-anda#", "");
    		}  catch (SQLException e) {
    			e.printStackTrace();
    		}
    	}
    }

Terhubung ke database menggunakan kolam koneksi

Konfigurasikan c3p0.user, c3p0.driverClass, dan c3p0.jdbcUrl dalam file konfigurasi c3p0.properties. Atur c3p0.user ke nama rahasia dan c3p0.driverClass ke nama kelas driver JDBC Secrets Alibaba Cloud. Nilai c3p0.jdbcUrl harus diawali dengan secrets-manager.

  • Database MySQL

    Catatan

    Ganti #nama-rahasia-mysql-anda#, <ip-mysql-anda>, <port-mysql-anda>, dan <nama-database-anda> dalam kode contoh dengan nama rahasia, alamat IP server, port, dan nama database yang sebenarnya.

    c3p0.user=#nama-rahasia-mysql-anda#
    c3p0.driverClass=com.aliyun.kms.secretsmanager.MysqlSecretsManagerSimpleDriver
    c3p0.jdbcUrl=secrets-manager:mysql://<ip-mysql-anda>:<port-mysql-anda>/<nama-database-anda>
  • Database SQL Server

    Catatan

    Ganti #nama-rahasia-sqlserver-anda#, <ip-sqlserver-anda>, <port-sqlserver-anda>, dan <nama-database-anda> dalam kode contoh dengan nama rahasia, alamat IP server, port, dan nama database yang sebenarnya.

    c3p0.user=#nama-rahasia-sqlserver-anda#
    c3p0.driverClass=com.aliyun.kms.secretsmanager.MysqlSecretsManagerSimpleDriver
    c3p0.jdbcUrl=secrets-manager:sqlserver://<ip-sqlserver-anda>:<port-sqlserver-anda>/<nama-database-anda>
  • Database PostgreSQL

    Catatan

    Ganti #nama-rahasia-postgresql-anda#, <ip-postgresql-anda>, <port-postgresql-anda>, dan <nama-database-anda> dalam kode contoh dengan nama rahasia, alamat IP server, port, dan nama database yang sebenarnya.

    c3p0.user=#nama-rahasia-postgresql-anda#
    c3p0.driverClass=com.aliyun.kms.secretsmanager.MysqlSecretsManagerSimpleDriver
    c3p0.jdbcUrl=secrets-manager:postgresql://<ip-postgresql-anda>:<port-postgresql-anda>/<nama-database-anda>
  • Database MariaDB

    Catatan

    Ganti #nama-rahasia-mariadb-anda#, <ip-mariadb-anda>, <port-mariadb-anda>, dan <nama-database-anda> dalam kode contoh dengan nama rahasia, alamat IP server, port, dan nama database yang sebenarnya.

    c3p0.user=#nama-rahasia-mariadb-anda#
    c3p0.driverClass=com.aliyun.kms.secretsmanager.MysqlSecretsManagerSimpleDriver
    c3p0.jdbcUrl=secrets-manager:mariadb://<ip-mariadb-anda>:<port-mariadb-anda>/<nama-database-anda>

Terhubung ke database menggunakan sumber data

Contoh ini menggunakan ComboPooledDataSource c3p0 dan database MySQL. Tambahkan konfigurasi berikut ke file konfigurasi Spring.

Catatan

Ganti #nama-rahasia-mysql-anda#, <ip-mysql-anda>, <port-mysql-anda>, dan <nama-database-anda> dalam kode contoh dengan nama rahasia, alamat IP server, port, dan nama database yang sebenarnya.

<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" >
      <property name="driverClass" value="com.aliyun.kms.secretsmanager.MysqlSecretsManagerSimpleDriver" />
      <property name="user" value="#nama-rahasia-mysql-anda#" />
      <property name="jdbcUrl" value="secrets-manager:mysql://<ip-mysql-anda>:<port-mysql-anda>/<nama-database-anda>" />
      <property name="maxPoolSize" value="***" />
      <property name="minPoolSize" value="***" />
      <property name="initialPoolSize" value="***" />
  </bean>
  <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate" >
      <property name="dataSource" ref="dataSource" />
  </bean>
Catatan

Atur nilai parameter maxPoolSize, minPoolSize, dan initialPoolSize sesuai kebutuhan.

Terhubung ke database menggunakan kolam koneksi Druid

Contoh ini menggunakan database MySQL. Anda harus memodifikasi properti berikut dalam file konfigurasi.

Catatan

Ganti #nama-rahasia-mysql-anda#, <ip-mysql-anda>, <port-mysql-anda>, dan <nama-database-anda> dalam kode contoh dengan nama rahasia, alamat IP server, port, dan nama database yang sebenarnya.

  • Menggunakan file konfigurasi properties

    username=#nama-rahasia-mysql-anda#
    driverClassName=com.aliyun.kms.secretsmanager.MysqlSecretsManagerSimpleDriver
    url=secrets-manager:mysql://<ip-mysql-anda>:<port-mysql-anda>/<nama-database-anda>
  • Menggunakan konfigurasi bean

    • Metode 1: File konfigurasi XML

      <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close"> 
           <property name="username" value="${nama-rahasia-mysql-anda}" />
           <property name="driverClassName" value="com.aliyun.kms.secretsmanager.MysqlSecretsManagerSimpleDriver" />
           <property name="url" value="secrets-manager:mysql://<ip-mysql-anda>:<port-mysql-anda>/<nama-database-anda>" />
      </bean>
      
    • Metode 2: Penyuntikan properti

      Buat kelas driver di aplikasi untuk memuat informasi koneksi database.

      @Configuration
      public class DataConfig {
      
          @Value("${nama-rahasia-mysql-anda}")
          private String username;
      
          @Value("com.aliyun.kms.secretsmanager.MysqlSecretsManagerSimpleDriver")
          private String driverClassName;
      
          @Value("secrets-manager:mysql://<ip-mysql-anda>:<port-mysql-anda>/<nama-database-anda>")
          private String url;
      
          @Bean(name = "dataSource",initMethod = "init",destroyMethod = "close")
          public DruidDataSource dataSource(){
              DruidDataSource druidDataSource = new DruidDataSource();
              druidDataSource.setUsername(username);
              druidDataSource.setDriverClassName(driverClassName);
              druidDataSource.setUrl(url);
              return druidDataSource;
          }
      }