Autenticación de implementaciones en Azure App Service

Completado

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 archivo pom.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.

  1. 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"
    }
    
  2. Modifique el archivo pom.xml de la aplicación web para usar la información en la salida JSON.

    1. Abra el archivo pom.xml con el editor de código:

      cd ~/MyWebApp
      code pom.xml
      
    2. Busque la sección <configuration> para azure-webapp-maven-plugin.

    3. 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>
      
      
    4. Guarde los cambios escribiendo Ctrl+S.

    5. Escriba Ctrl+Q para salir del editor de código.

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

  1. 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"
    }
    
  2. Cree una versión de usuario del archivo settings.xml para que lo use Maven.

    1. Cree un archivo XML para la configuración de Maven con el editor de código:

      code ~/.m2/settings.xml
      
    2. 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 servicio
      key Especifica el valor de password de la entidad de servicio
      tenant Especifica el valor de tenant de la entidad de servicio
    3. Guarde los cambios escribiendo Ctrl+S.

    4. Escriba Ctrl+Q para salir del editor de código.

  3. Modifique el archivo pom.xml de la aplicación web para hacer referencia al archivo de autenticación.

    1. Abra el archivo pom.xml con el editor de código:

      cd ~/MyWebApp
      code pom.xml
      
    2. Busque la sección <configuration> para azure-webapp-maven-plugin.

    3. 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> 
      
    4. Guarde los cambios escribiendo Ctrl+S.

    5. Escriba Ctrl+Q para salir del editor de código.

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

Comprobación de conocimientos

1.

¿Cuál de los siguientes métodos no se admite para autenticar implementaciones con el complemento Maven para Azure App Service?

2.

Verdadero o falso: Puede guardar el JSON que se devuelve al crear una entidad de servicio de Azure en un archivo y usar ese archivo para la autenticación con el complemento Maven para Azure App Service.

3.

¿Cuál de los siguientes métodos se recomienda para autenticar implementaciones con el complemento Maven para Azure App Service?