Övning – Begränsa åtkomsten till Azure Container Apps-miljön

Slutförd

I den här lektionen ser du till att PostgreSQL-databasen endast kan nås av Quarkus-programmet och inte av andra externa klienter. Du kan för närvarande komma åt databasen från valfri klient med hjälp av Azure CLI och köra Quarkus lokalt. Den här konfigurationen är inte säker. Du måste lägga till en brandväggsregel för att endast tillåta ATT IP-adresser i Azure Container Apps-miljön får åtkomst till databasservern.

Få åtkomst till PostgreSQL-servern med hjälp av CLI

Kontrollera först att du kan komma åt PostgreSQL-servern med hjälp av Azure CLI. Det gör du genom att köra det här kommandot:

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

Du bör kunna se innehållet i databasen. Om du kan kan du komma åt databasen utanför miljön.

Ta bort den tillåtna brandväggsregeln

Azure Database for PostgreSQL ger säkerhet som standard. Brandväggen tillåter vanligtvis inte inkommande anslutningar. Men när du skapade PostgreSQL-servern angav du parametern --public-access "All" för att aktivera extern åtkomst, som konfigurerade brandväggen så att den var öppen för allmänheten.

Du kan visa en lista över befintliga brandväggsregler genom att köra det här kommandot:

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

Du bör se följande utdata:

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

Observera att intervallet med tillåtna IP-adresser är 0.0.0.0 genom 255.255.255.255. En brandväggsregel som den här tillåter alla klienter att komma åt databasen. För att säkerställa att endast Quarkus-programmet kan komma åt databasen måste du uppdatera brandväggsreglerna för PostgreSQL-servern. I det här fallet handlar det bara om att ta bort den offentliga regeln. Om du vill ta bort den kör du följande kommando:

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

Försök nu att fråga databasen genom att köra en SQL-instruktion från 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

Samtalet överskrider till slut tidsgränsen. Du bör se det här meddelandet:

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

Eftersom du har tagit bort alla brandväggsregler kan inte ens Quarkus-programmet komma åt databasen. Om du försöker hämta att göra-jobbet från databasen misslyckas begäran. Kör följande cURL-begäran:

curl https://$AZ_APP_URL/api/todos

Lägga till en ny brandväggsregel

Du måste konfigurera brandväggen för att endast tillåta åtkomst till Quarkus-programmet. Du måste lägga till en ny brandväggsregel. Om du vill lägga till regeln kör du det här kommandot:

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"

Om du anger start-ip-address och end-ip-address till 0.0.0.0 tillåts åtkomst från alla Azure-interna IP-adresser men tillåter inte åtkomst från externa IP-adresser. Den här metoden hjälper till att skydda databasen från extern åtkomst.

Om du försöker komma åt databasen från CLI genom att köra följande kommando bör försöket misslyckas:

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

Men om du försöker använda följande kommando för att hämta att-göra-uppgifter från databasen genom Quarkus-programmet som körs i Container Apps lyckas försöket.

curl https://$AZ_APP_URL/api/todos

Det här kommandot returnerar listan över alla to-do objekt från databasen. PostgreSQL-servern kan nås från Quarkus-programmet som körs på en Azure-tjänst, men den kan inte nås utanför Azure.