Bagikan melalui


Manajemen rahasia Spring Cloud Azure

Konstruksi Spring Cloud Azure PropertySource 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>

Ujung

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 dengan 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 bagian namaVault dan Nama objek 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.

Nota

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 yang 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 nama kunci propertyWithoutSpecialCharacter 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 menurut spring.cloud.azure.keyvault.secret.property-sources[].secret-keys.

Mengatur interval refresh

Secara default, rahasia dalam KeyVaultPropertySource akan di-refresh 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 ada SystemEnvironmentPropertySource 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 sumber properti brankas kunci dalam daftar PropertySource, maka urutan definisi adalah urutan prioritas. Mengambil sampel di atas sebagai contoh, key-vault-property-source-1 memiliki prioritas yang lebih tinggi daripada key-vault-property-source-2.

Mengonfigurasi kredensial token untuk sumber properti Key Vault

Jika Anda perlu menggunakan kredensial token tertentu untuk Key Vault PropertySource, Anda dapat mendaftarkan kacang TokenCredential di ConfigurableBootstrapContext untuk KeyVaultEnvironmentPostProcessor, fitur ini didukung dari Spring Cloud Azure 5.16.0. Berikut adalah contoh untuk menggunakan AzureCliCredential:

public static void main(String[] args) {
    SpringApplication application = new SpringApplication(PropertySourceApplication.class);
    application.addBootstrapRegistryInitializer(registry -> 
            registry.register(TokenCredential.class, context -> new AzureCliCredentialBuilder().build()));

    application.run(args);
}

Semua properti yang dapat dikonfigurasi

Harta benda 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 palsu 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 microsoft Entra ID untuk memastikan keamanan utama 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.