Gyakorlat – Az Azure Container Apps-környezethez való hozzáférés korlátozása

Befejeződött

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.