Exercice : limiter l’accès à l’environnement Azure Container Apps
Dans cette unité, vous veillez à ce que la base de données PostgreSQL soit accessible uniquement par l’application Quarkus, et non par d’autres clients externes. Vous pouvez accéder actuellement à la base de données à partir de n’importe quel client en utilisant Azure CLI et en exécutant Quarkus 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 en tirant parti de l’interface CLI
Tout d’abord, veillez que vous pouvez accéder au serveur PostgreSQL en utilisant 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 voulez, vous pouvez accéder à la base de données en dehors de l’environnement.
Supprimer la règle de pare-feu permissive
Azure Database pour PostgreSQL offre une sécurité par défaut. Son pare-feu n’autorise généralement pas les connexions entrantes. Toutefois, quand vous avez créé le serveur PostgreSQL, vous avez spécifié le paramètre --public-access "All"
pour activer l’accès externe, ce qui a configuré l’ouverture du pare-feu au public.
Vous pouvez lister les règles de pare-feu existantes en exécutant la commande suivante :
az postgres flexible-server firewall-rule list \
--name "$AZ_POSTGRES_SERVER_NAME" \
--resource-group "$AZ_RESOURCE_GROUP" \
--output table
Vous devez normalement voir la sortie suivante :
EndIpAddress Name ResourceGroup StartIpAddress
--------------- ------------------------- ----------------------- ----------------
255.255.255.255 AllowAll_2023-1-3_10-20-4 rgazure-deploy-quarkus 0.0.0.0
Notez que la plage d’adresses IP autorisée est 0.0.0.0
à 255.255.255.255
. Une telle règle de pare-feu permet à tout client d’accéder à la base de données. Pour vérifier que seule l’application Quarkus 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. Supprimez-la en exécutant 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
À présent, essayez 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 à la fin. Vous devriez voir ce message :
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, l’application Quarkus n’a maintenant aucun accès à la base de données. Si vous essayez de récupérer les tâches à partir 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 de façon à ce qu’il accepte uniquement l’accès à partir de 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 start-ip-address
et de end-ip-address
sur 0.0.0.0
autorise l’accès à partir de toutes les adresses IP internes Azure, mais n’autorise l’accès d’aucune adresse IP externe. Il s’agit d’une bonne pratique pour sécuriser la base de données contre l’accès externe.
Si vous tentez 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
Mais si vous tentez d’utiliser la commande suivante pour récupérer les tâches à partir de la base de données via l’application Quarkus qui s’exécute sur Container Apps, la tentative réussit :
curl https://$AZ_APP_URL/api/todos
Cette commande retourne la liste de toutes les tâches de la base de données. Le serveur PostgreSQL est accessible à partir de l’application Quarkus qui s’exécute sur un service Azure, mais pas en dehors d’Azure.