Gestione dei segreti di Spring Cloud di Azure
Questo articolo si applica a:✅ versione 4.19.0 ✅ versione 5.19.0
Spring Cloud Azure costruisce PropertySource
che contiene i segreti archiviati nei segreti di Azure Key Vault.
Configurazione delle dipendenze
<dependency>
<groupId>com.azure.spring</groupId>
<artifactId>spring-cloud-azure-starter-keyvault-secrets</artifactId>
</dependency>
Mancia
È anche disponibile spring-cloud-azure-starter-keyvault
per supportare tutte le funzionalità di Key Vault. Se si sceglie di usarlo, spring.cloud.azure.keyvault.enable
è la proprietà da configurare e il valore predefinito è true
. È quindi possibile usare spring.cloud.azure.keyvault.<keyvault-service>.enable
per disabilitare i servizi non necessario.
Utilizzo di base
Se si vuole eseguire l'autenticazione tramite client-id
e client-secret
, sono necessarie le proprietà seguenti:
Proprietà di configurazione
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}
Codice 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);
}
}
Utilizzo avanzato
Caratteri speciali nel nome della proprietà
I nomi dei segreti di Key Vault supportano solo i caratteri in [0-9a-zA-Z-]
. Per altre informazioni, vedere la sezionevault-name e Object-name di panoramica di chiavi, segreti e certificati di Azure Key Vault. Se il nome della proprietà contiene altri caratteri, è possibile usare le soluzioni alternative descritte nelle sezioni seguenti.
Usare -
anziché .
nei nomi dei segreti
.
non è supportato nei nomi dei segreti. Se l'applicazione ha un nome di proprietà contenente .
, ad esempio spring.datasource.url
, sostituire .
con -
quando si salva il segreto in Azure Key Vault. Ad esempio, salvare spring-datasource-url
in Azure Key Vault. Nell'applicazione è comunque possibile usare spring.datasource.url
per recuperare il valore della proprietà.
Nota
Questo metodo non può soddisfare un requisito come spring.datasource-url
. Quando si salva spring-datasource-url
in Key Vault, è supportato solo spring.datasource.url
e spring-datasource-url
per recuperare il valore della proprietà, ma spring.datasource-url
non è supportato. Per gestire questo caso, vedere la sezione Usare i segnaposto delle proprietà.
Usare segnaposto delle proprietà
Si supponga, ad esempio, di impostare questa proprietà nel file application.properties:
property.with.special.character__=${propertyWithoutSpecialCharacter}
L'applicazione otterrà un nome di chiave propertyWithoutSpecialCharacter
e assegnerà il relativo valore a property.with.special.character__
.
Distinzione tra maiuscole e minuscole
Per abilitare la modalità di distinzione tra maiuscole e minuscole, è possibile impostare la proprietà seguente:
spring.cloud.azure.keyvault.secret.property-sources[].case-sensitive=true
Non recuperare tutti i segreti in Key Vault
Se sono stati archiviati 1000 segreti nell'insieme di credenziali delle chiavi e si vogliono usare solo 3 di essi. È possibile elencare i 3 nomi dei segreti spring.cloud.azure.keyvault.secret.property-sources[].secret-keys
.
Impostazione dell'intervallo di aggiornamento
Per impostazione predefinita, i segreti in KeyVaultPropertySource
verranno aggiornati ogni 30 minuti. È possibile configurare l'ora spring.cloud.azure.keyvault.secret.property-sources[].refresh-interval
. Ad esempio: spring.cloud.azure.keyvault.secret.property-sources[].refresh-interval=60m
significa aggiornare ogni 60 minuti. Impostare su 0
per disabilitare l'aggiornamento automatico.
Priorità PropertySource
Se la chiave esiste in più PropertySources, che avrà effetto viene deciso in base alla priorità.
- Se nell'elenco
SystemEnvironmentPropertySource
non sono presentiPropertySource
,KeyVaultPropertySource
avrà la priorità più alta. - Se nell'elenco
SystemEnvironmentPropertySource
sono presentiPropertySource
,SystemEnvironmentPropertySource
avere una priorità più alta rispetto aKeyVaultPropertySource
, il che significa che è possibile usare una variabile di ambiente per eseguire l'override del valore del segreto di Key Vault nell'applicazione. - Se sono presenti più origini delle proprietà dell'insieme di credenziali delle chiavi nell'elenco
PropertySource
, l'ordine di definizione è l'ordine di priorità. Prendendo l'esempio precedente come esempio,key-vault-property-source-1
ha una priorità più alta rispetto akey-vault-property-source-2
.
Configurare le credenziali del token per l'origine delle proprietà di Key Vault
Se è necessario usare una credenziale del token specificata per Key Vault PropertySource
, è possibile registrare il bean TokenCredential
nel ConfigurableBootstrapContext
per KeyVaultEnvironmentPostProcessor
, questa funzionalità è supportata da Spring Cloud Azure 5.19.0. Di seguito è riportato un esempio per usare 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);
}
Tutte le proprietà configurabili
Proprietà | Valore predefinito | Descrizione |
---|---|---|
spring.cloud.azure.keyvault.secret.property-source-enabled | vero | Indica se abilitare l'origine della proprietà Key Vault. |
spring.cloud.azure.keyvault.secret.property-sources[].name | Nome dell'origine della proprietà. | |
spring.cloud.azure.keyvault.secret.property-sources[].endpoint | Endpoint di Azure Key Vault. | |
spring.cloud.azure.keyvault.secret.property-sources[].distinzione tra maiuscole e minuscole | falso | Indica se le chiavi segrete fanno distinzione tra maiuscole e minuscole. |
spring.cloud.azure.keyvault.secret.property-sources[].secret-keys | Chiavi segrete supportate per questa origine di proprietà. Tutte le chiavi vengono recuperate se questa proprietà non è presente. | |
spring.cloud.azure.keyvault.secret.property-sources[].refresh-interval | 30m | Intervallo di tempo per aggiornare tutti i segreti di Key Vault. |
spring.cloud.azure.keyvault.secret.property-sources[].service-version | Versione del servizio segreto usata durante l'esecuzione di richieste API. | |
spring.cloud.azure.keyvault.secret.property-sources[].client | Proprietà correlate al client. | |
spring.cloud.azure.keyvault.secret.property-sources[].credential | Proprietà correlate alle credenziali. | |
spring.cloud.azure.keyvault.secret.property-sources[].profile | Profilatura delle proprietà correlate. | |
spring.cloud.azure.keyvault.secret.property-sources[].proxy | Proprietà correlate al proxy. | |
spring.cloud.azure.keyvault.secret.property-sources[].retry | Riprovare le proprietà correlate. |
- Vedere Autorizzare l'accesso con Microsoft Entra ID per assicurarsi che all'entità di sicurezza sia stata concessa l'autorizzazione sufficiente per accedere ai segreti di Azure Key Vault.
- Se verranno usate proprietà comuni come
client
,credential
,profile
,proxy
,retry
non sono configurate inspring.cloud.azure.keyvault.secret.property-sources[].xxx
,spring.cloud.azure.xxx
. Per altre informazioni su queste proprietà comuni, vedere configurazione di Azure Spring Cloud. - Per altre informazioni sulle proprietà annidate, vedere proprietà di configurazione di Azure Spring Cloud.
Campioni
Vedere gli esempi di spring-cloud-azure-starter-keyvault-secrets su GitHub.