Freigeben über


Spring Cloud Azure Secret Management

Dieser Artikel gilt für:✅ Version 4.19.0 ✅ Version 5.19.0

Spring Cloud Azure erstellt PropertySource, die geheime Schlüssel enthält, die in Azure Key Vault Secrets gespeichert sind.

Setup von Abhängigkeiten

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

Trinkgeld

Wir bieten auch spring-cloud-azure-starter-keyvault, um alle Features von Key Vault zu unterstützen. Wenn Sie die Eigenschaft verwenden, ist spring.cloud.azure.keyvault.enable die zu konfigurierende Eigenschaft, und der Standardwert ist true. Anschließend können Sie spring.cloud.azure.keyvault.<keyvault-service>.enable verwenden, um nicht benötigte Dienste zu deaktivieren.

Grundlegende Nutzung

Wenn Sie sich durch client-id und client-secretauthentifizieren möchten, sind die folgenden Eigenschaften erforderlich:

Konfigurationseigenschaften

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}

Java-Code

@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);
    }
}

Erweiterte Verwendung

Sonderzeichen im Eigenschaftennamen

Schlüsseltresor-Geheimnamen unterstützen nur Zeichen in [0-9a-zA-Z-]. Weitere Informationen finden Sie im AbschnittTresornamen und Objektnamen Abschnitt Azure Key Vault-Schlüssel, geheime Schlüssel und Zertifikate. Wenn Ihr Eigenschaftsname andere Zeichen enthält, können Sie die in den folgenden Abschnitten beschriebenen Problemumgehungen verwenden.

Verwenden von - anstelle von . in geheimen Namen

. wird in geheimen Namen nicht unterstützt. Wenn Ihre Anwendung über einen Eigenschaftsnamen verfügt, der .enthält, z. B. spring.datasource.url, ersetzen Sie . durch -, wenn Sie den geheimen Schlüssel in Azure Key Vault speichern. Speichern Sie beispielsweise spring-datasource-url in Azure Key Vault. In Ihrer Anwendung können Sie weiterhin spring.datasource.url verwenden, um den Eigenschaftswert abzurufen.

Anmerkung

Diese Methode kann eine Anforderung wie spring.datasource-urlnicht erfüllen. Wenn Sie spring-datasource-url im Key Vault speichern, wird nur spring.datasource.url und spring-datasource-url unterstützt, um den Eigenschaftswert abzurufen, aber spring.datasource-url wird nicht unterstützt. Informationen zum Behandeln dieses Falls finden Sie im Abschnitt Verwenden von Eigenschaftsplatzhaltern Abschnitt.

Verwenden von Eigenschaftsplatzhaltern

Angenommen, Sie legen diese Eigenschaft in Ihrer application.properties Datei fest:

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

Die Anwendung erhält einen propertyWithoutSpecialCharacter Schlüsselnamen und weist dessen Wert property.with.special.character__zu.

Groß-/Kleinschreibung beachten

Um den Modus "Groß-/Kleinschreibung" zu aktivieren, können Sie die folgende Eigenschaft festlegen:

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

Nicht alle geheimen Schlüssel im Key Vault abrufen

Wenn Sie 1000 geheime Schlüssel im Key Vault gespeichert haben und nur 3 von ihnen verwenden möchten. Sie können die drei geheimen Namen nach spring.cloud.azure.keyvault.secret.property-sources[].secret-keysauflisten.

Festlegen des Aktualisierungsintervalls

Standardmäßig werden die geheimen Schlüssel in KeyVaultPropertySource alle 30 Minuten aktualisiert. Sie können die Zeit nach spring.cloud.azure.keyvault.secret.property-sources[].refresh-intervalkonfigurieren. Beispiel: spring.cloud.azure.keyvault.secret.property-sources[].refresh-interval=60m bedeutet, alle 60 Minuten zu aktualisieren. Legen Sie auf 0 fest, um die automatische Aktualisierung zu deaktivieren.

PropertySource-Priorität

Wenn der Schlüssel in mehreren PropertySources vorhanden ist, wird dies von der Priorität entschieden.

  • Wenn in der liste PropertySource keine SystemEnvironmentPropertySource vorhanden ist, hat KeyVaultPropertySource die höchste Priorität.
  • Wenn in der Liste PropertySourceSystemEnvironmentPropertySource vorhanden ist, haben SystemEnvironmentPropertySource eine höhere Priorität als KeyVaultPropertySource, was bedeutet, dass Sie eine Umgebungsvariable verwenden können, um den Schlüsseltresorschlüsselwert in Ihrer Anwendung außer Kraft zu setzen.
  • Wenn in der Liste PropertySource mehrere Schlüsseltresor-Eigenschaftenquellen vorhanden sind, ist die Definitionsreihenfolge die Prioritätsreihenfolge. Wenn Sie das obige Beispiel als Beispiel verwenden, hat key-vault-property-source-1 eine höhere Priorität als key-vault-property-source-2.

Konfigurieren von Tokenanmeldeinformationen für key Vault-Eigenschaftsquelle

Wenn Sie eine angegebene Tokenanmeldeinformation für Key Vault-PropertySourceverwenden müssen, können Sie die TokenCredential Im ConfigurableBootstrapContext für KeyVaultEnvironmentPostProcessorregistrieren, wird dieses Feature von Spring Cloud Azure 5.19.0 unterstützt. Hier ist ein Beispiel für die Verwendung von 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);
}

Alle konfigurierbaren Eigenschaften

Eigentum Standardwert Beschreibung
spring.cloud.azure.keyvault.secret.property-source-enabled STIMMT Gibt an, ob die Key Vault-Eigenschaftsquelle aktiviert werden soll.
spring.cloud.azure.keyvault.secret.property-sources[].name Name dieser Eigenschaftsquelle.
spring.cloud.azure.keyvault.secret.property-sources[].endpoint Azure Key Vault-Endpunkt.
spring.cloud.azure.keyvault.secret.property-sources[].Groß-/Kleinschreibung beachten FALSCH Gibt an, ob bei den geheimen Schlüsseln die Groß-/Kleinschreibung beachtet wird.
spring.cloud.azure.keyvault.secret.property-sources[].secret-keys Die geheimen Schlüssel, die für diese Eigenschaftsquelle unterstützt werden. Alle Schlüssel werden abgerufen, wenn diese Eigenschaft fehlt.
spring.cloud.azure.keyvault.secret.property-sources[].refresh-interval 30m Zeitintervall zum Aktualisieren aller Schlüsseltresorschlüssel.
spring.cloud.azure.keyvault.secret.property-sources[].service-version Version des geheimen Diensts, die beim Erstellen von API-Anforderungen verwendet wird.
spring.cloud.azure.keyvault.secret.property-sources[].client Clientbezogene Eigenschaften.
spring.cloud.azure.keyvault.secret.property-sources[].credential Credential related properties.
spring.cloud.azure.keyvault.secret.property-sources[].profile Profilbezogene Eigenschaften.
spring.cloud.azure.keyvault.secret.property-sources[].proxy Proxybezogene Eigenschaften.
spring.cloud.azure.keyvault.secret.property-sources[].retry Wiederholen Sie verwandte Eigenschaften.

Proben

Sehen Sie sich die beispiele spring-cloud-azure-starter-keyvault-secrets auf GitHub an.