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 selfpatching in Azure. Het biedt ook een beheerde identiteit voor uw app. Dit is 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 account hebt, maakt u een free-account 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 for PostgreSQL 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 bijbehorende gegevens op wanneer deze wordt uitgevoerd, waarbij de toepassingsstatus behouden blijft, ongeacht waar u de toepassing uitvoert.

  1. Meld u aan bij het Azure CLI en stel desgewenst uw abonnement in als u meer dan één abonnement hebt verbonden met uw aanmeldingsreferenties.

    az login
    az account set --subscription <subscription-ID>
    
  2. Maak een Azure resourcegroep, waarbij u de naam van de resourcegroep noteert.

    export RESOURCE_GROUP=<resource-group-name>
    export LOCATION=eastus
    
    az group create --name $RESOURCE_GROUP --location $LOCATION
    
  3. Maak een Azure Database 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 de app-instellingen bij en voeg de plugin toe aan de 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

Test de toepassing door de volgende opdracht uit te voeren.

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

Hulpmiddelen opschonen

In de voorgaande stappen hebt u Azure resources in een resourcegroep gemaakt. Als u deze resources in de toekomst niet meer nodig hebt, verwijdert u de resourcegroep door de volgende opdracht uit te voeren in de Cloud Shell:

az group delete --name myResourceGroup

Het uitvoeren van deze opdracht kan een minuut duren.

Volgende stappen

Meer informatie over het uitvoeren van Java-apps op App Service op Linux in de ontwikkelaarshandleiding.

Meer informatie over het beveiligen van uw app met een aangepast domein en certificaat.