Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
In deze zelfstudie leert u hoe u een Java JBoss EAP-app verbindt op Azure App Service met een Azure Database for MySQL-database met behulp van een beheerde identiteit. App Service kan managed identity gebruiken om beveiligde toegang te bieden tot Azure Database for MySQL en andere Azure-services. Een beheerde identiteit elimineert de noodzaak om geheimen in uw app te gebruiken, zoals referenties in de omgevingsvariabelen.
In deze zelfstudie worden Azure CLI opdrachten gebruikt om de volgende taken uit te voeren:
- Hiermee maakt u een Azure Database for MySQL-server en -database.
- Implementeert een JBoss EAP-voorbeeld-app in App Service met behulp van een WAR-pakket.
- Hiermee configureert u de Spring Boot-webtoepassing voor het gebruik van Microsoft Entra verificatie met de MySQL-database.
- Hiermee verbindt u de web-app met de MySQL-database met behulp van Service Connector met verificatie van beheerde identiteiten.
Vereisten
Een Azure-abonnement met Microsoft Entra roltoewijzingsmachtigingen en Azure schrijfmachtigingen voor resources in een Azure regio die serviceconnector ondersteunt en voldoende App-serviceondersteuning en -quota heeft voor de zelfstudie.
De
Microsoft.ServiceLinkerenMicrosoft.DBforMySQLresourceproviders die zijn geregistreerd in uw Azure-abonnement. U kuntaz provider register -n Microsoft.[service]uitvoeren om de providers te registreren.Git om de voorbeeldopslagplaats te openen en te klonen.
Toegang tot Azure Cloud Shell om de zelfstudiestappen uit te voeren, of als u liever lokaal wilt uitvoeren, zijn de volgende vereisten en stappen:
Java JDKGeïnstalleerdMaven geïnstalleerd
jqGeïnstalleerdMySQL-client geïnstalleerd
Azure CLI 2.46.0 of hoger geïnstalleerd. Voer de opdracht uit
az --versionom uw versie te controleren. Voeraz upgradeuit voor een upgrade.Als u lokaal werkt:
- Meld u aan bij Azure met behulp van
az loginen volg de aanwijzingen. - Als u meer dan één Azure abonnement hebt verbonden met uw aanmeldingsreferenties, voert u
az account set --subscription <subscription-ID>uit om het juiste abonnement te selecteren.
- Meld u aan bij Azure met behulp van
Uw omgeving instellen
Installeer de volgende Azure CLI-extensies:
az extension add --name serviceconnector-passwordless --upgrade az extension add --name rdbms-connectVoer de volgende opdrachten uit om de voorbeeldopslagplaats te klonen en mappen te wijzigen in de projectmap van de voorbeeld-app. Voer alle resterende opdrachten uit vanuit deze map.
git clone https://github.com/Azure-Samples/Passwordless-Connections-for-Java-Apps cd Passwordless-Connections-for-Java-Apps/JakartaEE/jboss-eap/Definieer de volgende omgevingsvariabelen voor de zelfstudie, waarbij u de
<region>tijdelijke aanduiding vervangt door een geldige waarde.LOCATIONmoet een regio van Azure zijn waarin uw abonnement voldoende capaciteit heeft om de Azure-resources aan te maken en geen beperkingen op een van de services.LOCATION="<region>" RESOURCE_GROUP="mysql-mi-webapp"Maak een Azure resourcegroep om alle projectresources te bevatten. De naam van de resourcegroep wordt in de cache opgeslagen en automatisch toegepast op volgende opdrachten.
az group create --name $RESOURCE_GROUP --location $LOCATION
Een Azure MySQL-database maken
Maak een Azure-database voor een MySQL-server en database in uw abonnement aan. De Spring Boot-app maakt verbinding met deze database en slaat de bijbehorende gegevens op wanneer deze wordt uitgevoerd, waardoor de toepassingsstatus behouden blijft, ongeacht waar u de toepassing uitvoert.
Voer de volgende opdracht uit om een Azure Database for MySQL-server te maken. De naam
MYSQL_HOSTmoet uniek zijn in alle Azure.Notitie
Hoewel de opdracht een beheerdersaccount definieert, wordt het account niet gebruikt omdat het Microsoft Entra beheerdersaccount alle beheertaken uitvoert.
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 32Maak een database genaamd
checklistvoor gebruik door de applicatie.export DATABASE_NAME="checklist" az mysql flexible-server db create \ --resource-group $RESOURCE_GROUP \ --server-name $MYSQL_HOST \ --database-name $DATABASE_NAMEOpen een firewall om verbinding met de database vanaf uw huidige IP-adres toe te staan.
# 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}Maak verbinding met de database en maak de tabellen zoals opgegeven in het voorbeeldprojectbestand /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.sqlVerwijder de tijdelijke firewallregel.
az mysql flexible-server firewall-rule delete \ --resource-group $RESOURCE_GROUP \ --name $MYSQL_HOST \ --rule-name AllowCurrentMachineToConnect
Een App Service-resource maken
Maak een App Service JBoss EAP-resource in Linux. JBoss EAP vereist een Premium-laag 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"
Een door de gebruiker toegewezen beheerde identiteit maken en configureren
Gebruik de volgende opdracht om een Azure door de gebruiker toegewezen beheerde identiteit te maken die moet worden gebruikt voor Microsoft Entra verificatie. Zie Microsoft Entra-verificatie instellen voor Azure Database for MySQL - Flexible Server voor meer informatie.
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)
De nieuwe door de gebruiker toegewezen identiteit User.Read.All, GroupMember.Read.All en Application.Read.All machtigingen verlenen. Als alternatief kunt u de identiteit de Microsoft Entra ingebouwde rol Directory Readers geven.
Azure CLI wordt niet ondersteund voor het toewijzen van Microsoft Entra machtigingen of rollen. U kunt de Microsoft Entra-beheercentrum, Microsoft Graph PowerShell of Microsoft Graph-API gebruiken om de toewijzingen te maken. Zie Microsoft Entra-rollen toewijzenvoor meer informatie.
Notitie
Als u deze toewijzingen wilt toevoegen, moet u ten minste de rol of machtigingen van Privileged Role Administrator in uw Microsoft Entra-tenant hebben. Als u deze rol niet hebt, vraagt u de globale beheerder of bevoorrechte rolbeheerder om de machtigingen te verlenen.
Beheerde identiteit gebruiken om de services te verbinden
Gebruik Service Connector om uw App Service JBoss EAP-web-app te verbinden met de MySQL-database met een beheerde identiteit. ServiceConnector voert de volgende taken op de achtergrond uit:
- Hiermee stelt u de huidige aangemelde gebruiker in als de Microsoft Entra-databasebeheerder.
- Hiermee schakelt u door het systeem toegewezen beheerde identiteit voor de app in.
- Voegt een databasegebruiker toe voor de door het systeem toegewezen beheerde identiteit en verleent alle databasebevoegdheden aan deze gebruiker.
- Hiermee voegt u een verbindingsreeks met de naam
AZURE_MYSQL_CONNECTIONSTRINGtoe aan de App-instellingen.
Gebruik de volgende opdracht az webapp connection create om uw app te verbinden met de MySQL-database met behulp van de beheerde identiteit.
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
De app bouwen en implementeren
Voer de volgende code uit om de invoegtoepassing voor verificatie zonder wachtwoord toe te voegen aan de gegenereerde verbindingsreeks Service Connector. Het opstartscript van de app verwijst naar deze verbindingsreeks.
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}"Bouw de app met behulp van het pom.xml-bestand in de voorbeeld-app om het WAR-bestand te genereren.
mvn clean package -DskipTestsImplementeer het WAR-bestand en het opstartscript in 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
De app testen
Voer de volgende code uit om een lijst met enkele lijstitems te maken.
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/itemAls u lokaal werkt, voert u de volgende code uit om de app weer te geven:
# Get all list items curl https://${WEBAPP_URL} # Get list item 1 curl https://${WEBAPP_URL}/1Cloud Shell kan geen lokale browser openen, dus als u in Cloud Shell werkt, kunt u de web-app het eenvoudigst weergeven door de Browse of Default-domein koppeling boven aan de Azure portalpagina van de web-app te selecteren. Voeg vervolgens
/checklisten/checklist/1toe aan het einde van de URL in uw browser, bijvoorbeeldhttps://mysql-mi-app.azurewebsites.net/checklist.
Resources opschonen
Wanneer u klaar bent met deze zelfstudie, kunt u verdere kosten voorkomen door de resources die u hebt gemaakt te verwijderen. Verwijder de resourcegroep om alle resources te verwijderen die deze bevat. Zorg ervoor dat u de resources niet meer nodig hebt voordat u de opdracht uitvoert.
az group delete --name $RESOURCE_GROUP --no-wait
Alle resources verwijderen kan enige tijd duren. Met --no-wait het argument kan de opdracht onmiddellijk worden geretourneerd.