Självstudie: Ansluta till en PostgreSQL-databas från Java Tomcat App Service utan hemligheter med hjälp av en hanterad identitet
Azure App Service tillhandahåller en mycket skalbar webbvärdtjänst med självkorrigering i Azure. Den tillhandahåller också en hanterad identitet för din app, vilket är en nyckelfärdig lösning för att skydda åtkomsten till Azure Database for PostgreSQL och andra Azure-tjänster. Hanterade identiteter i App Service gör din app säkrare genom att eliminera hemligheter från din app, till exempel autentiseringsuppgifter i miljövariablerna. I den här självstudien lär du dig att:
- Skapa en PostgreSQL-databas.
- Distribuera exempelappen till Azure App Service på Tomcat med war-paketering.
- Konfigurera ett Tomcat-webbprogram så att det använder Microsoft Entra-autentisering med PostgreSQL Database.
- Anslut till PostgreSQL Database med hanterad identitet med hjälp av Service Connector.
Om du inte har en Azure-prenumeration skapar du ett kostnadsfritt Azure-konto innan du börjar.
Förutsättningar
Klona exempelappen och förbered lagringsplatsen
Kör följande kommandon i terminalen för att klona exempelrepo och konfigurera exempelappmiljön.
git clone https://github.com/Azure-Samples/Passwordless-Connections-for-Java-Apps
cd Passwordless-Connections-for-Java-Apps/Tomcat/
Skapa en Azure Database för PostgreSQL
Följ de här stegen för att skapa en Azure Database for Postgres i din prenumeration. Tomcat-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.
Logga in på Azure CLI och ange din prenumeration om du har fler än en ansluten till dina inloggningsuppgifter.
az login az account set --subscription <subscription-ID>
Skapa en Azure-resursgrupp och notera resursgruppens namn.
export RESOURCE_GROUP=<resource-group-name> export LOCATION=eastus az group create --name $RESOURCE_GROUP --location $LOCATION
Skapa en Azure Database for PostgreSQL-server. Servern skapas med ett administratörskonto, men den används inte eftersom vi ska använda Microsoft Entra-administratörskontot för att utföra administrativa uppgifter.
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
Skapa en databas för programmet.
export DATABASE_NAME=checklist az postgres flexible-server db create \ --resource-group $RESOURCE_GROUP \ --server-name $POSTGRESQL_HOST \ --database-name $DATABASE_NAME
Distribuera programmet till App Service
Följ de här stegen för att skapa en WAR-fil och distribuera till Azure App Service på Tomcat med hjälp av en WAR-paketering.
Exempelappen innehåller en pom.xml fil som kan generera WAR-filen. Kör följande kommando för att skapa appen.
mvn clean package -f pom.xml
Skapa en Azure App Service-resurs i Linux med 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"
Distribuera WAR-paketet till App Service.
az webapp deploy \ --resource-group $RESOURCE_GROUP \ --name $APPSERVICE_NAME \ --src-path target/app.war \ --type war
Ansluta Postgres-databasen med identitetsanslutning
Anslut sedan databasen med hjälp av Service Connector.
Installera det lösenordslösa tillägget för Service Connector för Azure CLI:
az extension add --name serviceconnector-passwordless --upgrade
Anslut sedan din app till en Postgres-databas med en systemtilldelad hanterad identitet med hjälp av Service Connector.
För att upprätta den här anslutningen kör du kommandot az webapp connection create .
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
Det här kommandot skapar en anslutning mellan webbappen och PostgreSQL-servern och hanterar autentisering via en systemtilldelad hanterad identitet.
Uppdatera sedan appinställningar och lägg till plugin-program i anslutningssträng
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"'
Testa exemplet på webbapp
Kör följande kommando för att testa programmet.
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
Rensa resurser
I de föregående stegen skapade du Azure-resurser i en resursgrupp. Om du inte tror att du behöver dessa resurser i framtiden tar du bort resursgruppen genom att köra följande kommando i Cloud Shell:
az group delete --name myResourceGroup
Det kan några minuter att köra kommandot.
Nästa steg
Läs mer om hur du kör Java-appar i App Service på Linux i utvecklarhandboken.
Lär dig hur du skyddar din app med en anpassad domän och ett certifikat.