Delen via


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.

  1. 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>
    
  2. 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
    
  3. 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
    
  4. 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.

  1. 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
    
  2. 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"
    
  3. 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.