Partager via


Connecter Azure Spring Apps à Key Vault à l’aide d’identités managées

Remarque

Les plans Essentiel, Standard et Entreprise seront déconseillés à compter de la mi-mars 2025, avec une période de mise hors service de 3 ans. Nous vous recommandons de passer à Azure Container Apps. Pour plus d’informations, consultez l’annonce de mise hors service d’Azure Spring Apps.

Le plan de consommation standard et dédiée sera déconseillé à compter du 30 septembre 2024, avec un arrêt complet après six mois. Nous vous recommandons de passer à Azure Container Apps. Pour plus d’informations, consultez Migrer le plan de consommation standard et dédiée Azure Spring Apps vers Azure Container Apps.

Cet article s’applique à :✅ Java ❎ C#

Cet article vous montre comment créer une identité managée affectée par l’utilisateur ou par le système pour une application déployée vers Azure Spring Apps et comment l’utiliser pour accéder à Azure Key Vault.

Azure Key Vault peut être utilisé pour stocker de manière sécurisée et contrôler étroitement l’accès aux jetons, mots de passe, certificats, clés API et autres secrets pour votre application. Vous pouvez utiliser une identité managée dans Microsoft Entra ID et vous authentifier auprès de n’importe quel service prenant en charge l’authentification Microsoft Entra, notamment Key Vault, sans avoir à afficher les informations d’identification dans votre code.

La vidéo suivante décrit comment gérer les secrets à l’aide d’Azure Key Vault.


Prérequis

  • Un abonnement Azure. Si vous n’avez pas d’abonnement, créez un compte gratuit avant de commencer.
  • Azure CLI version 2.55.0 ou ultérieure.

Donner des noms à chaque ressource

Créez des variables destinées à contenir les noms de ressources à l’aide des commandes suivantes. Veillez à remplacer les espaces réservés par vos valeurs.

export LOCATION=<location>
export RESOURCE_GROUP=myresourcegroup
export SPRING_APPS=myasa
export APP=springapp-system
export KEY_VAULT=<your-keyvault-name>

Créer un groupe de ressources

Un groupe de ressources est un conteneur logique dans lequel les ressources Azure sont déployées et gérées. Créez un groupe de ressources pour contenir à la fois Key Vault et Spring Cloud à l’aide de la commande az group create, comme illustré dans l’exemple suivant :

az group create --name ${RESOURCE_GROUP} --location ${LOCATION}

Configurer votre coffre de clés

Pour créer un coffre de clés, utilisez la commande az keyvault create, comme illustré dans l’exemple suivant :

Important

Chaque coffre de clés doit avoir un nom unique.

az keyvault create \
    --resource-group ${RESOURCE_GROUP} \
    --name ${KEY_VAULT}

Utilisez la commande suivante pour afficher l’URL de l’application, puis notez l’URL retournée, qui est au format https://${KEY_VAULT}.vault.azure.net. Utilisez cette valeur à l’étape suivante.

az keyvault show \
    --resource-group ${RESOURCE_GROUP} \
    --name ${KEY_VAULT} \
    --query properties.vaultUri --output tsv

Vous pouvez maintenant placer un secret dans votre coffre de clés à l’aide de la commande az keyvault secret set, comme illustré dans l’exemple suivant :

az keyvault secret set \
    --vault-name ${KEY_VAULT} \
    --name "connectionString" \
    --value "jdbc:sqlserver://SERVER.database.windows.net:1433;database=DATABASE;"

Créer un service et une application Azure Spring Apps

Après avoir installé toutes les extensions correspondantes, utilisez la commande suivante pour créer une instance Azure Spring Apps :

az extension add --upgrade --name spring
az spring create \
    --resource-group ${RESOURCE_GROUP} \
    --sku Enterprise \
    --name ${SPRING_APPS}

L’exemple suivant crée l’application avec une identité managée affectée par le système, comme le demande le paramètre --system-assigned :

az spring app create \
    --resource-group ${RESOURCE_GROUP} \
    --service ${SPRING_APPS} \
    --name ${APP} \
    --assign-endpoint true \
    --system-assigned
export MANAGED_IDENTITY_PRINCIPAL_ID=$(az spring app show \
    --resource-group ${RESOURCE_GROUP} \
    --service ${SPRING_APPS} \
    --name ${APP} \
    --query identity.principalId --output tsv)
az extension add --upgrade --name spring
az spring create \
    --resource-group ${RESOURCE_GROUP} \
    --name ${SPRING_APPS}

L’exemple suivant crée une application nommée springapp avec une identité managée affectée par le système, comme le demande le paramètre --system-assigned.

az spring app create \
    --resource-group ${RESOURCE_GROUP} \
    --service ${SPRING_APPS} \
    --name ${APP} \
    --assign-endpoint true \
    --runtime-version Java_17 \
    --system-assigned
export MANAGED_IDENTITY_PRINCIPAL_ID=$(az spring app show \
    --resource-group ${RESOURCE_GROUP} \
    --service ${SPRING_APPS} \
    --name ${APP} \
    --query identity.principalId --output tsv)

Autoriser votre application à accéder à Key Vault

Utilisez la commande suivante pour accorder l’accès approprié dans Key Vault à votre application :

az keyvault set-policy \
    --name ${KEY_VAULT} \
    --object-id ${MANAGED_IDENTITY_PRINCIPAL_ID} \
    --secret-permissions set get list

Remarque

Dans le cas d’une identité managée affectée par le système, utilisez az keyvault delete-policy --name ${KEY_VAULT} --object-id ${MANAGED_IDENTITY_PRINCIPAL_ID} pour supprimer l’accès à votre application une fois l’identité managée affectée par le système désactivée.

Créer un exemple d’application Spring Boot avec Spring Boot Starter

Cette application a accès aux secrets d’Azure Key Vault. Utilisez Azure Key Vault Secrets Spring Boot Starter. Azure Key Vault est ajoutée en tant qu’instance de Spring PropertySource. Les secrets stockés dans Azure Key Vault sont facilement accessibles et peuvent être utilisés au même titre que les propriétés de configuration externalisées, comme les propriétés dans les fichiers.

  1. Utilisez la commande suivante pour générer un exemple de projet à partir de start.spring.io avec Azure Key Vault Spring Starter.

    curl https://start.spring.io/starter.tgz -d dependencies=web,azure-keyvault -d baseDir=springapp -d bootVersion=3.2.1 -d javaVersion=17 -d type=maven-project | tar -xzvf -
    
  2. Spécifiez votre coffre de clés dans votre application.

    cd springapp
    vim src/main/resources/application.properties
    
  3. Afin d’utiliser une identité managée pour une application déployée vers Azure Spring Apps, ajoutez au fichier src/main/resources/application.properties des propriétés comportant le contenu suivant.

    spring.cloud.azure.keyvault.secret.property-sources[0].endpoint=<your-keyvault-url>
    spring.cloud.azure.keyvault.secret.property-sources[0].credential.managed-identity-enabled=true
    

    Remarque

    Vous devez ajouter l’URL du coffre de clés dans le fichier application.properties comme indiqué précédemment. Dans le cas contraire, l’URL du coffre de clés risque de ne pas être capturée à l’exécution.

  4. Mettez à jour src/main/java/com/example/demo/DemoApplication.java avec l’exemple de code suivant. Ce code récupère la chaîne de connexion dans le coffre de clés.

    package com.example.demo;
    
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.beans.factory.annotation.Value;
    import org.springframework.boot.CommandLineRunner;
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.RestController;
    
    @SpringBootApplication
    @RestController
    public class DemoApplication implements CommandLineRunner {
    
        @Value("${connectionString}")
        private String connectionString;
    
        public static void main(String[] args) {
            SpringApplication.run(DemoApplication.class, args);
        }
    
        @GetMapping("get")
        public String get() {
            return connectionString;
        }
    
        public void run(String... args) throws Exception {
            System.out.println(String.format("\nConnection String stored in Azure Key Vault:\n%s\n",connectionString));
        }
    }
    

    Si vous ouvrez le fichier pom.xml, vous pouvez voir la dépendance spring-cloud-azure-starter-keyvault, comme illustré dans l’exemple suivant :

    <dependency>
        <groupId>com.azure.spring</groupId>
        <artifactId>spring-cloud-azure-starter-keyvault</artifactId>
    </dependency>
    
  1. Utilisez la commande suivante pour déployer votre application sur Azure Spring Apps :

    az spring app deploy \
        --resource-group ${RESOURCE_GROUP} \
        --service ${SPRING_APPS} \
        --name ${APP} \
        --source-path
    
  1. Utilisez la commande suivante pour déployer votre application sur Azure Spring Apps :

    az spring app deploy \
        --resource-group ${RESOURCE_GROUP} \
        --service ${SPRING_APPS} \
        --name ${APP} \
        --source-path \
        --build-env BP_JVM_VERSION=17
    
  1. Pour tester votre application, accédez au point de terminaison public ou au point de terminaison de test avec la commande suivante :

    curl https://${SPRING_APPS}-${APP}.azuremicroservices.io/get
    

    Le message suivant est retourné dans le corps de la réponse : jdbc:sqlserver://SERVER.database.windows.net:1433;database=DATABASE;

Nettoyer les ressources

Pour supprimer l’intégralité du groupe de ressources, y compris l’instance de service que vous venez de créer, utilisez la commande suivante :

az group delete --name ${RESOURCE_GROUP} --yes

Étapes suivantes