Autenticare le distribuzioni in Servizio app di Azure
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 filepom.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.
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" }
Modificare il file di
pom.xml
dell'app Web per usare le informazioni nell'output JSON.Aprire il file
pom.xml
con l'editor di codice:cd ~/MyWebApp code pom.xml
Individuare la sezione
<configuration>
perazure-webapp-maven-plugin
.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>
Salvare le modifiche premendo CTRL+S.
Uscire dall'editor di codice premendo CTRL+Q.
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à.
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" }
Creare una versione utente del file
settings.xml
da usare in Maven.Creare un nuovo file XML per le impostazioni di Maven con l'editor di codice:
code ~/.m2/settings.xml
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à serviziokey
Specifica il valore password
dell'entità serviziotenant
Specifica il valore tenant
dell'entità servizioSalvare le modifiche premendo CTRL+S.
Uscire dall'editor di codice premendo CTRL+Q.
Modificare il file
pom.xml
dell'app Web affinché faccia riferimento al file di autenticazione.Aprire il file
pom.xml
con l'editor di codice:cd ~/MyWebApp code pom.xml
Individuare la sezione
<configuration>
perazure-webapp-maven-plugin
.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>
Salvare le modifiche premendo CTRL+S.
Uscire dall'editor di codice premendo CTRL+Q.
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.