Authentifizieren von Bereitstellungen in Azure App Service
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 derpom.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.
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" }
Ändern Sie die
pom.xml
Datei Ihrer Web-App so, dass sie die Informationen in der JSON-Ausgabe verwendet.Öffnen Sie Ihre
pom.xml
-Datei im Code-Editor:cd ~/MyWebApp code pom.xml
Suchen Sie nach dem
<configuration>
-Abschnitt fürazure-webapp-maven-plugin
.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>
Speichern Sie die Änderungen, indem Sie STRG+S drücken.
Schließen Sie den Code-Editor durch Drücken von STRG+Q.
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.
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" }
Erstellen Sie eine Benutzerversion der
settings.xml
-Datei, die Maven verwenden soll.Erstellen Sie eine neue XML-Datei für Ihre Maven-Einstellungen mithilfe des Code-Editors:
code ~/.m2/settings.xml
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 ankey
Gibt den password
-Wert des Dienstprinzipals antenant
Gibt den tenant
-Wert des Dienstprinzipals anSpeichern Sie die Änderungen, indem Sie STRG+S drücken.
Schließen Sie den Code-Editor durch Drücken von STRG+Q.
Passen Sie die
pom.xml
-Datei Ihrer Web-App so an, dass sie auf die Authentifizierungsdatei verweist.Öffnen Sie Ihre
pom.xml
-Datei im Code-Editor:cd ~/MyWebApp code pom.xml
Suchen Sie nach dem
<configuration>
-Abschnitt fürazure-webapp-maven-plugin
.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>
Speichern Sie die Änderungen, indem Sie STRG+S drücken.
Schließen Sie den Code-Editor durch Drücken von STRG+Q.
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.