Partage via


Tutoriel : Se connecter à Database pour PostgreSQL à partir d’App Service Java Tomcat sans secrets à l’aide d’une identité managée

Azure App Service offre un service d'hébergement web hautement évolutif appliquant des mises à jour correctives automatiques dans Azure. Il offre également une identité managée pour votre application, qui constitue une solution clé en main permettant de sécuriser l’accès à Azure Database pour PostgreSQL et à d’autres services Azure. Les identités managées dans App Service sécurisent votre application en en éliminant les secrets, par exemple les informations d’identification dans les variables d’environnement. Dans ce tutoriel, vous allez apprendre à :

  • Créer une base de données PostgreSQL.
  • Déployer l’exemple d’application sur Azure App Service sur Tomcat à l’aide d’un package WAR.
  • Configurer une application web Tomcat pour utiliser l’authentification Microsoft Entra avec une base de données PostgreSQL.
  • Vous connecter à Database pour PostgreSQL avec une identité managée à l’aide d’un connecteur de services.

Si vous n’avez pas d’abonnement Azure, créez un compte gratuit Azure avant de commencer.

Prérequis

Cloner l’exemple d’application de liste de tâches et préparer le référentiel

Exécutez les commandes suivantes dans votre terminal pour cloner l’exemple de dépôt et configurer l’exemple d’environnement d’application.

git clone https://github.com/Azure-Samples/Passwordless-Connections-for-Java-Apps
cd Passwordless-Connections-for-Java-Apps/Tomcat/

Créer une base de données Azure pour PostgreSQL

Suivez ces étapes pour créer un serveur Azure Database pour PostgreSQL dans votre abonnement. L’application Tomcat se connecte à cette base de données et stocke ses données lors de l’exécution, entraînant la persistance de l’état de l’application, quel que soit le lieu de l’exécution.

  1. Connectez-vous à Azure CLI et définissez votre abonnement si vous en avez plusieurs connectés à vos informations d’identification.

    az login
    az account set --subscription <subscription-ID>
    
  2. Créez un groupe de ressources Azure, en notant son nom.

    export RESOURCE_GROUP=<resource-group-name>
    export LOCATION=eastus
    
    az group create --name $RESOURCE_GROUP --location $LOCATION
    
  3. Créez un serveur Azure Database pour PostgreSQL. Le serveur est créé avec un compte administrateur, mais il n’est pas utilisé, car nous utilisons le compte administrateur Microsoft Entra pour effectuer les tâches administratives.

    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. Créez une base de données pour l’application.

    export DATABASE_NAME=checklist
    
    az postgres flexible-server db create \
        --resource-group $RESOURCE_GROUP \
        --server-name $POSTGRESQL_HOST \
        --database-name $DATABASE_NAME
    

Déployer l’application sur App Service

Suivez ces étapes pour générer un fichier WAR et le déployer sur Azure App Service sur Tomcat à l’aide d’un package WAR.

  1. L’exemple d’application contient un fichier pom.xml qui peut générer le fichier WAR. Exécutez la commande suivante pour générer l’application.

    mvn clean package -f pom.xml
    
  2. Créez une ressource Azure App Service sur Linux à l’aide de 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. Déployez le package WAR sur App Service.

    az webapp deploy \
        --resource-group $RESOURCE_GROUP \
        --name $APPSERVICE_NAME \
        --src-path target/app.war \
        --type war
    

Connecter la base de données pour PostgreSQL avec une connectivité d’identité

Ensuite, connectez la base de données en utilisant Service Connector.

Installez l’extension sans mot de passe Service Connector pour Azure CLI :

az extension add --name serviceconnector-passwordless --upgrade

Ensuite, connectez votre application à une base de données PostgreSQL avec une identité managée affectée par le système à l’aide de Service Connector.

Pour effectuer cette connexion, exécutez la commande 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

Cette commande crée une connexion entre votre application web et votre serveur PostgreSQL, puis gère l’authentification par le biais d’une identité managée affectée par le système.

Ensuite, mettez à jour les paramètres de l’application et ajoutez un plug-in dans la chaîne de connexion

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"'

Tester l’exemple d’application web

Exécutez la commande suivante pour tester l’application.

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

Nettoyer les ressources

Au cours des étapes précédentes, vous avez créé des ressources Azure au sein d’un groupe de ressources. Si vous ne pensez pas avoir besoin de ces ressources à l’avenir, supprimez le groupe de ressources en exécutant la commande suivante dans Cloud Shell :

az group delete --name myResourceGroup

L’exécution de cette commande peut prendre une minute.

Étapes suivantes

Découvrez-en plus sur l’exécution des applications Java sur App Service sur Linux dans le guide du développeur.

Découvrez comment sécuriser votre application avec un domaine personnalisé et un certificat.