Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
I den här självstudien lär du dig hur du ansluter en Java JBoss EAP-app på Azure App Service till en Azure Database for MySQL databas med hjälp av en hanterad identitet. App Service kan använda hanterad identitet för att ge säker åtkomst till Azure Database for MySQL och andra Azure tjänster. En hanterad identitet eliminerar behovet av att använda hemligheter i din app, till exempel autentiseringsuppgifter i miljövariablerna.
I den här handledningen används Azure CLI-kommando för att utföra följande uppgifter:
- Skapar en "Azure Database for MySQL"-server och databas.
- Distribuerar en JBoss EAP-exempelapp till App Service med hjälp av ett WAR-paket.
- Konfigurerar Spring Boot-webbappen så att den använder Microsoft Entra autentisering med MySQL-databasen.
- Ansluter webbappen till MySQL-databasen med hjälp av Service Connector med hanterad identitetsautentisering.
Förutsättningar
En Azure-prenumeration med Microsoft Entra behörigheter för rolltilldelning och Azure resursskrivningsbehörigheter i en Azure region som supports Service Connector och har tillräckligt med stöd och kvoter för App Service för självstudien.
Resursleverantörerna
Microsoft.ServiceLinkerochMicrosoft.DBforMySQLär registrerade i din Azure-prenumeration. Du kan köraaz provider register -n Microsoft.[service]för att registrera leverantörerna.Git för att komma åt och klona exempelrepo.
Åtkomst till Azure Cloud Shell för att köra självstudiestegen, eller om du föredrar att köra lokalt, följ dessa förutsättningar och steg:
Java JDKinstalleradMaven är installerad
jqinstalleradMySQL-klient installerad
Azure CLI 2.46.0 eller senare installerat. Kontrollera din version genom att köra
az --version. Om du vill uppgradera kör duaz upgrade.Om du kör lokalt:
- Logga in på Azure med hjälp av
az loginoch följ anvisningarna. - Om du har fler än en Azure prenumeration ansluten till dina inloggningsuppgifter kör du
az account set --subscription <subscription-ID>för att välja rätt prenumeration.
- Logga in på Azure med hjälp av
Konfigurera din miljö
Installera följande Azure CLI-tillägg:
az extension add --name serviceconnector-passwordless --upgrade az extension add --name rdbms-connectKör följande kommandon för att klona exempelrepo och ändra kataloger till exempelappens projektmapp. Kör alla återstående kommandon från den här mappen.
git clone https://github.com/Azure-Samples/Passwordless-Connections-for-Java-Apps cd Passwordless-Connections-for-Java-Apps/JakartaEE/jboss-eap/Definiera följande miljövariabler för handledningen och ersätt platshållaren
<region>med ett giltigt värde.LOCATIONmåste vara en Azure region där din prenumeration har tillräcklig kvot för att skapa Azure resurser och inga begränsningar för någon av tjänsterna.LOCATION="<region>" RESOURCE_GROUP="mysql-mi-webapp"Skapa en Azure resursgrupp för att innehålla alla projektresurser. Resursgruppens namn cachelagras och tillämpas automatiskt på efterföljande kommandon.
az group create --name $RESOURCE_GROUP --location $LOCATION
Skapa en Azure-databas för MySQL
Skapa en Azure-databas för MySQL-server och -databas i din prenumeration. Spring Boot-appen ansluter till den här databasen och lagrar sina data när den körs, vilket bevarar programtillståndet oavsett var du kör programmet.
Kör följande kommando för att skapa en Azure Database for MySQL-server. Namnet
MYSQL_HOSTmåste vara unikt för alla Azure.Kommentar
Även om kommandot definierar ett administratörskonto används inte kontot eftersom det Microsoft Entra administratörskontot utför alla administrativa uppgifter.
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 32Skapa en databas med namnet
checklistsom programmet ska använda.export DATABASE_NAME="checklist" az mysql flexible-server db create \ --resource-group $RESOURCE_GROUP \ --server-name $MYSQL_HOST \ --database-name $DATABASE_NAMEÖppna en brandvägg för att tillåta anslutning till databasen från din aktuella IP-adress.
# 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}Anslut till databasen och skapa tabellerna enligt beskrivningen i exempelprojektfilen /azure/init-db.sql .
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.sqlTa bort den tillfälliga brandväggsregeln.
az mysql flexible-server firewall-rule delete \ --resource-group $RESOURCE_GROUP \ --name $MYSQL_HOST \ --rule-name AllowCurrentMachineToConnect
Skapa en App Service-resurs
Skapa en App Service JBoss EAP-resurs i Linux. JBoss EAP kräver en Premium-nivå 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"
Skapa och konfigurera en användartilldelad hanterad identitet
Använd följande kommando för att skapa en Azure användartilldelad hanterad identitet som ska användas för Microsoft Entra autentisering. Mer information finns i Konfigurera Microsoft Entra-autentisering för Azure Database for MySQL – flexibel 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)
Bevilja den nya användartilldelade identiteten User.Read.All, GroupMember.Read.Alloch Application.Read.All behörigheter. Alternativt kan du ge identiteten Katalogläsare Microsoft Entra inbyggd roll.
Azure CLI stöds inte för att tilldela Microsoft Entra behörigheter eller roller. Du kan använda api:et Microsoft Entra administrationscenter, Microsoft Graph PowerShell eller Microsoft Graph för att skapa tilldelningarna. Mer information finns i Tilldela Microsoft Entra-roller.
Kommentar
Om du vill lägga till dessa tilldelningar måste du ha minst rollen Privileged Role Administrator eller behörigheterna i din Microsoft Entra-miljö. Om du inte har den här rollen ber du din globala administratör eller privilegierade rolladministratör att bevilja behörigheterna.
Använda hanterad identitet för att ansluta tjänsterna
Använd Service Connector för att ansluta din App Service JBoss EAP-webbapp till MySQL-databasen med en hanterad identitet. Service Connector utför följande uppgifter i bakgrunden:
- Anger den aktuella inloggade användaren som Microsoft Entra databasadministratör.
- Aktiverar systemtilldelad hanterad identitet för appen.
- Lägger till en databasanvändare för den systemtilldelade hanterade identiteten och ger användaren alla databasbehörigheter.
- Lägger till en reťazec pripojenia med namnet
AZURE_MYSQL_CONNECTIONSTRINGi appens Appinställningar.
Använd följande az webapp connection create-kommando för att ansluta din app till MySQL-databasen med hjälp av den hanterade identiteten.
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
Skapa och distribuera appen
Kör följande kod för att lägga till plugin-programmet för lösenordsfri autentisering i anslutningssträngen som genereras av Service Connector. Appens startskript refererar till den här anslutningssträngen.
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}"Skapa appen med hjälp av pom.xml-filen i exempelappen för att generera WAR-filen.
mvn clean package -DskipTestsDistribuera WAR-filen och startskriptet till App Service.
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
Testa programmet
Kör följande kod för att skapa en lista med vissa listobjekt.
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/itemOm du arbetar lokalt kör du följande kod för att visa appen:
# Get all list items curl https://${WEBAPP_URL} # Get list item 1 curl https://${WEBAPP_URL}/1Cloud Shell kan inte öppna en lokal webbläsare, så om du arbetar i Cloud Shell är det enklaste sättet att visa webbappen att välja domänen Browse eller Default längst upp på appens Azure portalsida. Lägg sedan till
/checklisteller/checklist/1i slutet av URL:en i webbläsaren, till exempelhttps://mysql-mi-app.azurewebsites.net/checklist.
Rensa resurser
När du är klar med den här självstudien kan du undvika extra kostnader genom att ta bort resurserna du skapade. Ta bort resursgruppen för att ta bort alla resurser som den innehåller. Se till att du inte längre behöver resurserna innan du kör kommandot.
az group delete --name $RESOURCE_GROUP --no-wait
Det kan ta lite tid att ta bort alla resurser. Argumentet --no-wait gör att kommandot kan returneras omedelbart.