Ejercicio: Restricción del acceso al entorno de Azure Container Apps
En esta unidad, asegúrese de que solo la aplicación Quarkus puede acceder a la base de datos postgreSQL y no a otros clientes externos. Actualmente puede acceder a la base de datos desde cualquier cliente mediante la CLI de Azure y ejecutar Quarkus localmente. Esta configuración no es segura. Debe agregar una regla de firewall para permitir que solo las direcciones IP del entorno de Azure Container Apps accedan al servidor de bases de datos.
Acceso al servidor postgreSQL mediante la CLI
En primer lugar, asegúrese de que puede acceder al servidor postgreSQL mediante la CLI de Azure. Para ello, ejecute este comando:
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
Debería poder ver el contenido de la base de datos. Si es posible, se puede acceder a la base de datos fuera del entorno.
Eliminación de la regla de firewall permisiva
Azure Database for PostgreSQL proporciona seguridad de forma predeterminada. Normalmente, su firewall no permite conexiones entrantes. Pero al crear el servidor PostgreSQL, especificó el parámetro --public-access "All" para habilitar el acceso externo, que configuró el firewall para que esté abierto al público.
Para enumerar las reglas de firewall existentes, ejecute este comando:
az postgres flexible-server firewall-rule list \
--name "$AZ_POSTGRES_SERVER_NAME" \
--resource-group "$AZ_RESOURCE_GROUP" \
--output table
Deberías ver la siguiente salida:
EndIpAddress Name ResourceGroup StartIpAddress
--------------- --------------------------- ---------------------- ----------------
255.255.255.255 AllowAll_2025-2-26_16-57-40 rgazure-deploy-quarkus 0.0.0.0
Observe que el intervalo de direcciones IP permitidas se 0.0.0.0 a través de 255.255.255.255. Una regla de firewall como esta permite que cualquier cliente acceda a la base de datos. Para asegurarse de que solo la aplicación Quarkus pueda acceder a la base de datos, debe actualizar las reglas de firewall del servidor postgreSQL.
En este caso, solo es cuestión de quitar la regla pública. Para quitarlo, ejecute el siguiente comando:
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
Ahora intente consultar la base de datos mediante la ejecución de una instrucción SQL desde la 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
La llamada finalmente agota el tiempo de espera. Debería ver este mensaje:
Unable to connect to flexible server: connection to server failed: Operation timed out
Dado que quitó todas las reglas de firewall, ahora incluso la aplicación Quarkus no puede acceder a la base de datos. Si intenta recuperar la instrucción to-dos de la base de datos, se produce un error en la solicitud. Ejecute la siguiente solicitud cURL:
curl https://$AZ_APP_URL/api/todos
Adición de una nueva regla de firewall
Debe configurar el firewall para permitir el acceso solo a la aplicación Quarkus. Debe agregar una nueva regla de firewall. Para agregar la regla, ejecute este comando:
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"
Establecer el start-ip-address y el end-ip-address en 0.0.0.0 permite el acceso desde todas las direcciones IP internas de Azure, pero no permite el acceso desde direcciones IP externas. Esta práctica ayuda a proteger la base de datos del acceso externo.
Si intenta acceder a la base de datos desde la CLI mediante la ejecución del comando siguiente, se producirá un error en el intento:
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
Sin embargo, si intenta usar el siguiente comando para recuperar las tareas pendientes de la base de datos a través de la aplicación Quarkus que se ejecuta en Container Apps, el intento se realiza correctamente:
curl https://$AZ_APP_URL/api/todos
Este comando devuelve la lista de todos los elementos to-do de la base de datos. Se puede acceder al servidor PostgreSQL desde la aplicación Quarkus que se ejecuta en un servicio de Azure, pero no se puede acceder desde fuera de Azure.