Exercice - Restreindre l’accès à l’environnement Azure Container Apps

Effectué

Dans cette unité, vous vous assurez que la base de données PostgreSQL est accessible uniquement par l’application PostgreSQL, et non par d’autres clients externes. Vous pouvez actuellement accéder à la base de données à partir de n’importe quel client à l’aide d’Azure CLI et exécuter Automatiqueus localement. Cette configuration n’est pas sécurisée. Vous devez ajouter une règle de pare-feu pour autoriser uniquement les adresses IP de l’environnement Azure Container Apps à accéder au serveur de base de données.

Accéder au serveur PostgreSQL à l’aide de l’interface CLI

Tout d’abord, vérifiez que vous pouvez accéder au serveur PostgreSQL à l’aide d’Azure CLI. Pour ce faire, exécutez cette commande :

az postgres flexible-server execute \
    --name "$AZ_POSTGRES_SERVER_NAME" \
    --database-name "$AZ_POSTGRES_DB_NAME" \
    --admin-user "$AZ_POSTGRES_USERNAME" \
    --admin-password "$AZ_POSTGRES_PASSWORD" \
    --querytext "select * from Todo" \
    --output table

Vous devriez être en mesure de voir le contenu de la base de données. Si vous le pouvez, la base de données est accessible en dehors de l’environnement.

Supprimer la règle de pare-feu permissive

Azure Database pour PostgreSQL fournit la sécurité par défaut. Son pare-feu n’autorise généralement pas les connexions entrantes. Toutefois, lorsque vous avez créé le serveur PostgreSQL, vous avez spécifié le paramètre --public-access "All" pour activer l’accès externe, qui a configuré le pare-feu pour qu’il soit ouvert au public.

Vous pouvez répertorier les règles de pare-feu existantes en exécutant cette commande :

az postgres flexible-server firewall-rule list \
    --name "$AZ_POSTGRES_SERVER_NAME" \
    --resource-group "$AZ_RESOURCE_GROUP" \
    --output table

La sortie suivante doit s’afficher :

EndIpAddress     Name                         ResourceGroup           StartIpAddress
---------------  ---------------------------  ----------------------  ----------------
255.255.255.255  AllowAll_2025-2-26_16-57-40  rgazure-deploy-quarkus  0.0.0.0

Notez que la plage d’adresses IP autorisées est 0.0.0.0 via 255.255.255.255. Une règle de pare-feu comme celle-ci permet à n’importe quel client d’accéder à la base de données. Pour vous assurer que seule l’application Firewallus peut accéder à la base de données, vous devez mettre à jour les règles de pare-feu du serveur PostgreSQL. Dans ce cas, il s’agit simplement de supprimer la règle publique. Pour le supprimer, exécutez la commande suivante :

az postgres flexible-server firewall-rule delete \
    --name "$AZ_POSTGRES_SERVER_NAME" \
    --resource-group "$AZ_RESOURCE_GROUP" \
    --rule-name <name of the AllowAll firewall rule> \
    --yes

Essayez maintenant d’interroger la base de données en exécutant une instruction SQL à partir de l’interface CLI :

az postgres flexible-server execute \
    --name "$AZ_POSTGRES_SERVER_NAME" \
    --database-name "$AZ_POSTGRES_DB_NAME" \
    --admin-user "$AZ_POSTGRES_USERNAME" \
    --admin-password "$AZ_POSTGRES_PASSWORD" \
    --querytext "select * from Todo" \
    --output table

L’appel expire finalement. Ce message doit s’afficher :

Unable to connect to flexible server: connection to server failed: Operation timed out

Étant donné que vous avez supprimé toutes les règles de pare-feu, même l’application Firewallus ne peut pas accéder à la base de données. Si vous essayez de récupérer les tâches de la base de données, la requête échoue. Exécutez la requête cURL suivante :

curl https://$AZ_APP_URL/api/todos

Ajouter une nouvelle règle de pare-feu

Vous devez configurer le pare-feu pour autoriser l’accès uniquement à l’application Quarkus. Vous devez ajouter une nouvelle règle de pare-feu. Pour ajouter la règle, exécutez cette commande :

az postgres flexible-server firewall-rule create \
    --name "$AZ_POSTGRES_SERVER_NAME" \
    --resource-group "$AZ_RESOURCE_GROUP" \
    --rule-name "Allow_Azure-internal-IP-addresses" \
    --start-ip-address "0.0.0.0" \
    --end-ip-address "0.0.0.0"

La définition de la start-ip-address et de l'end-ip-address sur 0.0.0.0 autorise l’accès à partir de toutes les adresses IP internes Azure, mais n’autorise pas l’accès à partir d’adresses IP externes. Cette pratique permet de sécuriser la base de données à partir d’un accès externe.

Si vous essayez d’accéder à la base de données à partir de l’interface CLI en exécutant la commande suivante, la tentative doit échouer :

az postgres flexible-server execute \
    --name "$AZ_POSTGRES_SERVER_NAME" \
    --database-name "$AZ_POSTGRES_DB_NAME" \
    --admin-user "$AZ_POSTGRES_USERNAME" \
    --admin-password "$AZ_POSTGRES_PASSWORD" \
    --querytext "select * from Todo" \
    --output table

Toutefois, si vous essayez d’utiliser la commande suivante pour récupérer les tâches à partir de la base de données via l’application Dockerus qui s’exécute sur Container Apps, la tentative réussit :

curl https://$AZ_APP_URL/api/todos

Cette commande retourne la liste de tous les éléments to-do de la base de données. Le serveur PostgreSQL est accessible à partir de l’application Backupus qui s’exécute sur un service Azure, mais il n’est pas accessible depuis l’extérieur d’Azure.