Spring Cloud Azure Geheimnisverwaltung

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

Einrichtung von Abhängigkeiten

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

Tipp

Wir bieten auch spring-cloud-azure-starter-keyvault zur Unterstützung aller Funktionen von Key Vault an. Wenn Sie die Eigenschaft verwenden möchten, 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 Eigenschaftsnamen

Namen von Key Vault-Geheimnissen dürfen nur die in [0-9a-zA-Z-] enthaltenen Zeichen enthalten. Weitere Informationen finden Sie im Abschnitt Vault-Name und Objektname der Übersicht über Azure Key Vault-Schlüssel, Geheimnisse 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 zur Behandlung dieses Falls finden Sie im Abschnitt Verwenden von Eigenschaftsplatzhaltern.

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, entscheidet die Priorität, welcher davon wirksam wird.

  • Wenn in der liste SystemEnvironmentPropertySource keine PropertySource vorhanden ist, hat KeyVaultPropertySource die höchste Priorität.
  • Wenn SystemEnvironmentPropertySource in der Liste PropertySource vorhanden ist, haben SystemEnvironmentPropertySource eine höhere Priorität als KeyVaultPropertySource, was bedeutet, dass Sie eine Umgebungsvariable verwenden können, um den Wert des Key Vault-Geheimnisses in Ihrer Anwendung zu überschreiben.
  • Wenn die Liste PropertySource mehrere Key-Vault-Eigenschaftsquellen enthält, entspricht die Definitionsreihenfolge der 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 für Key Vault PropertySource eine bestimmte Tokenanmeldeinformation verwenden müssen, können Sie die TokenCredential-Bean in ConfigurableBootstrapContext für KeyVaultEnvironmentPostProcessor registrieren. Diese Funktion wird ab Spring Cloud Azure 5.16.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 wahr 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[].case-sensitive 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 können abgerufen werden, wenn diese Eigenschaft fehlt.
spring.cloud.azure.keyvault.secret.property-sources[].refresh-interval 30 m Zeitintervall für die Aktualisierung aller Geheimnisse in Key Vault.
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 Eigenschaften im Zusammenhang mit Anmeldeinformationen.
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 spring-cloud-azure-starter-keyvault-secrets Beispiele auf GitHub an.