Gestion des secrets Azure Spring Cloud

Cet article s’applique à : ✔️ Version 4.14.0 ✔️ Version 5.8.0

Construction Azure PropertySource Spring Cloud 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>

Conseil

Nous fournissons spring-cloud-azure-starter-keyvault également la prise en charge de 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 client-id et client-secretque les propriétés suivantes sont requises :

Configuration Properties

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 lasection Nom du coffre et Nom d’objet 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.

Utiliser - plutôt que 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 spring.datasource.urlexemple, remplacez-le .- 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 la propriété.

Remarque

Cette méthode ne peut pas satisfaire à une exigence telle que spring.datasource-url. Lorsque vous enregistrez spring-datasource-url dans Key Vault, seul spring.datasource.url et spring-datasource-url est pris en charge pour récupérer la valeur de la propriété, mais spring.datasource-url n’est pas pris en charge. Pour gérer ce cas, consultez la section Utiliser les espaces réservés de propriété.

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 propertyWithoutSpecialCharacter nom de clé et affecte 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 sont KeyVaultPropertySource actualisés 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 cette option pour désactiver l’actualisation 0 automatique.

Priorité PropertySource

Si la clé existe dans plusieurs PropertySources, ce qui prend effet est décidé par la priorité.

  • S’il n’y a pas SystemEnvironmentPropertySource de liste PropertySource, KeyVaultPropertySource la priorité est la plus élevée.
  • S’il existe SystemEnvironmentPropertySource dans la liste PropertySource, SystemEnvironmentPropertySource avez une priorité supérieure à KeyVaultPropertySource. Cela signifie que vous pouvez utiliser la variable d’environnement pour remplacer la valeur du secret Key Vault dans votre application.
  • S’il existe plusieurs KeyVaultPropertySource dans la liste PropertySource, l’ordre de définition est l’ordre de priorité. Prenez l’exemple ci-dessus comme exemple, key-vault-property-souece-1 a une priorité supérieure à key-vault-property-souece-2.

Toutes les propriétés configurables

Propriété Valeur par défaut Description
spring.cloud.azure.keyvault.secret.property-source-enabled true 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 false 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 30 min 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, , profilecredential, proxy, retry ne sont pas configurées dans spring.cloud.azure.keyvault.secret.property-sources[].xxx, spring.cloud.azure.xxx seront utilisées. Consultez la configuration d’Azure Spring Cloud pour obtenir plus d’informations sur ces propriétés courantes.
  • Consultez les propriétés de configuration d’Azure Spring Cloud pour obtenir plus d’informations sur les propriétés imbriquées.

Exemples

Consultez les exemples spring-cloud-azure-starter-keyvault-secrets sur GitHub.