Autenticare le distribuzioni in Servizio app di Azure

Completato

Per completare gli esercizi di questo modulo, è stato effettuato l'accesso all'ambiente sandbox. Poiché questo ambiente è interattivo, tutte le distribuzioni sono state autenticate con le credenziali usate durante l'inizializzazione della sandbox. Le distribuzioni non useranno tuttavia questo ambiente interattivo se si sta automatizzando il processo di compilazione. In uno scenario di automazione è necessario configurare il progetto per l'uso di uno dei metodi di autenticazione supportati.

In questa unità si apprenderà come l'azienda può configurare Maven per usare l'autenticazione di Azure.

Autenticazione dell'app Web

Azure offre la flessibilità necessaria per decidere come si vuole autenticare l'app. L'opzione scelta dipende dall'ambiente di compilazione aziendale. Le tre opzioni per autenticare il codice dell'applicazione con Maven sono elencate di seguito, dalla meno complessa alla più complessa:

  • Autenticazione tramite l'interfaccia della riga di comando di Azure o tramite Cloud Shell nel portale di Azure.

  • Creare un'entità servizio di Azure, creare un file JSON con le credenziali dell'entità servizio e modificare il file pom.xml del progetto.

  • Creare un'entità servizio di Azure, aggiungere le credenziali dell'entità servizio a un file settings.xml di Maven e modificare il file pom.xml del progetto in modo che usi le impostazioni di Maven.

Microsoft consiglia la terza opzione perché offre l'approccio più affidabile, flessibile e coerente all'autenticazione. In uno scenario reale, le app Web Java aziendali esistenti potrebbero essere in esecuzione nei server locali in cui non sono installati gli strumenti dell'interfaccia della riga di comando di Azure. Pertanto, è probabile che si implementi l'opzione consigliata per aggiungere l'autenticazione usando un'entità servizio e un file settings.xml di Maven. Per questo esercizio, tuttavia, la sandbox non ha privilegi sufficienti per creare entità servizio.

Autenticazione con l'interfaccia della riga di comando di Azure

Il modo più semplice per autenticare Maven consiste nell'eseguire l'accesso con l'interfaccia della riga di comando di Azure. Il plug-in Maven per Servizio app di Azure può quindi distribuire l'app usando le credenziali, senza che siano necessarie altre operazioni di configurazione.

Se si usa Azure Cloud Shell, come quando sono stati completati gli esercizi con la sandbox di Microsoft Learn in questo modulo, allora si è connessi ad Azure per impostazione predefinita e non è necessario eseguire altri comandi. Se tuttavia si usa l'interfaccia della riga di comando di Azure da un computer separato, è necessario eseguire l'accesso con il comando az login.

Autenticazione con un'entità servizio

Il secondo metodo per autenticare l'app Web prevede la creazione di un'entità servizio di Azure e il salvataggio delle credenziali dell'entità servizio in un file a cui si farà riferimento dalle impostazioni del progetto.

Per creare un'entità servizio di Azure con l'interfaccia della riga di comando di Azure, seguire questa procedura.

  1. Eseguire il comando seguente dall'interfaccia della riga di comando di Azure per creare un'entità servizio di Azure:

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

    Dove https://mywebapp-1234567890.azurewebsites.net/ è l'URL dell'app Web.

    Questo comando restituisce una risposta con un oggetto JSON simile all'esempio seguente:

    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. Modificare il file di pom.xml dell'app Web per usare le informazioni nell'output JSON.

    1. Aprire il file pom.xml con l'editor di codice:

      cd ~/MyWebApp
      code pom.xml
      
    2. Individuare la sezione <configuration> per azure-webapp-maven-plugin.

    3. Aggiungere il codice XML seguente dopo la riga contenente l'elemento <region> e usare le informazioni nell'output 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>
      

      La sezione azure-webapp-maven-plugin deve essere simile all'esempio seguente:

      <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. Salvare le modifiche premendo CTRL+S.

    5. Uscire dall'editor di codice premendo CTRL+Q.

  3. Usare Maven per compilare e distribuire l'app Web in Servizio app di Azure:

    mvn azure-webapp:deploy
    

    Maven visualizza una serie di messaggi di compilazione e quello finale indica che la distribuzione in Azure è riuscita:

    [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 riga Auth type: SERVICE_PRINCIPAL nella risposta indica che l'entità servizio è stata usata per pubblicare l'app Web in Azure.

Autenticazione con un file settings.xml di Maven

Il terzo metodo per autenticare l'app Web prevede la creazione di un'entità servizio di Azure, seguita dalla creazione di un file settings.xml di Maven contenente le credenziali dell'entità servizio e, infine, la modifica del file pom.xml del progetto in modo che usi le impostazioni Maven.

I passaggi per creare un'entità servizio di Azure con l'interfaccia della riga di comando di Azure sono identici a quelli della sezione precedente di questa unità.

  1. Eseguire il comando seguente dall'interfaccia della riga di comando di Azure per creare un'entità servizio di Azure:

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

    Dove https://mywebapp-1234567890.azurewebsites.net/ è l'URL dell'app Web.

    Questo comando restituisce una risposta con un oggetto JSON simile all'esempio seguente:

    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. Creare una versione utente del file settings.xml da usare in Maven.

    1. Creare un nuovo file XML per le impostazioni di Maven con l'editor di codice:

      code ~/.m2/settings.xml
      
    2. Incollare il codice XML seguente nel file:

      <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>
      

      Dove:

      Parametro Descrizione
      client Specifica il valore appId dell'entità servizio
      key Specifica il valore password dell'entità servizio
      tenant Specifica il valore tenant dell'entità servizio
    3. Salvare le modifiche premendo CTRL+S.

    4. Uscire dall'editor di codice premendo CTRL+Q.

  3. Modificare il file pom.xml dell'app Web affinché faccia riferimento al file di autenticazione.

    1. Aprire il file pom.xml con l'editor di codice:

      cd ~/MyWebApp
      code pom.xml
      
    2. Individuare la sezione <configuration> per azure-webapp-maven-plugin.

    3. Aggiungere il codice XML seguente dopo la riga contenente l'elemento <region>:

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

      La sezione azure-webapp-maven-plugin deve essere simile all'esempio seguente:

      <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. Salvare le modifiche premendo CTRL+S.

    5. Uscire dall'editor di codice premendo CTRL+Q.

  4. Usare Maven per compilare e distribuire l'app Web in Servizio app di Azure:

    mvn azure-webapp:deploy
    

    Maven visualizza una serie di messaggi di compilazione e quello finale indica che la distribuzione in Azure è riuscita:

    [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 riga Auth type: SERVICE_PRINCIPAL nella risposta indica che le credenziali dell'entità servizio sono state usate per pubblicare l'app Web in Azure.

Verificare le conoscenze

1.

Quale dei metodi seguenti non è supportato per l'autenticazione delle distribuzioni tramite il plug-in Maven per Servizio app di Azure?

2.

Vero o falso: è possibile salvare il codice JSON restituito quando si crea un'entità servizio di Azure in un file e usare tale file per l'autenticazione con il plug-in Maven per Servizio app di Azure.

3.

Quale dei metodi seguenti non è consigliato per l'autenticazione delle distribuzioni tramite il plug-in Maven per Servizio app di Azure?