Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
In diesem Lernprogramm erfahren Sie, wie Sie eine Java JBoss EAP-App auf Azure App Service mit einer Azure Database for MySQL Datenbank mithilfe einer verwalteten Identität verbinden. Der App-Dienst kann managed Identity verwenden, um sicheren Zugriff auf Azure Database for MySQL und andere Azure Dienste zu ermöglichen. Eine verwaltete Identität beseitigt die Notwendigkeit, geheime Schlüssel in Ihrer App zu verwenden, z. B. Anmeldeinformationen in den Umgebungsvariablen.
In diesem Lernprogramm werden Azure CLI Befehle verwendet, um die folgenden Aufgaben auszuführen:
- Erstellt einen Azure Database for MySQL-Server und eine MySQL-Datenbank.
- Stellt eine Beispiel-JBoss-EAP-App mit einem WAR-Paket in App Service bereit.
- Konfiguriert die Spring Boot-Webanwendung so, dass Microsoft Entra Authentifizierung mit der MySQL-Datenbank verwendet wird.
- Verbindet die Web-App mit der MySQL-Datenbank mithilfe von Service Connector mit verwalteter Identitätsauthentifizierung.
Voraussetzungen
Ein Azure-Abonnement mit Microsoft Entra-Rollenzuweisungsberechtigungen und Azure-Ressourcenschreibberechtigungen in einer Azure-Region, die den Service Connector unterstützt und über ausreichende App Service Unterstützung und Kontingent für das Lernprogramm verfügt.
Die
Microsoft.ServiceLinkerundMicrosoft.DBforMySQLRessourcenanbieter, die in Ihrem Azure-Abonnement registriert sind. Sie könnenaz provider register -n Microsoft.[service]ausführen, um die Anbieter zu registrieren.Git verwenden, um auf das Beispiel-Repository zuzugreifen und es zu klonen.
Zugriff auf Azure Cloud Shell, um die Schritte des Tutorials auszuführen, oder, wenn Sie es vorziehen, lokal auszuführen, die folgenden Voraussetzungen und Schritte:
Java JDKinstalliertMaven installiert
jqinstalliertMySQL-Client installiert
Azure CLI 2.46.0 oder höher installiert. Führen Sie zum Überprüfen der Version
az --versionaus. Führen Sie zum Upgrade die Ausführung ausaz upgrade.Wenn Sie es lokal ausführen:
- Melden Sie sich mit
az loginbei Azure an, und folgen Sie den Eingabeaufforderungen. - Wenn Sie mehrere Azure Abonnement mit Ihren Anmeldeinformationen verbunden haben, führen Sie
az account set --subscription <subscription-ID>aus, um das richtige Abonnement auszuwählen.
- Melden Sie sich mit
Richten Sie Ihre Umgebung ein
Installieren Sie die folgenden Azure CLI-Erweiterungen:
az extension add --name serviceconnector-passwordless --upgrade az extension add --name rdbms-connectFühren Sie die folgenden Befehle aus, um das Beispiel-Repository zu klonen und Verzeichnisse in den Beispiel-App-Projektordner zu ändern. Führen Sie alle verbleibenden Befehle aus diesem Ordner aus.
git clone https://github.com/Azure-Samples/Passwordless-Connections-for-Java-Apps cd Passwordless-Connections-for-Java-Apps/JakartaEE/jboss-eap/Definieren Sie die folgenden Umgebungsvariablen für das Lernprogramm, und ersetzen Sie den
<region>Platzhalter durch einen gültigen Wert.LOCATIONmuss eine Azure-Region sein, in der Ihr Abonnement über ausreichendes Kontingent verfügt, um die Azure-Ressourcen zu erstellen, und keine Einschränkungen für Dienste bestehen.LOCATION="<region>" RESOURCE_GROUP="mysql-mi-webapp"Erstellen Sie eine Azure-Ressourcengruppe, um alle Projektressourcen zu enthalten. Der Ressourcengruppenname wird zwischengespeichert und automatisch auf nachfolgende Befehle angewandt.
az group create --name $RESOURCE_GROUP --location $LOCATION
Erstellen einer Azure-Datenbank für MySQL
Erstellen Sie einen Azure Database for MySQL-Server und eine Datenbank in Ihrem Abonnement. Die Spring Boot-App stellt eine Verbindung mit dieser Datenbank bereit und speichert ihre Daten bei der Ausführung, wobei der Anwendungszustand unabhängig davon beibehalten wird, wo Sie die Anwendung ausführen.
Führen Sie den folgenden Befehl aus, um einen Azure Database for MySQL Server zu erstellen. Der Name
MYSQL_HOSTmuss in ganz Azure eindeutig sein.Hinweis
Obwohl der Befehl ein Administratorkonto definiert, wird das Konto nicht verwendet, da das Microsoft Entra Administratorkonto alle administrativen Aufgaben ausführt.
export MYSQL_ADMIN_USER=azureuser export MYSQL_ADMIN_PASSWORD="AdminPassword1" export RAND_ID=$RANDOM export MYSQL_HOST="mysql-mi-$RAND_ID" az mysql flexible-server create \ --name $MYSQL_HOST \ --resource-group $RESOURCE_GROUP \ --location $LOCATION \ --admin-user $MYSQL_ADMIN_USER \ --admin-password $MYSQL_ADMIN_PASSWORD \ --public-access 0.0.0.0 \ --tier Burstable \ --sku-name Standard_B1ms \ --storage-size 32Erstellen Sie eine Datenbank, die für die zu verwendende Anwendung benannt
checklistist.export DATABASE_NAME="checklist" az mysql flexible-server db create \ --resource-group $RESOURCE_GROUP \ --server-name $MYSQL_HOST \ --database-name $DATABASE_NAMEÖffnen Sie eine Firewall, um die Verbindung mit der Datenbank von Ihrer aktuellen IP-Adresse aus zuzulassen.
# Create a temporary firewall rule to allow connections from your current machine to the MySQL server export MY_IP=$(curl http://whatismyip.akamai.com) az mysql flexible-server firewall-rule create \ --resource-group $RESOURCE_GROUP \ --name $MYSQL_HOST \ --rule-name AllowCurrentMachineToConnect \ --start-ip-address ${MY_IP} \ --end-ip-address ${MY_IP}Stellen Sie eine Verbindung mit der Datenbank her, und erstellen Sie die Tabellen, wie in der Beispielprojektdatei /azure/init-db.sql angegeben.
export DATABASE_FQDN=${MYSQL_HOST}.mysql.database.azure.com export CURRENT_USER=$(az account show --query user.name --output tsv) export RDBMS_ACCESS_TOKEN=$(az account get-access-token \ --resource-type oss-rdbms \ --output tsv \ --query accessToken) mysql -h "${DATABASE_FQDN}" --user "${CURRENT_USER}" --password="$RDBMS_ACCESS_TOKEN" < azure/init-db.sqlEntfernen Sie die temporäre Firewallregel:
az mysql flexible-server firewall-rule delete \ --resource-group $RESOURCE_GROUP \ --name $MYSQL_HOST \ --rule-name AllowCurrentMachineToConnect
Erstellen einer App Service-Ressource
Erstellen Sie eine App Service JBoss EAP-Ressource unter Linux. JBoss EAP erfordert eine Premium-Stufe sku .
# Create an App Service plan
export APPSERVICE_PLAN="mysql-mi-plan"
export APPSERVICE_NAME="mysql-mi-app"
az appservice plan create \
--resource-group $RESOURCE_GROUP \
--name $APPSERVICE_PLAN \
--location $LOCATION \
--sku P1V3 \
--is-linux
# Create an App Service web app
az webapp create \
--resource-group $RESOURCE_GROUP \
--name $APPSERVICE_NAME \
--plan $APPSERVICE_PLAN \
--runtime "JBOSSEAP:7-java8"
Erstellen und Konfigurieren einer vom Benutzer zugewiesenen verwalteten Identität
Verwenden Sie den folgenden Befehl, um eine Azure vom Benutzer zugewiesenen verwalteten Identität zu erstellen, die für Microsoft Entra Authentifizierung verwendet werden soll. Weitere Informationen finden Sie unter Einrichten der Microsoft Entra-Authentifizierung für Azure Database for MySQL – Flexibler Server.
export USER_IDENTITY_NAME="my-user-assigned-identity"
export IDENTITY_RESOURCE_ID=$(az identity create \
--name $USER_IDENTITY_NAME \
--resource-group $RESOURCE_GROUP \
--query id \
--output tsv)
Gewähren Sie der neuen vom Benutzer zugewiesenen Identität User.Read.All, GroupMember.Read.Allund Application.Read.All Berechtigungen. Geben Sie alternativ der identität die Directory Readers Microsoft Entra integrierte Rolle.
Azure CLI wird für die Zuweisung von Microsoft Entra-Berechtigungen oder -Rollen nicht unterstützt. Sie können die Microsoft Entra Admin Center, Microsoft Graph PowerShell oder Microsoft Graph-API verwenden, um die Zuweisungen zu erstellen. Weitere Informationen finden Sie unter Zuweisen von Microsoft Entra-Rollen.
Hinweis
Um diese Zuweisungen hinzuzufügen, müssen Sie mindestens über die Privileged Role Administrator Rolle oder Berechtigungen in Ihrem Microsoft Entra Mandanten verfügen. Wenn Sie nicht über diese Rolle verfügen, bitten Sie Ihren globalen Administrator oder privilegierten Rollenadministrator , die Berechtigungen zu erteilen.
Verwenden der verwalteten Identität zum Verbinden der Dienste
Verwenden Sie Service Connector , um Ihre App Service JBoss EAP-Web-App mit der MySQL-Datenbank mit einer verwalteten Identität zu verbinden. Service Connector führt die folgenden Aufgaben im Hintergrund aus:
- Legt den aktuellen angemeldeten Benutzer als Microsoft Entra Datenbankadministrator fest.
- Aktiviert vom System zugewiesene verwaltete Identität für die App.
- Fügt einen Datenbankbenutzer für die vom System zugewiesene verwaltete Identität hinzu und gewährt diesem Benutzer alle Datenbankberechtigungen.
- Fügt eine Verbindungszeichenfolge namens
AZURE_MYSQL_CONNECTIONSTRINGzu den App Settings der App hinzu.
Verwenden Sie den folgenden Befehl " az webapp connection create ", um Ihre App mit der verwalteten Identität mit der MySQL-Datenbank zu verbinden.
az webapp connection create mysql-flexible \
--resource-group $RESOURCE_GROUP \
--name $APPSERVICE_NAME \
--target-resource-group $RESOURCE_GROUP \
--server $MYSQL_HOST \
--database $DATABASE_NAME \
--system-identity mysql-identity-id=$IDENTITY_RESOURCE_ID \
--client-type java
Erstellen und Bereitstellen der App
Führen Sie den folgenden Code aus, um das kennwortlose Authentifizierungs-Plugin zur durch Service Connector generierten Verbindungszeichenfolge hinzuzufügen. Das App-Startskript verweist auf diese Verbindungszeichenfolge.
export PASSWORDLESS_URL=$(\ az webapp config appsettings list \ --resource-group $RESOURCE_GROUP \ --name $APPSERVICE_NAME \ | jq -c '.[] \ | select ( .name == "AZURE_MYSQL_CONNECTIONSTRING" ) \ | .value' \ | sed 's/"//g') # Create a new environment variable with the connection string including the passwordless authentication plugin export PASSWORDLESS_URL=${PASSWORDLESS_URL}'&defaultAuthenticationPlugin=com.azure.identity.extensions.jdbc.mysql.AzureMysqlAuthenticationPlugin&authenticationPlugins=com.azure.identity.extensions.jdbc.mysql.AzureMysqlAuthenticationPlugin' az webapp config appsettings set \ --resource-group $RESOURCE_GROUP \ --name $APPSERVICE_NAME \ --settings "AZURE_MYSQL_CONNECTIONSTRING_PASSWORDLESS=${PASSWORDLESS_URL}"Erstellen Sie die App mithilfe der pom.xml-Datei in der Beispiel-App, um die WAR-Datei zu generieren.
mvn clean package -DskipTestsStellen Sie die WAR-Datei und das Startskript für App Service bereit.
az webapp deploy \ --resource-group $RESOURCE_GROUP \ --name $APPSERVICE_NAME \ --src-path target/ROOT.war \ --type war az webapp deploy \ --resource-group $RESOURCE_GROUP \ --name $APPSERVICE_NAME \ --src-path src/main/webapp/WEB-INF/createMySQLDataSource.sh \ --type startup
Testen der App
Führen Sie den folgenden Code aus, um eine Liste mit einigen Listenelementen zu erstellen.
export WEBAPP_URL=$(az webapp show \ --resource-group $RESOURCE_GROUP \ --name $APPSERVICE_NAME \ --query defaultHostName \ --output tsv)/$DATABASE_NAME # Create a list curl -X POST -H "Content-Type: application/json" -d '{"name": "list1","date": "2022-03-21T00:00:00","description": "Sample checklist"}' https://${WEBAPP_URL} # Create few items on the list 1 curl -X POST -H "Content-Type: application/json" -d '{"description": "item 1"}' https://${WEBAPP_URL}/1/item curl -X POST -H "Content-Type: application/json" -d '{"description": "item 2"}' https://${WEBAPP_URL}/1/item curl -X POST -H "Content-Type: application/json" -d '{"description": "item 3"}' https://${WEBAPP_URL}/1/itemWenn Sie lokal arbeiten, führen Sie den folgenden Code aus, um die App anzuzeigen:
# Get all list items curl https://${WEBAPP_URL} # Get list item 1 curl https://${WEBAPP_URL}/1Cloud Shell kann keinen lokalen Browser öffnen. Wenn Sie also in Cloud Shell arbeiten, besteht die einfachste Möglichkeit zum Anzeigen der Web-App darin, den Link Browse oder Default domain am oberen Rand der Azure Portalseite der App auszuwählen. Fügen Sie
/checklistan das Ende der URL in Ihrem Browser an, z. B.https://mysql-mi-app.azurewebsites.net/checklist.
Bereinigen von Ressourcen
Wenn Sie mit diesem Lernprogramm fertig sind, können Sie weitere Gebühren vermeiden, indem Sie die von Ihnen erstellten Ressourcen löschen. Löschen Sie die Ressourcengruppe, um alle darin enthaltenen Ressourcen zu löschen. Achten Sie darauf, dass Sie die Ressourcen nicht mehr benötigen, bevor Sie den Befehl ausführen.
az group delete --name $RESOURCE_GROUP --no-wait
Das Löschen aller Ressourcen kann einige Zeit dauern. Mit --no-wait dem Argument kann der Befehl sofort zurückgegeben werden.