Zelfstudie: Verbinding maken met een PostgreSQL-database vanuit Java Tomcat App Service zonder geheimen met behulp van een beheerde identiteit
Azure App Service biedt een uiterst schaalbare webhostingservice met self-patchfunctie in Azure. Het biedt ook een beheerde identiteit voor uw app, een kant-en-klare oplossing voor het beveiligen van toegang tot Azure Database for PostgreSQL en andere Azure-services. Beheerde identiteiten in App Service maken uw app veiliger door geheimen uit uw app te elimineren, zoals referenties in de omgevingsvariabelen. In deze zelfstudie leert u het volgende:
- Maak een PostgreSQL-database.
- Implementeer de voorbeeld-app in Azure-app Service op Tomcat met behulp van WAR-pakketten.
- Configureer een Tomcat-webtoepassing voor het gebruik van Microsoft Entra-verificatie met PostgreSQL Database.
- Maak verbinding met PostgreSQL Database met Managed Identity met behulp van Service Connector.
Als u geen Azure-abonnement hebt, kunt u een gratis Azure-account maken voordat u begint.
Vereisten
De voorbeeld-app klonen en de opslagplaats voorbereiden
Voer de volgende opdrachten in de terminal uit om de voorbeeldopslagplaats te klonen en de omgeving van de voorbeeld-app in te stellen.
git clone https://github.com/Azure-Samples/Passwordless-Connections-for-Java-Apps
cd Passwordless-Connections-for-Java-Apps/Tomcat/
Een Azure Database voor PostgreSQL-server maken
Volg deze stappen om een Azure Database for Postgres te maken in uw abonnement. De Tomcat-app maakt verbinding met deze database en slaat de gegevens op wanneer deze wordt uitgevoerd, waardoor de toepassingsstatus behouden blijft, ongeacht waar u de toepassing uitvoert.
Meld u aan bij de Azure CLI en stel eventueel uw abonnement in als er meerdere zijn verbonden met uw aanmeldingsreferenties.
az login az account set --subscription <subscription-ID>
Maak een Azure-resourcegroep, waarbij de naam van de resourcegroep noteert.
export RESOURCE_GROUP=<resource-group-name> export LOCATION=eastus az group create --name $RESOURCE_GROUP --location $LOCATION
Een Azure-database maken voor PostgreSQL-server. De server wordt gemaakt met een beheerdersaccount, maar wordt niet gebruikt omdat we het Microsoft Entra-beheerdersaccount gaan gebruiken om beheertaken uit te voeren.
export POSTGRESQL_ADMIN_USER=azureuser # PostgreSQL admin access rights won't be used because Azure AD authentication is leveraged to administer the database. export POSTGRESQL_ADMIN_PASSWORD=<admin-password> export POSTGRESQL_HOST=<postgresql-host-name> # Create a PostgreSQL server. az postgres flexible-server create \ --resource-group $RESOURCE_GROUP \ --name $POSTGRESQL_HOST \ --location $LOCATION \ --admin-user $POSTGRESQL_ADMIN_USER \ --admin-password $POSTGRESQL_ADMIN_PASSWORD \ --public-access 0.0.0.0 \ --sku-name Standard_D2s_v3
Maak een database voor de toepassing.
export DATABASE_NAME=checklist az postgres flexible-server db create \ --resource-group $RESOURCE_GROUP \ --server-name $POSTGRESQL_HOST \ --database-name $DATABASE_NAME
De toepassing implementeren in App Service
Volg deze stappen om een WAR-bestand te maken en te implementeren in Azure-app Service op Tomcat met behulp van een WAR-verpakking.
De voorbeeld-app bevat een pom.xml-bestand dat het WAR-bestand kan genereren. Voer de volgende opdracht uit om de app te bouwen.
mvn clean package -f pom.xml
Maak een Azure-app Service-resource in Linux met tomcat 9.0.
export APPSERVICE_PLAN=<app-service-plan> export APPSERVICE_NAME=<app-service-name> # Create an App Service plan az appservice plan create \ --resource-group $RESOURCE_GROUP \ --name $APPSERVICE_PLAN \ --location $LOCATION \ --sku B1 \ --is-linux # Create an App Service resource. az webapp create \ --resource-group $RESOURCE_GROUP \ --name $APPSERVICE_NAME \ --plan $APPSERVICE_PLAN \ --runtime "TOMCAT:10.0-java11"
Implementeer het WAR-pakket in App Service.
az webapp deploy \ --resource-group $RESOURCE_GROUP \ --name $APPSERVICE_NAME \ --src-path target/app.war \ --type war
De Postgres-database verbinden met identiteitsconnectiviteit
Verbind vervolgens de database met behulp van Service Connector.
Installeer de serviceconnector-extensie zonder wachtwoord voor de Azure CLI:
az extension add --name serviceconnector-passwordless --upgrade
Verbind vervolgens uw app met een Postgres-database met een door het systeem toegewezen beheerde identiteit met behulp van Service Connector.
Voer de opdracht az webapp connection create uit om deze verbinding te maken .
az webapp connection create postgres-flexible \
--resource-group $RESOURCE_GROUP \
--name $APPSERVICE_NAME \
--target-resource-group $RESOURCE_GROUP \
--server $POSTGRESQL_HOST \
--database $DATABASE_NAME \
--system-identity \
--client-type java
Met deze opdracht maakt u een verbinding tussen uw web-app en uw PostgreSQL-server en beheert u verificatie via een door het systeem toegewezen beheerde identiteit.
Werk vervolgens app-instellingen bij en voeg invoegtoepassing toe aan verbindingsreeks
export AZURE_POSTGRESQL_CONNECTIONSTRING=$(\
az webapp config appsettings list \
--resource-group $RESOURCE_GROUP \
--name $APPSERVICE_NAME \
| jq -c -r '.[] \
| select ( .name == "AZURE_POSTGRESQL_CONNECTIONSTRING" ) \
| .value')
az webapp config appsettings set \
--resource-group $RESOURCE_GROUP \
--name $APPSERVICE_NAME \
--settings 'CATALINA_OPTS=-DdbUrl="'"${AZURE_POSTGRESQL_CONNECTIONSTRING}"'&authenticationPluginClassName=com.azure.identity.extensions.jdbc.postgresql.AzurePostgresqlAuthenticationPlugin"'
Het voorbeeld van de web-app testen
Voer de volgende opdracht uit om de toepassing te testen.
export WEBAPP_URL=$(az webapp show \
--resource-group $RESOURCE_GROUP \
--name $APPSERVICE_NAME \
--query defaultHostName \
--output tsv)
# 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}/checklist
# Create few items on the list 1
curl -X POST -H "Content-Type: application/json" -d '{"description": "item 1"}' https://${WEBAPP_URL}/checklist/1/item
curl -X POST -H "Content-Type: application/json" -d '{"description": "item 2"}' https://${WEBAPP_URL}/checklist/1/item
curl -X POST -H "Content-Type: application/json" -d '{"description": "item 3"}' https://${WEBAPP_URL}/checklist/1/item
# Get all lists
curl https://${WEBAPP_URL}/checklist
# Get list 1
curl https://${WEBAPP_URL}/checklist/1
Resources opschonen
In de voorgaande stappen hebt u Azure-resources in een resourcegroep gemaakt. Als u deze resources niet meer nodig denkt te hebben, verwijdert u de resourcegroep door de volgende opdracht in Cloud Shell uit te voeren:
az group delete --name myResourceGroup
Het kan een minuut duren voordat deze opdracht is uitgevoerd.
Volgende stappen
Lees meer over het uitvoeren van Java-apps in Azure App Service in Linux in de handleiding voor ontwikkelaars.
Meer informatie over het beveiligen van uw app met een aangepast domein en certificaat.