Manajemen rahasia Spring Cloud Azure

Artikel ini berlaku untuk: ✔️ Versi 4.14.0 ✔️ Versi 5.8.0

Konstruksi PropertySource Spring Cloud Azure yang menyimpan rahasia yang disimpan di Rahasia Azure Key Vault.

Penyiapan dependensi

<dependency>
    <groupId>com.azure.spring</groupId>
    <artifactId>spring-cloud-azure-starter-keyvault-secrets</artifactId>
</dependency>

Tip

Kami juga menyediakan spring-cloud-azure-starter-keyvault untuk mendukung semua fitur Key Vault. Jika Anda memilih untuk menggunakannya, spring.cloud.azure.keyvault.enable adalah properti untuk dikonfigurasi dan nilai defaultnya adalah true. Anda kemudian dapat menggunakan spring.cloud.azure.keyvault.<keyvault-service>.enable untuk menonaktifkan layanan yang tidak diperlukan.

Penggunaan dasar

Jika Anda ingin mengautentikasi oleh client-id dan client-secret, properti berikut diperlukan:

Properti Konfigurasi

spring:
  cloud:
    azure:
      keyvault:
        secret:
          property-sources:
            - name: key-vault-property-source-1
              endpoint: ${ENDPOINT_1}
            - name: key-vault-property-source-2
              endpoint: ${ENDPOINT_2}

Kode Java

@SpringBootApplication
public class SampleApplication implements CommandLineRunner {

    @Value("${sampleProperty1}")
    private String sampleProperty1;
    @Value("${sampleProperty2}")
    private String sampleProperty2;
    @Value("${samplePropertyInMultipleKeyVault}")
    private String samplePropertyInMultipleKeyVault;

    public static void main(String[] args) {
        SpringApplication.run(SampleApplication.class, args);
    }

    public void run(String[] args) {
        System.out.println("sampleProperty1: " + sampleProperty1);
        System.out.println("sampleProperty2: " + sampleProperty2);
        System.out.println("samplePropertyInMultipleKeyVault: " + samplePropertyInMultipleKeyVault);
    }
}

Penggunaan tingkat lanjut

Karakter khusus dalam nama properti

Nama rahasia Key Vault hanya mendukung karakter di [0-9a-zA-Z-]. Untuk informasi selengkapnya, lihat bagianNama vault dan Nama objek dari gambaran umum kunci, rahasia, dan sertifikat Azure Key Vault. Jika nama properti Anda berisi karakter lain, Anda bisa menggunakan solusi yang dijelaskan di bagian berikut.

Gunakan - alih-alih . dalam nama rahasia

. tidak didukung dalam nama rahasia. Jika aplikasi Anda memiliki nama properti yang berisi ., seperti spring.datasource.url, ganti . dengan - saat menyimpan rahasia di Azure Key Vault. Misalnya, simpan spring-datasource-url di Azure Key Vault. Dalam aplikasi, Anda masih dapat menggunakan spring.datasource.url untuk mengambil nilai properti.

Catatan

Metode ini tidak dapat memenuhi persyaratan seperti spring.datasource-url. Saat Anda menyimpan spring-datasource-url di Key Vault, hanya spring.datasource.url dan spring-datasource-url didukung untuk mengambil nilai properti, tetapi spring.datasource-url tidak didukung. Untuk menangani kasus ini, lihat bagian Menggunakan tempat penampung properti.

Menggunakan tempat penampung properti

Misalnya, Anda mengatur properti ini di file application.properties Anda:

property.with.special.character__=${propertyWithoutSpecialCharacter}

Aplikasi akan mendapatkan propertyWithoutSpecialCharacter nama kunci dan menetapkan nilainya ke property.with.special.character__.

Peka huruf besar/kecil

Untuk mengaktifkan mode peka huruf besar/kecil, Anda dapat mengatur properti berikut:

spring.cloud.azure.keyvault.secret.property-sources[].case-sensitive=true

Tidak mengambil semua rahasia di Key Vault

Jika Anda menyimpan 1000 rahasia di Key Vault, dan Anda hanya ingin menggunakan 3 di antaranya. Anda dapat mencantumkan 3 nama rahasia dengan spring.cloud.azure.keyvault.secret.property-sources[].secret-keys.

Mengatur interval refresh

Secara default, rahasia di akan di-refresh KeyVaultPropertySource setiap 30 menit. Anda dapat mengonfigurasi waktu dengan spring.cloud.azure.keyvault.secret.property-sources[].refresh-interval. Misalnya: spring.cloud.azure.keyvault.secret.property-sources[].refresh-interval=60m berarti refresh setiap 60 menit. Atur ke 0 untuk menonaktifkan refresh otomatis.

Prioritas PropertySource

Jika kunci ada di beberapa PropertySources, yang akan berlaku diputuskan oleh prioritas.

  • Jika tidak SystemEnvironmentPropertySource ada dalam daftar PropertySource, maka KeyVaultPropertySource akan mengambil prioritas tertinggi.
  • Jika ada SystemEnvironmentPropertySource dalam daftar PropertySource, maka SystemEnvironmentPropertySource memiliki prioritas yang lebih tinggi daripada KeyVaultPropertySource. Yang berarti Anda dapat menggunakan variabel lingkungan untuk mengambil alih nilai rahasia Key Vault di aplikasi Anda.
  • Jika ada beberapa KeyVaultPropertySource dalam daftar PropertySource, maka urutan definisi adalah urutan prioritas. Ambil sampel di atas sebagai contoh, key-vault-property-souece-1 memiliki prioritas yang lebih tinggi daripada key-vault-property-souece-2.

Semua properti yang dapat dikonfigurasi

Properti Nilai default Deskripsi
spring.cloud.azure.keyvault.secret.property-source-enabled benar Apakah akan mengaktifkan sumber properti Key Vault.
spring.cloud.azure.keyvault.secret.property-sources[].name Nama sumber properti ini.
spring.cloud.azure.keyvault.secret.property-sources[].endpoint Titik akhir Azure Key Vault.
spring.cloud.azure.keyvault.secret.property-sources[].case-sensitive salah Apakah kunci rahasia peka huruf besar/kecil.
spring.cloud.azure.keyvault.secret.property-sources[].secret-keys Kunci rahasia yang didukung untuk sumber properti ini. Semua kunci diambil jika properti ini hilang.
spring.cloud.azure.keyvault.secret.property-sources[].refresh-interval 30m Interval waktu untuk me-refresh semua rahasia Key Vault.
spring.cloud.azure.keyvault.secret.property-sources[].service-version Versi layanan rahasia yang digunakan saat membuat permintaan API.
spring.cloud.azure.keyvault.secret.property-sources[].client Properti terkait klien.
spring.cloud.azure.keyvault.secret.property-sources[].credential Properti terkait kredensial.
spring.cloud.azure.keyvault.secret.property-sources[].profile Properti terkait profil.
spring.cloud.azure.keyvault.secret.property-sources[].proxy Properti terkait proksi.
spring.cloud.azure.keyvault.secret.property-sources[].retry Coba lagi properti terkait.
  • Lihat Mengotorisasi akses dengan ID Microsoft Entra untuk memastikan prinsip keamanan telah diberikan izin yang memadai untuk mengakses Rahasia Azure Key Vault.
  • Jika properti umum seperti client, credential, profile, proxy, retry tidak dikonfigurasi di spring.cloud.azure.keyvault.secret.property-sources[].xxx, spring.cloud.azure.xxx akan digunakan. Lihat Konfigurasi Spring Cloud Azure untuk mendapatkan informasi selengkapnya tentang properti umum ini.
  • Lihat Properti konfigurasi Spring Cloud Azure untuk mendapatkan informasi selengkapnya tentang properti berlapis.

Sampel

Lihat sampel spring-cloud-azure-starter-keyvault-secrets di GitHub.