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-secret
authentifizieren 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-url
nicht 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-keys
auflisten.
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-interval
konfigurieren. 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
keineSystemEnvironmentPropertySource
vorhanden ist, hatKeyVaultPropertySource
die höchste Priorität. - Wenn in der Liste
PropertySource
SystemEnvironmentPropertySource
vorhanden ist, habenSystemEnvironmentPropertySource
eine höhere Priorität alsKeyVaultPropertySource
, 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, hatkey-vault-property-source-1
eine höhere Priorität alskey-vault-property-source-2
.
Konfigurieren von Tokenanmeldeinformationen für key Vault-Eigenschaftsquelle
Wenn Sie eine angegebene Tokenanmeldeinformation für Key Vault-PropertySource
verwenden müssen, können Sie die TokenCredential
Im ConfigurableBootstrapContext
für KeyVaultEnvironmentPostProcessor
registrieren, 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. |
- Lesen Sie Autorisieren des Zugriffs mit microsoft Entra ID, um sicherzustellen, dass dem Sicherheitsprinzipal die ausreichende Berechtigung für den Zugriff auf die Azure Key Vault Secrets gewährt wurde.
- Wenn allgemeine Eigenschaften wie
client
,credential
,profile
,proxy
,retry
nicht inspring.cloud.azure.keyvault.secret.property-sources[].xxx
konfiguriert sind, werdenspring.cloud.azure.xxx
verwendet. Weitere Informationen zu diesen allgemeinen Eigenschaften finden Sie unter Spring Cloud Azure-Konfiguration. - Weitere Informationen zu geschachtelten Eigenschaften finden Sie unter Spring Cloud Azure-Konfigurationseigenschaften.
Proben
Sehen Sie sich die beispiele spring-cloud-azure-starter-keyvault-secrets auf GitHub an.