Partager via


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 liste PropertySource, KeyVaultPropertySource prend la priorité la plus élevée.
  • S’il existe SystemEnvironmentPropertySource dans la liste PropertySource, 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 PropertySourceKey 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 dans spring.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.