Gyakorlat – Az Azure Container Apps-környezethez való hozzáférés korlátozása
Ebben a leckében győződjön meg arról, hogy a PostgreSQL-adatbázis csak a Quarkus-alkalmazás, és nem más külső ügyfelek számára érhető el. Az adatbázist jelenleg bármely ügyfélről elérheti az Azure CLI használatával és a Quarkus helyi futtatásával. Ez a konfiguráció nem biztonságos. Olyan tűzfalszabályt kell hozzáadnia, amely csak az Azure Container Apps-környezetben lévő IP-címeknek engedélyezi az adatbázis-kiszolgáló elérését.
A PostgreSQL-kiszolgáló elérése a parancssori felület használatával
Először győződjön meg arról, hogy hozzáfér a PostgreSQL-kiszolgálóhoz az Azure CLI használatával. Ehhez futtassa a következő parancsot:
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átnia kell az adatbázis tartalmát. Ha teheti, az adatbázis a környezeten kívül is elérhető.
A megengedő tűzfalszabály eltávolítása
Az Azure Database for PostgreSQL alapértelmezés szerint biztonságot nyújt. A tűzfal általában nem engedélyezi a bejövő kapcsolatokat. A PostgreSQL-kiszolgáló létrehozásakor azonban megadta a --public-access "All" paramétert a külső hozzáférés engedélyezéséhez, amely konfigurálta a tűzfal nyilvános megnyitását.
A meglévő tűzfalszabályokat a következő paranccsal listázhatja:
az postgres flexible-server firewall-rule list \
--name "$AZ_POSTGRES_SERVER_NAME" \
--resource-group "$AZ_RESOURCE_GROUP" \
--output table
A következő kimenetnek kell megjelennie:
EndIpAddress Name ResourceGroup StartIpAddress
--------------- --------------------------- ---------------------- ----------------
255.255.255.255 AllowAll_2025-2-26_16-57-40 rgazure-deploy-quarkus 0.0.0.0
Figyelje meg, hogy az engedélyezett IP-címek tartománya 0.0.0.0255.255.255.255. Az ilyen tűzfalszabályokkal bármely ügyfél hozzáférhet az adatbázishoz. Ahhoz, hogy csak a Quarkus-alkalmazás férhessen hozzá az adatbázishoz, frissítenie kell a PostgreSQL-kiszolgáló tűzfalszabályait.
Ebben az esetben csak a nyilvános szabály eltávolításáról van szó. Az eltávolításhoz futtassa a következő parancsot:
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
Most próbálja meg lekérdezni az adatbázist egy SQL-utasítás futtatásával a parancssori felületről:
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
A hívás végül túllépi az időkorlátot. A következő üzenetnek kell megjelennie:
Unable to connect to flexible server: connection to server failed: Operation timed out
Mivel eltávolította az összes tűzfalszabályt, még a Quarkus-alkalmazás sem fér hozzá az adatbázishoz. Ha megpróbálja lekérni a teendőket az adatbázisból, a kérés meghiúsul. Futtassa a következő cURL-kérést:
curl https://$AZ_APP_URL/api/todos
Új tűzfalszabály hozzáadása
Konfigurálnia kell a tűzfalat, hogy csak a Quarkus-alkalmazáshoz legyen hozzáférése. Új tűzfalszabályt kell hozzáadnia. A szabály hozzáadásához futtassa a következő parancsot:
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"
A start-ip-address és a end-ip-address0.0.0.0 beállítása lehetővé teszi a hozzáférést az összes Azure-belső IP-címről, de nem engedélyezi a külső IP-címekről való hozzáférést. Ez a gyakorlat segít az adatbázis külső hozzáféréssel való védelmében.
Ha az alábbi parancs futtatásával próbál hozzáférni az adatbázishoz a parancssori felületről, a kísérlet sikertelen lesz:
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
Ha azonban a következő paranccsal próbálja lekérni a teendőket az adatbázisból a Container Appsen futó Quarkus-alkalmazáson keresztül, a kísérlet sikeres lesz:
curl https://$AZ_APP_URL/api/todos
Ez a parancs az adatbázis összes to-do elemének listáját adja vissza. A PostgreSQL-kiszolgáló az Azure-szolgáltatáson futó Quarkus-alkalmazásból érhető el, de az Azure-on kívülről nem érhető el.