Partager via


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

Remarque

Azure Spring Apps est le nouveau nom du service Azure Spring Cloud. Bien que le service ait un nouveau nom, vous verrez l’ancien nom à divers endroits pendant un certain temps, car nous travaillons à mettre à jour les ressources telles que les captures d’écran, les vidéos et les diagrammes.

Cet article s’applique à : ✔️ Java ❌ C#

Cet article explique comment créer une identité managée affectée par le système ou affectée par l’utilisateur pour une application déployée sur Azure Spring Apps et 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 créer 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, y compris 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 demandé par le --system-assigned paramètre :

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

Pour l’identité managée affectée par le système, utilisez cette option az keyvault delete-policy --name ${KEY_VAULT} --object-id ${MANAGED_IDENTITY_PRINCIPAL_ID} pour supprimer l’accès de 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 les chaîne de connexion à partir du 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

Utilisez la commande suivante pour supprimer l’ensemble du groupe de ressources, y compris l’instance de service nouvellement créée :

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

Étapes suivantes