Authentifizieren von Bereitstellungen in Azure App Service

Abgeschlossen

Sie haben sich in der Sandboxumgebung angemeldet, um die Übungen in diesem Modul abzuschließen. Da diese Umgebung interaktiv ist, wurden alle Ihre Bereitstellungen mithilfe der Anmeldeinformationen authentifiziert, die Sie bei der Initialisierung der Sandbox verwendet haben. Für Ihre Bereitstellungen wird diese interaktive Umgebung jedoch nicht verwendet, wenn Sie Ihren Erstellungsprozess automatisieren. In einem Automatisierungsszenario müssen Sie Ihr Projekt so konfigurieren, dass eine der unterstützten Authentifizierungsmethoden verwendet wird.

In dieser Lerneinheit erfahren Sie, wie Ihr Unternehmen Maven so konfigurieren kann, dass die Azure-Authentifizierung verwendet wird.

Authentifizieren Ihrer Web-App

In Azure können Sie flexibel entscheiden, wie Sie Ihre App authentifizieren möchten. Die Option, die Sie auswählen, hängt von der Buildumgebung Ihres Unternehmens ab. Die drei Optionen, um Ihren Anwendungscode mit Maven zu authentifizieren, sind hier aufgeführt und nach Komplexität (von niedrigster zu höchster) sortiert:

  • Authentifizieren mithilfe der Azure CLI, oder Verwenden von Cloud Shell im Azure-Portal.

  • Erstellen eines Azure-Dienstprinzipals, Erstellen einer JSON-Datei mit Ihren Dienstprinzipalanmeldeinformationen und Anpassen der pom.xml-Datei Ihres Projekts.

  • Erstellen eines Azure-Dienstprinzipals, Hinzufügen Ihrer Dienstprinzipalanmeldeinformationen in eine Maven-settings.xml-Datei und Anpassen der pom.xml-Datei Ihres Projekts, sodass die Maven-Einstellungen verwendet werden.

Microsoft empfiehlt die dritte Option, da sie den zuverlässigsten, flexibelsten und konsistentesten Authentifizierungsansatz bieten kann. In einer realen Einstellung können die vorhandenen Java-Web-Apps Ihres Unternehmens auf lokalen Servern ausgeführt werden, für welche die Azure CLI-Tools nicht installiert sind. Auf dieser Grundlage würden Sie vermutlich die Empfehlung implementieren, Authentifizierung mithilfe eines Dienstprinzipals und einer Maven-settings.xml-Datei hinzuzufügen. Im Rahmen dieser Übung stehen für die Sandbox jedoch nicht ausreichend Berechtigungen zum Erstellen von Dienstprinzipalen zur Verfügung.

Authentifizierung mit der Azure CLI

Die einfachste Möglichkeit, Maven zu authentifizieren, ist die Anmeldung über die Azure CLI. Das Maven-Plug-In für Azure App Service kann dann die App mithilfe Ihrer Anmeldeinformationen bereitstellen, ohne dass dafür zusätzliche Konfiguration erforderlich ist.

Wenn Sie wie beim Durchführen der Übungen mit der Microsoft Learn-Sandbox in diesem Modul auch hier Azure Cloud Shell verwenden, sind Sie standardmäßig bei Azure angemeldet. Sie müssen keine weiteren Befehle ausführen. Wenn Sie die Azure CLI jedoch auf einem anderen Computer verwenden, müssen Sie sich mithilfe des az login-Befehls anmelden.

Authentifizierung mit einem Dienstprinzipal

Die zweite Methode für die Authentifizierung Ihrer Web-App beinhaltet das Erstellen eines Azure-Dienstprinzipals. Außerdem speichern Sie Ihre Dienstprinzipalanmeldeinformationen in einer Datei, auf die Sie in Ihren Projekteinstellungen verweisen.

Führen Sie die folgenden Schritte aus, um einen Azure-Dienstprinzipal über die Azure CLI zu erstellen.

  1. Führen Sie den folgenden Befehl in der Azure CLI aus, um einen Azure-Dienstprinzipal zu erstellen:

    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/ ist die URL Ihrer Web-App.

    Dieser Befehl gibt eine Antwort mit einem JSON-Objekt zurück, das dem folgenden Beispiel ähnelt:

    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. Ändern Sie die pom.xml Datei Ihrer Web-App so, dass sie die Informationen in der JSON-Ausgabe verwendet.

    1. Öffnen Sie Ihre pom.xml-Datei im Code-Editor:

      cd ~/MyWebApp
      code pom.xml
      
    2. Suchen Sie nach dem <configuration>-Abschnitt für azure-webapp-maven-plugin.

    3. Fügen Sie den folgenden XML-Code nach der Zeile hinzu, die das <region> Element enthält, und verwenden Sie die Informationen in der JSON-Ausgabe:

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

      Ihr azure-webapp-maven-plugin-Abschnitt sollte nun folgendermaßen aussehen:

      <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. Speichern Sie die Änderungen, indem Sie STRG+S drücken.

    5. Schließen Sie den Code-Editor durch Drücken von STRG+Q.

  3. Verwenden Sie Maven, um Ihre Web-App zu erstellen und für Azure App Service bereitzustellen:

    mvn azure-webapp:deploy
    

    Maven zeigt mehrere Buildmeldungen an, und die letzte Meldung sollte auf eine erfolgreiche Bereitstellung in Azure hinweisen:

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

    Die Auth type: SERVICE_PRINCIPAL Zeile in der Antwort gibt an, dass der Dienstprinzipal verwendet wurde, um Ihre Web-App in Azure zu veröffentlichen.

Authentifizierung mit einer Maven-settings.xml-Datei

Die dritte Methode für die Authentifizierung Ihrer Web-App beinhaltet das Erstellen eines Azure-Dienstprinzipals. Anschließend erstellen Sie eine Maven-settings.xml-Datei, die Ihre Dienstprinzipalanmeldeinformationen enthält, und dann passen Sie die pom.xml-Datei Ihres Projekts so an, dass die Maven-Einstellungen verwendet werden.

Die Schritte zum Erstellen eines Azure-Dienstprinzipals über die Azure CLI sind identisch mit denen im vorherigen Abschnitt dieser Lerneinheit.

  1. Führen Sie den folgenden Befehl in der Azure CLI aus, um einen Azure-Dienstprinzipal zu erstellen:

    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/ ist die URL Ihrer Web-App.

    Dieser Befehl gibt eine Antwort mit einem JSON-Objekt zurück, das dem folgenden Beispiel ähnelt:

    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. Erstellen Sie eine Benutzerversion der settings.xml-Datei, die Maven verwenden soll.

    1. Erstellen Sie eine neue XML-Datei für Ihre Maven-Einstellungen mithilfe des Code-Editors:

      code ~/.m2/settings.xml
      
    2. Fügen Sie den folgenden XML-Code in die Datei ein:

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

      Hierbei gilt:

      Parameter Beschreibung
      client Gibt den appId-Wert des Dienstprinzipals an
      key Gibt den password-Wert des Dienstprinzipals an
      tenant Gibt den tenant-Wert des Dienstprinzipals an
    3. Speichern Sie die Änderungen, indem Sie STRG+S drücken.

    4. Schließen Sie den Code-Editor durch Drücken von STRG+Q.

  3. Passen Sie die pom.xml-Datei Ihrer Web-App so an, dass sie auf die Authentifizierungsdatei verweist.

    1. Öffnen Sie Ihre pom.xml-Datei im Code-Editor:

      cd ~/MyWebApp
      code pom.xml
      
    2. Suchen Sie nach dem <configuration>-Abschnitt für azure-webapp-maven-plugin.

    3. Fügen Sie den folgenden XML-Code nach der Zeile ein, die das <region>-Element enthält:

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

      Ihr azure-webapp-maven-plugin-Abschnitt sollte nun folgendermaßen aussehen:

      <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. Speichern Sie die Änderungen, indem Sie STRG+S drücken.

    5. Schließen Sie den Code-Editor durch Drücken von STRG+Q.

  4. Verwenden Sie Maven, um Ihre Web-App zu erstellen und für Azure App Service bereitzustellen:

    mvn azure-webapp:deploy
    

    Maven zeigt mehrere Buildmeldungen an, und die letzte Meldung sollte auf eine erfolgreiche Bereitstellung in Azure hinweisen:

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

    Die Auth type: SERVICE_PRINCIPAL-Zeile in der Antwort weist darauf hin, dass Ihre Dienstprinzipalanmeldeinformationen dazu verwendet wurden, Ihre Web-App in Azure zu veröffentlichen.

Überprüfen Sie Ihr Wissen

1.

Welche der folgenden Methoden wird für die Authentifizierung von Bereitstellungen mithilfe des Maven-Plug-Ins für Azure App Service nicht unterstützt?

2.

Richtig oder falsch: Sie können die JSON-Datei, die zurückgegeben wird, wenn Sie einen Azure-Dienstprinzipal erstellen, in einer Datei speichern, und diese Datei für die Authentifizierung mit dem Maven-Plug-In für Azure App Service verwenden.

3.

Welche der folgenden Methoden wird für die Authentifizierung von Bereitstellungen mithilfe des Maven-Plug-Ins für Azure App Service empfohlen?