Authentifier les déploiements auprès d’Azure App Service

Effectué

Pour effectuer les exercices de ce module, vous avez été connecté à l’environnement du bac à sable (sandbox). Cet environnement étant interactif, tous vos déploiements ont été authentifiés avec des informations d’identification que vous avez utilisées lors de l’initialisation du bac à sable. Cependant, vos déploiements n’utiliseront pas cet environnement interactif si vous automatisez votre processus de génération. Dans un scénario d’automatisation, vous devez configurer votre projet pour utiliser l’une des méthodes d’authentification prises en charge.

Dans cette unité, vous allez découvrir comment votre entreprise peut configurer Maven pour utiliser l’authentification Azure.

Authentification de votre application web

Azure vous offre la possibilité de choisir la façon dont vous souhaitez authentifier votre application. L’option que vous choisirez dépendra de l’environnement de génération de votre entreprise. Les trois options d’authentification de votre code d’application avec Maven sont listées ici, par ordre croissant de complexité :

  • S’authentifier avec Azure CLI, ou utiliser Cloud Shell dans le portail Azure.

  • Créez un principal de service Azure, créez un fichier JSON avec vos informations d’identification de principal de service et modifiez le fichier de pom.xml de votre projet.

  • Créer un principal de service Azure, ajouter les informations d’identification de votre principal de service à un fichier settings.xml Maven, puis modifier le fichier pom.xml de votre projet de façon à utiliser les paramètres Maven.

Microsoft recommande la troisième option, car elle offre l’approche la plus fiable, flexible et cohérente pour l’authentification. Dans un environnement réel, les applications web Java existantes de votre entreprise peuvent s’exécuter sur des serveurs locaux sur lesquels les outils Azure CLI ne sont pas installés. En tenant compte de cela, vous implémenterez probablement la recommandation consistant à ajouter l’authentification à l’aide d’un principal de service et d’un fichier settings.xml Maven. Toutefois, pour cet exercice, le bac à sable ne dispose pas de privilèges suffisants pour créer des principaux du service.

Authentification avec Azure CLI

Le moyen le plus simple d’authentifier Maven consiste à se connecter avec Azure CLI. Le plug-in Maven pour Azure App Service peut ensuite déployer l’application à l’aide de vos informations d’identification, sans aucune configuration supplémentaire requise.

Si vous utilisez Azure Cloud Shell, comme vous l’avez fait lors des exercices avec le bac à sable Microsoft Learn dans ce module, vous êtes connecté à Azure par défaut ; vous n’avez pas besoin d’exécuter des commandes supplémentaires. Toutefois, si vous utilisez Azure CLI à partir d’un autre ordinateur, vous devez vous connecter à l’aide de la commande az login.

Authentification avec un principal de service

La deuxième méthode d’authentification de votre application web consiste à créer un principal de service Azure et à enregistrer ses informations d’identification dans un fichier que vous référencerez à partir des paramètres de votre projet.

Pour créer un principal du service Azure avec Azure CLI, effectuez les étapes suivantes.

  1. Exécutez la commande suivante à partir d’Azure CLI pour créer un principal du service Azure :

    az ad sp create-for-rbac --name https://mywebapp-1234567890.azurewebsites.net/ --role Contributor --scopes /subscriptions/ssssssss-ssss-ssss-ssss-ssssssssssss
    

    https://mywebapp-1234567890.azurewebsites.net/ est l’URL de votre application web.

    Cette commande retourne une réponse avec un objet JSON qui ressemble à l’exemple suivant :

    Creating 'Contributor' role assignment under scope '/subscriptions/ssssssss-ssss-ssss-ssss-ssssssssssss'
    The output includes credentials that you must protect. Be sure that you do not include these credentials in your code or check the credentials into your source control. For more information, see https://aka.ms/azadsp-cli
    
    {
      "appId": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa",
      "displayName": "mywebapp-1234567890.azurewebsites.net/",
      "name": "https://mywebapp-1234567890.azurewebsites.net/",
      "password": "...",
      "tenant": "tttttttt-tttt-tttt-tttt-tttttttttttt"
    }
    
  2. Modifiez le fichier pom.xml de votre application web pour utiliser les informations dans la sortie JSON.

    1. Ouvrez votre fichier pom.xml avec l’éditeur de code :

      cd ~/MyWebApp
      code pom.xml
      
    2. Recherchez azure-webapp-maven-plugin dans la section <configuration>.

    3. Ajoutez le code XML suivant après la ligne contenant l’élément <region> et utilisez les informations dans la sortie JSON :

      <auth>
          <type>service_principal</type>
          <client>value-of-appId</client>
          <tenant>value-of-tenant</tenant>
          <key>value-of-password</key>
          <environment>azure</environment>
      </auth>
      

      Votre section azure-webapp-maven-plugin doit maintenant ressembler à l’exemple suivant :

      <plugin>
          <groupId>com.microsoft.azure</groupId>
          <artifactId>azure-webapp-maven-plugin</artifactId>
          <version>2.13.0</version>
          <configuration>
              <schemaVersion>v2</schemaVersion>
              <resourceGroup>MyWebApp-1714654093047-rg</resourceGroup>
              <appName>MyWebApp-1714654093047</appName>
              <pricingTier>S1</pricingTier>
              <region>centralus</region>
              <auth>
                  <type>service_principal</type>
                  <client>aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa</client>
                  <tenant>tttttttt-tttt-tttt-tttt-tttttttttttt</tenant>
                  <key>abcdefghijklmnopqrstuvwxyz1234567890</key>
                  <environment>azure</environment>
              </auth>
              <runtime>
                  <os>Linux</os>
                  <javaVersion>Java 17</javaVersion>
                  <webContainer>Tomcat 10.0</webContainer>
              </runtime>
              <deployment>
                  <resources>
                      <resource>
                          <directory>${project.basedir}/target</directory>
                          <includes>
                              <include>*.war</include>
                          </includes>
                      </resource>
                  </resources>
              </deployment>
          </configuration>
      </plugin>
      
      
    4. Enregistrez vos modifications en tapant Ctrl+S.

    5. Quittez l’éditeur de code en tapant Ctrl+Q.

  3. Utilisez Maven pour générer et déployer votre application web sur Azure App Service :

    mvn azure-webapp:deploy
    

    Maven affiche une série de messages de génération, et le message final doit indiquer que le déploiement sur Azure a réussi :

    [INFO] Scanning for projects...
    [INFO] 
    [INFO] -------------------< com.microsoft.example:MyWebApp >-------------------
    [INFO] Building MyWebApp Maven Webapp 1.0-SNAPSHOT
    [INFO] --------------------------------[ war ]---------------------------------
    [INFO] 
    [INFO] --- azure-webapp-maven-plugin:2.13.0:deploy (default-cli) @ MyWebApp ---
    [INFO] Auth type: SERVICE_PRINCIPAL
    [INFO] Username: 74d82376-184f-400e-a08e-27cd522d7559
    [INFO] There is only one subscription '...' in your account, will use it automatically.
    [INFO] Subscription: ...
    [INFO] Failed to get version of your artifact, skip artifact compatibility test
    [INFO] Trying to deploy external resources to MyWebApp-1714654093047...
    [INFO] Successfully deployed the resources to MyWebApp-1714654093047
    [INFO] Trying to deploy artifact to MyWebApp-1714654093047...
    [INFO] Deploying (/home/cephas/MyWebApp/target/MyWebApp.war)[war]  ...
    [INFO] Application url: https://mywebapp-1714654093047.azurewebsites.net                            
    [INFO] ------------------------------------------------------------------------
    [INFO] BUILD SUCCESS
    [INFO] ------------------------------------------------------------------------
    [INFO] Total time:  47.052 s
    [INFO] Finished at: 2024-05-02T13:10:54Z
    [INFO] ------------------------------------------------------------------------
    

    La ligne Auth type: SERVICE_PRINCIPAL dans la réponse indique que le principal de service a été utilisé pour publier votre application web sur Azure.

Authentification avec un fichier settings.xml Maven

La troisième méthode pour authentifier votre application web consiste à créer un principal de service Azure, à créer un fichier settings.xml Maven qui contient ses informations d’identification, et à modifier le fichier pom.xml de votre projet de façon à utiliser les paramètres Maven.

Les étapes de création d’un principal du service Azure avec Azure CLI sont les mêmes que celles de la section précédente de cette unité.

  1. Exécutez la commande suivante à partir d’Azure CLI pour créer un principal du service Azure :

    az ad sp create-for-rbac --name https://mywebapp-1234567890.azurewebsites.net/ --role Contributor --scopes /subscriptions/ssssssss-ssss-ssss-ssss-ssssssssssss
    

    https://mywebapp-1234567890.azurewebsites.net/ est l’URL de votre application web.

    Cette commande retourne une réponse avec un objet JSON qui ressemble à l’exemple suivant :

    Creating 'Contributor' role assignment under scope '/subscriptions/ssssssss-ssss-ssss-ssss-ssssssssssss'
    The output includes credentials that you must protect. Be sure that you do not include these credentials in your code or check the credentials into your source control. For more information, see https://aka.ms/azadsp-cli
    
    {
      "appId": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa",
      "displayName": "mywebapp-1234567890.azurewebsites.net/",
      "name": "https://mywebapp-1234567890.azurewebsites.net/",
      "password": "...",
      "tenant": "tttttttt-tttt-tttt-tttt-tttttttttttt"
    }
    
  2. Créez une version utilisateur du fichier settings.xml utilisable par Maven.

    1. Créez un fichier XML pour vos paramètres Maven avec l’éditeur de code :

      code ~/.m2/settings.xml
      
    2. Collez le code XML suivant dans le fichier :

      <settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">
        <servers>
          <server>
             <id>azure-auth</id>
             <configuration>
                 <client>aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa</client>
                 <tenant>tttttttt-tttt-tttt-tttt-tttttttttttt</tenant>
                 <key>pppppppp-pppp-pppp-pppp-pppppppppppp</key>
             </configuration>
          </server>
        </servers>
      </settings>
      

      Où :

      Paramètre Description
      client Spécifie la valeur appId du principal du service.
      key Spécifie la valeur password du principal du service.
      tenant Spécifie la valeur tenant du principal du service.
    3. Enregistrez vos modifications en tapant Ctrl+S.

    4. Quittez l’éditeur de code en tapant Ctrl+Q.

  3. Modifiez le fichier pom.xml de votre application web de façon à référencer le fichier d’authentification.

    1. Ouvrez votre fichier pom.xml avec l’éditeur de code :

      cd ~/MyWebApp
      code pom.xml
      
    2. Recherchez azure-webapp-maven-plugin dans la section <configuration>.

    3. Ajoutez le code XML suivant après la ligne contenant l’élément <region> :

      <auth>
        <type>service_principal</type>
        <serverId>azure-auth</serverId>
      </auth>
      

      Votre section azure-webapp-maven-plugin doit maintenant ressembler à l’exemple suivant :

      <plugin> 
        <groupId>com.microsoft.azure</groupId>  
        <artifactId>azure-webapp-maven-plugin</artifactId>  
        <version>2.13.0</version>  
        <configuration> 
          <schemaVersion>V2</schemaVersion>  
          <resourceGroup>maven-publish</resourceGroup>  
          <appName>MyWebApp-1234567890</appName>  
          <pricingTier>S1</pricingTier>  
          <region>centralus</region>
          <auth>
            <type>service_principal</type>
            <serverId>azure-auth</serverId>
          </auth>
          <runtime>
              <os>Linux</os>
              <javaVersion>Java 17</javaVersion>
              <webContainer>Tomcat 10.0</webContainer>
          </runtime>
          <deployment> 
            <resources> 
              <resource> 
                <directory>${project.basedir}/target</directory>  
                <includes> 
                  <include>*.war</include> 
                </includes> 
              </resource> 
            </resources> 
          </deployment> 
        </configuration> 
      </plugin> 
      
    4. Enregistrez vos modifications en tapant Ctrl+S.

    5. Quittez l’éditeur de code en tapant Ctrl+Q.

  4. Utilisez Maven pour générer et déployer votre application web sur Azure App Service :

    mvn azure-webapp:deploy
    

    Maven affiche une série de messages de génération, et le message final doit indiquer que le déploiement sur Azure a réussi :

    [INFO] -------------------< com.microsoft.example:MyWebApp >-------------------
    [INFO] Building MyWebApp Maven Webapp 1.0-SNAPSHOT
    [INFO] --------------------------------[ war ]---------------------------------
    [INFO] 
    [INFO] --- azure-webapp-maven-plugin:2.13.0:deploy (default-cli) @ MyWebApp ---
    [INFO] Auth type: SERVICE_PRINCIPAL
    [INFO] Username: aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa
    [INFO] There is only one subscription '...' in your account, will use it automatically.
    [INFO] Subscription: ...
    [INFO] Failed to get version of your artifact, skip artifact compatibility test
    [INFO] Trying to deploy external resources to MyWebApp-1714654093047...
    [INFO] Successfully deployed the resources to MyWebApp-1714654093047
    [INFO] Trying to deploy artifact to MyWebApp-1714654093047...
    [INFO] Deploying (/home/cephas/MyWebApp/target/MyWebApp.war)[war]  ...
    [INFO] Application url: https://mywebapp-1714654093047.azurewebsites.net                            
    [INFO] ------------------------------------------------------------------------
    [INFO] BUILD SUCCESS
    [INFO] ------------------------------------------------------------------------
    [INFO] Total time:  53.611 s
    [INFO] Finished at: 2024-05-02T13:53:31Z
    [INFO] ------------------------------------------------------------------------
    

    La ligne Auth type: SERVICE_PRINCIPAL dans la réponse indique que les informations d’identification de votre principal de service ont été utilisées pour publier votre application web sur Azure.

Vérifiez vos connaissances

1.

Parmi les méthodes suivantes, laquelle n’est pas prise en charge pour l’authentification des déploiements à l’aide du plug-in Maven pour Azure App Service ?

2.

Vrai ou faux : Vous pouvez enregistrer le fichier JSON qui est retourné quand vous créez un principal du service Azure dans un fichier, et utiliser ce fichier pour l’authentification avec le plug-in Maven pour Azure App Service.

3.

Parmi les méthodes suivantes, laquelle est recommandée pour l’authentification des déploiements à l’aide du plug-in Maven pour Azure App Service ?