Autenticación de implementaciones en Azure App Service
Para completar los ejercicios de este módulo, ha iniciado sesión en el entorno de espacio aislado. Dado que este entorno es interactivo, todas las implementaciones se han autenticado con las credenciales que usó al inicializar el espacio aislado. Sin embargo, las implementaciones no usarán este entorno interactivo si está automatizando el proceso de compilación. En un escenario de automatización, tendrá que configurar el proyecto para que use uno de los métodos de autenticación admitidos.
En esta unidad, aprenderá cómo la empresa puede configurar Maven para que use la autenticación de Azure.
Autenticación de la aplicación web
Azure le ofrece la flexibilidad de decidir cómo desea autenticar la aplicación. La opción que elija dependerá del entorno de compilación de su empresa. Las tres opciones para autenticar el código de aplicación con Maven se enumeran aquí, en orden de complejidad (de menor a mayor):
Autenticarse mediante la CLI de Azure o Cloud Shell en Azure Portal.
Cree una entidad de servicio de Azure y un archivo JSON con las credenciales de la entidad de servicio y modifique el archivo
pom.xml
del proyecto para que use el archivo JSON.Crear una entidad de servicio de Azure, agregar las credenciales de entidad de servicio a un archivo
settings.xml
de Maven y modificar el archivopom.xml
del proyecto para usar la configuración de Maven.
Microsoft recomienda la tercera opción, ya que proporciona el enfoque más confiable, flexible y coherente para la autenticación. En una configuración real, las aplicaciones web de Java existentes de la empresa podrían ejecutarse en servidores locales que no tienen instaladas las herramientas de CLI de Azure. Teniendo esto en cuenta, probablemente implementaría la recomendación para agregar autenticación mediante una entidad de servicio y un archivo settings.xml
de Maven. Pero, para este ejercicio, el espacio aislado no tiene privilegios suficientes para crear entidades de servicio.
Autenticación con CLI de Azure
La manera más sencilla de autenticar Maven es iniciar sesión con la CLI de Azure. Entonces, el complemento Maven para Azure App Service puede implementar la aplicación con las credenciales, sin necesidad de configurar nada más.
Si está usando Azure Cloud Shell, como ha hecho al completar los ejercicios con el espacio aislado de Microsoft Learn en este módulo, ha iniciado sesión en Azure de manera predeterminada, por lo que no es necesario ejecutar ningún comando adicional. Pero si utiliza la CLI de Azure desde un equipo independiente, deberá iniciar sesión con el comando az login
.
Autenticación con una entidad de servicio
El segundo método para autenticar la aplicación web implica la creación de una entidad de servicio de Azure y el almacenamiento de las credenciales de la entidad de servicio en un archivo al que se hará referencia desde la configuración del proyecto.
Para crear una entidad de servicio de Azure con la CLI de Azure, siga estos pasos.
Ejecute el siguiente comando desde la CLI de Azure para crear una entidad de servicio de Azure:
az ad sp create-for-rbac --name https://mywebapp-1234567890.azurewebsites.net/ --role Contributor --scopes /subscriptions/ssssssss-ssss-ssss-ssss-ssssssssssss
Donde
https://mywebapp-1234567890.azurewebsites.net/
es la dirección URL de la aplicación web.Este comando devolverá una respuesta con un objeto JSON que se parece al siguiente ejemplo:
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" }
Modifique el archivo
pom.xml
de la aplicación web para usar la información en la salida JSON.Abra el archivo
pom.xml
con el editor de código:cd ~/MyWebApp code pom.xml
Busque la sección
<configuration>
paraazure-webapp-maven-plugin
.Agregue el siguiente XML después de la línea que contiene el elemento
<region>
y use la información en la salida 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>
Ahora la sección
azure-webapp-maven-plugin
debería ser similar al siguiente ejemplo:<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>
Guarde los cambios escribiendo Ctrl+S.
Escriba Ctrl+Q para salir del editor de código.
Use Maven para compilar e implementar una aplicación web en Azure App Service:
mvn azure-webapp:deploy
Maven muestra una serie de mensajes de compilación y el mensaje final debe indicar una implementación correcta en Azure:
[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 línea
Auth type: SERVICE_PRINCIPAL
de la respuesta indica que la entidad de servicio se usó para publicar la aplicación web en Azure.
Autenticación con un archivo settings.xml
de Maven
El tercer método para autenticar la aplicación web implica la creación de una entidad de servicio de Azure, la creación de un archivo settings.xml
de Maven que contiene las credenciales de la entidad de servicio y la modificación del archivo pom.xml
del proyecto para usar la configuración de Maven.
Los pasos para crear una entidad de servicio de Azure con la CLI de Azure son los mismos que en la sección anterior de esta unidad.
Ejecute el siguiente comando desde la CLI de Azure para crear una entidad de servicio de Azure:
az ad sp create-for-rbac --name https://mywebapp-1234567890.azurewebsites.net/ --role Contributor --scopes /subscriptions/ssssssss-ssss-ssss-ssss-ssssssssssss
Donde
https://mywebapp-1234567890.azurewebsites.net/
es la dirección URL de la aplicación web.Este comando devolverá una respuesta con un objeto JSON que se parece al siguiente ejemplo:
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" }
Cree una versión de usuario del archivo
settings.xml
para que lo use Maven.Cree un archivo XML para la configuración de Maven con el editor de código:
code ~/.m2/settings.xml
Pegue el siguiente código XML en el archivo:
<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>
Donde:
Parámetro Descripción client
Especifica el valor de appId
de la entidad de serviciokey
Especifica el valor de password
de la entidad de serviciotenant
Especifica el valor de tenant
de la entidad de servicioGuarde los cambios escribiendo Ctrl+S.
Escriba Ctrl+Q para salir del editor de código.
Modifique el archivo
pom.xml
de la aplicación web para hacer referencia al archivo de autenticación.Abra el archivo
pom.xml
con el editor de código:cd ~/MyWebApp code pom.xml
Busque la sección
<configuration>
paraazure-webapp-maven-plugin
.Agregue el siguiente código XML después de la línea que contiene el elemento
<region>
:<auth> <type>service_principal</type> <serverId>azure-auth</serverId> </auth>
Ahora la sección
azure-webapp-maven-plugin
debería ser similar al siguiente ejemplo:<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>
Guarde los cambios escribiendo Ctrl+S.
Escriba Ctrl+Q para salir del editor de código.
Use Maven para compilar e implementar una aplicación web en Azure App Service:
mvn azure-webapp:deploy
Maven muestra una serie de mensajes de compilación y el mensaje final debe indicar una implementación correcta en Azure:
[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 línea de
Auth type: SERVICE_PRINCIPAL
en la respuesta indica que se usaron las credenciales de la entidad de servicio para publicar la aplicación web en Azure.