全部产品
Search
文档中心

Key Management Service:Menghubungkan aplikasi ke Secrets Manager

更新时间:Jul 02, 2025

Anda dapat menghubungkan aplikasi ke Secrets Manager menggunakan beberapa metode. Setelah itu, aplikasi dapat menggunakan rahasia dinamis.

Metode

Tabel berikut menjelaskan metode yang dapat digunakan untuk menghubungkan aplikasi ke Secrets Manager.

Metode

Deskripsi

Skenario

KMS SDK

KMS SDK memungkinkan Anda membuat Permintaan HTTPS untuk memanfaatkan KMS API dengan lebih baik.

  • Mengambil nilai rahasia dengan laju yang kurang sering.

  • Membuat atau menghapus rahasia, atau menambah versi baru dari nilai rahasia.

Secrets Manager Client

Secrets Manager Client memungkinkan Anda mengonfigurasi frekuensi di mana Secrets Manager Client mendapatkan rahasia dari Secrets Manager dan menyegarkan cache.

  • Mengambil nilai rahasia pada klien secara berkala atau dengan laju yang sering.

  • Menjalankan operasi terkait nilai rahasia.

Secrets Manager JDBC

Secrets Manager JDBC memungkinkan Anda menggunakan rahasia yang dikelola dalam Secrets Manager dengan membangun koneksi Java Database Connectivity (JDBC).

Menggunakan rahasia ApsaraDB RDS dinamis dan program Java untuk mengakses database. Untuk informasi lebih lanjut, lihat Ikhtisar Rahasia Dinamis ApsaraDB RDS.

Plugin rahasia terkelola untuk Alibaba Cloud SDK

Plugin rahasia terkelola untuk Alibaba Cloud SDK memungkinkan Anda menggunakan rahasia Resource Access Management (RAM) dinamis untuk mengakses layanan Alibaba Cloud dengan cara yang lebih efisien.

Menggunakan rahasia RAM dinamis untuk mengakses layanan Alibaba Cloud. Untuk informasi lebih lanjut, lihat Ikhtisar Rahasia Dinamis RAM.

Plugin Kubernetes Secrets Manager

Plugin Kubernetes Secrets Manager memungkinkan Anda mengintegrasikan Secrets Manager dengan sistem Anda secara cepat dan tanpa kode.

Memperbarui konfigurasi secara berkala tanpa kode.

Menggunakan KMS SDK

Contoh berikut menunjukkan cara menggunakan KMS SDK untuk Java dan menggunakan rahasia ApsaraDB RDS dinamis dalam aplikasi. Jika Anda menggunakan jenis rahasia lain selain rahasia ApsaraDB RDS dinamis, Anda juga dapat menggunakan metode ini.

  1. Dapatkan deklarasi dependensi KMS SDK untuk Java.

    Untuk informasi lebih lanjut tentang versi SDK yang diperlukan, lihat Ikhtisar SDK. Contoh pernyataan:

     <dependency>
        <groupId>com.aliyun</groupId>
        <artifactId>aliyun-java-sdk-core</artifactId>
        <version>4.5.16</version>
      </dependency>
      <dependency>
        <groupId>com.aliyun</groupId>
        <artifactId>aliyun-java-sdk-kms</artifactId>
        <version>2.12.0</version>
      </dependency>
      <dependency>
        <groupId>org.apache.commons</groupId>
        <artifactId>commons-lang3</artifactId>
        <version>3.4</version>
      </dependency> 
  2. Hubungkan aplikasi ke Secrets Manager untuk mendapatkan nama pengguna dan kata sandi akun yang digunakan untuk terhubung ke database. Kemudian, buat koneksi ke database.

    Catatan

    Pasangan AccessKey dari akun Alibaba Cloud memiliki izin untuk semua Operasi API. Menggunakan pasangan AccessKey untuk melakukan operasi adalah operasi berisiko tinggi. Selain itu, gunakan pengguna RAM untuk memanggil Operasi API atau melakukan pemeliharaan rutin. Kami menyarankan agar Anda tidak menyimpan ID AccessKey dan Secret AccessKey di kode proyek Anda. Jika Anda melakukannya, pasangan AccessKey mungkin bocor dan keamanan semua sumber daya yang dimiliki oleh akun Anda mungkin terganggu.

    Dalam contoh ini, pasangan AccessKey disimpan dalam variabel lingkungan ALIBABA_CLOUD_ACCESS_KEY_ID dan ALIBABA_CLOUD_ACCESS_KEY_SECRET untuk mengimplementasikan otentikasi identitas.

    Contoh kode:

    package com.aliyun.kms.samples;
    
    import java.util.Map;
    import com.google.gson.Gson;
    import com.aliyuncs.DefaultAcsClient;
    import com.aliyuncs.exceptions.ClientException;
    import com.aliyuncs.http.FormatType;
    import com.aliyuncs.http.MethodType;
    import com.aliyuncs.http.ProtocolType;
    import com.aliyuncs.kms.model.v20160120.GetSecretValueRequest;
    import com.aliyuncs.kms.model.v20160120.GetSecretValueResponse;
    import com.aliyuncs.profile.DefaultProfile;
    import com.aliyuncs.profile.IClientProfile;
    import org.apache.commons.lang3.tuple.Pair;
    
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.SQLException;
    
    public class RdsSecretSampleCode {
    
        private static final String MYSQL_JDBC_DRIVER = "com.mysql.jdbc.Driver";
        private static final String MSSQL_JDBC_DRIVER = "com.microsoft.sqlserver.jdbc.SQLServerDriver";
    
        private static KmsClient kmsClient;
    
        static {
            kmsClient = KmsClient.getKMSClient("<regionId>", System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"), System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"));
        }
    
        static class KmsClient {
            private DefaultAcsClient acsClient;
    
            private KmsClient(DefaultAcsClient acsClient) {
                this.acsClient = acsClient;
            }
    
            private static KmsClient getKMSClient(String regionId, String accessKeyId, String accessKeySecret) {
                IClientProfile profile = DefaultProfile.getProfile(regionId, accessKeyId, accessKeySecret);
                DefaultAcsClient client = new DefaultAcsClient(profile);
                return new KmsClient(client);
            }
        }
    
        // Dapatkan string koneksi database yang dibuat pada instance ApsaraDB RDS for MySQL dengan menggunakan rahasia yang diperoleh.
        public static Connection getMySQLConnectionBySecret(String secretName, String jdbcUrl) throws ClassNotFoundException, SQLException, ClientException {
            Class.forName(MYSQL_JDBC_DRIVER);
            Pair<String, String> userAndPasswordPair = getUserAndPasswordPair(secretName);
            return DriverManager.getConnection(jdbcUrl, userAndPasswordPair.getKey(), userAndPasswordPair.getValue());
        }
    
        // Dapatkan string koneksi database yang dibuat pada instance Microsoft SQL Server dengan menggunakan rahasia yang diperoleh.
        public static Connection getMSSQLConnectionBySecret(String secretName, String jdbcUrl) throws ClassNotFoundException, SQLException, ClientException {
            Class.forName(MSSQL_JDBC_DRIVER);
            Pair<String, String> userAndPasswordPair = getUserAndPasswordPair(secretName);
            return DriverManager.getConnection(jdbcUrl, userAndPasswordPair.getKey(), userAndPasswordPair.getValue());
        }
    
        // Dapatkan nama pengguna dan kata sandi akun yang digunakan untuk terhubung ke database dari rahasia yang diperoleh.
        private static Pair<String, String> getUserAndPasswordPair(String secretName) throws ClientException {
            final GetSecretValueRequest request = new GetSecretValueRequest();
            request.setProtocol(ProtocolType.HTTPS);
            request.setAcceptFormat(FormatType.JSON);
            request.setMethod(MethodType.POST);
            request.setSecretName(secretName);
            GetSecretValueResponse response = kmsClient.acsClient.getAcsResponse(request);
            Map<String,String> map = new Gson().fromJson(response.getSecretData(), Map.class);
            return Pair.of(map.get("AccountName"), map.get("AccountPassword"));
        }
    }