Gestion des secrets Azure Spring Cloud
Cet article s’applique à :✅ version 4.19.0 ✅ version 5.19.0
Spring Cloud Azure construit PropertySource
qui contient les secrets stockés dans les secrets Azure Key Vault.
Configuration des dépendances
<dependency>
<groupId>com.azure.spring</groupId>
<artifactId>spring-cloud-azure-starter-keyvault-secrets</artifactId>
</dependency>
Pourboire
Nous fournissons également spring-cloud-azure-starter-keyvault
pour prendre en charge toutes les fonctionnalités de Key Vault. Si vous choisissez de l’utiliser, spring.cloud.azure.keyvault.enable
est la propriété à configurer et la valeur par défaut est true. Vous pouvez ensuite utiliser spring.cloud.azure.keyvault.<keyvault-service>.enable
pour désactiver les services inutiles.
Utilisation de base
Si vous souhaitez vous authentifier par client-id
et client-secret
, les propriétés suivantes sont requises :
Propriétés de configuration
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}
Code 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);
}
}
Utilisation avancée
Caractères spéciaux dans le nom de la propriété
Les noms de secrets Key Vault prennent uniquement en charge les caractères dans [0-9a-zA-Z-]
. Pour plus d’informations, consultez la sectionNom du coffre et Nom d’objet de vue d’ensemble des clés, des secrets et des certificats Azure Key Vault. Si le nom de votre propriété contient d’autres caractères, vous pouvez utiliser les solutions de contournement décrites dans les sections suivantes.
Utilisez -
au lieu de .
dans les noms de secrets
.
n’est pas pris en charge dans les noms de secrets. Si votre application a un nom de propriété qui contient .
, par exemple spring.datasource.url
, remplacez .
par -
lors de l’enregistrement du secret dans Azure Key Vault. Par exemple, enregistrez spring-datasource-url
dans Azure Key Vault. Dans votre application, vous pouvez toujours utiliser spring.datasource.url
pour récupérer la valeur de propriété.
Note
Cette méthode ne peut pas satisfaire à une exigence telle que spring.datasource-url
. Lorsque vous enregistrez spring-datasource-url
dans Key Vault, seuls spring.datasource.url
et spring-datasource-url
sont pris en charge pour récupérer la valeur de propriété, mais spring.datasource-url
n’est pas pris en charge. Pour gérer ce cas, consultez la section Utiliser des espaces réservés de propriétés.
Utiliser des espaces réservés de propriété
Par exemple, supposons que vous définissez cette propriété dans votre fichier application.properties :
property.with.special.character__=${propertyWithoutSpecialCharacter}
L’application obtient un nom de clé propertyWithoutSpecialCharacter
et attribue sa valeur à property.with.special.character__
.
Respect de la casse
Pour activer le mode respect de la casse, vous pouvez définir la propriété suivante :
spring.cloud.azure.keyvault.secret.property-sources[].case-sensitive=true
Ne pas récupérer tous les secrets dans Key Vault
Si vous avez stocké 1 000 secrets dans le coffre de clés et que vous souhaitez simplement utiliser 3 d’entre eux. Vous pouvez répertorier les 3 noms de secrets par spring.cloud.azure.keyvault.secret.property-sources[].secret-keys
.
Définition de l’intervalle d’actualisation
Par défaut, les secrets dans KeyVaultPropertySource
s’actualisent toutes les 30 minutes. Vous pouvez configurer l’heure par spring.cloud.azure.keyvault.secret.property-sources[].refresh-interval
. Par exemple : spring.cloud.azure.keyvault.secret.property-sources[].refresh-interval=60m
signifie actualiser toutes les 60 minutes. Définissez sur 0
pour désactiver l’actualisation automatique.
Priorité PropertySource
Si la clé existe dans plusieurs PropertySources, ce qui prend effet est décidé par la priorité.
- S’il n’existe aucune
SystemEnvironmentPropertySource
dans la listePropertySource
,KeyVaultPropertySource
prend la priorité la plus élevée. - S’il existe
SystemEnvironmentPropertySource
dans la listePropertySource
,SystemEnvironmentPropertySource
avez une priorité supérieure àKeyVaultPropertySource
, ce qui signifie que vous pouvez utiliser une variable d’environnement pour remplacer la valeur secrète Key Vault dans votre application. - S’il existe plusieurs sources de propriétés key vault dans la liste
PropertySource
, l’ordre de définition est l’ordre de priorité. En prenant l’exemple ci-dessus comme exemple,key-vault-property-source-1
a une priorité supérieure àkey-vault-property-source-2
.
Configurer les informations d’identification du jeton pour la source de propriété Key Vault
Si vous devez utiliser des informations d’identification de jeton spécifiées pour le PropertySource
Key Vault, vous pouvez inscrire la TokenCredential
bean dans l'ConfigurableBootstrapContext
pour KeyVaultEnvironmentPostProcessor
, cette fonctionnalité est prise en charge à partir de Spring Cloud Azure 5.19.0. Voici un exemple pour utiliser 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);
}
Toutes les propriétés configurables
Propriété | Valeur par défaut | Description |
---|---|---|
spring.cloud.azure.keyvault.secret.property-source-enabled | vrai | Indique s’il faut activer la source de propriété Key Vault. |
spring.cloud.azure.keyvault.secret.property-sources[].name | Nom de cette source de propriété. | |
spring.cloud.azure.keyvault.secret.property-sources[].endpoint | Point de terminaison Azure Key Vault. | |
spring.cloud.azure.keyvault.secret.property-sources[].respect de la casse | faux | Indique si les clés secrètes respectent la casse. |
spring.cloud.azure.keyvault.secret.property-sources[].secret-keys | Clés secrètes prises en charge pour cette source de propriété. Toutes les clés doivent être récupérées si cette propriété est manquante. | |
spring.cloud.azure.keyvault.secret.property-sources[].refresh-interval | 30m | Intervalle de temps pour actualiser tous les secrets Key Vault. |
spring.cloud.azure.keyvault.secret.property-sources[].service-version | Version du service secret utilisée lors de demandes d’API. | |
spring.cloud.azure.keyvault.secret.property-sources[].client | Propriétés associées au client. | |
spring.cloud.azure.keyvault.secret.property-sources[].credential | Propriétés associées aux informations d’identification. | |
spring.cloud.azure.keyvault.secret.property-sources[].profile | Propriétés associées au profil. | |
spring.cloud.azure.keyvault.secret.property-sources[].proxy | Propriétés associées au proxy. | |
spring.cloud.azure.keyvault.secret.property-sources[].retry | Réessayez les propriétés associées. |
- Consultez Autoriser l’accès avec l’ID Microsoft Entra pour vous assurer que le principal de sécurité a reçu l’autorisation suffisante pour accéder aux secrets Azure Key Vault.
- Si les propriétés courantes telles que
client
,credential
,profile
,proxy
,retry
ne sont pas configurées dansspring.cloud.azure.keyvault.secret.property-sources[].xxx
,spring.cloud.azure.xxx
seront utilisées. Consultez configuration Spring Cloud Azure pour obtenir plus d’informations sur ces propriétés courantes. - Consultez propriétés de configuration Azure Spring Cloud pour obtenir plus d’informations sur les propriétés imbriquées.
Échantillons
Consultez les exemples spring-cloud-azure-starter-keyvault-secrets sur GitHub.