Øvelse – Begræns adgangen til Azure Container Apps-miljøet

Fuldført

I dette undermodul sikrer du, at PostgreSQL-databasen kun kan tilgås af Quarkus-programmet og ikke af andre eksterne klienter. Du kan i øjeblikket få adgang til databasen fra en hvilken som helst klient ved hjælp af Azure CLI og køre Quarkus lokalt. Denne konfiguration er ikke sikker. Du skal tilføje en firewallregel for kun at tillade IP-adresser i Azure Container Apps-miljøet at få adgang til databaseserveren.

Få adgang til PostgreSQL-serveren ved hjælp af kommandolinjegrænsefladen

Først skal du sørge for, at du kan få adgang til PostgreSQL-serveren ved hjælp af Kommandolinjegrænsefladen i Azure. Det gør du ved at køre denne kommando:

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 kunne se indholdet af databasen. Hvis du kan, kan du få adgang til databasen uden for miljøet.

Fjern den tilladte firewallregel

Azure Database for PostgreSQL leverer som standard sikkerhed. Firewallen tillader normalt ikke indgående forbindelser. Men da du oprettede PostgreSQL-serveren, angav du parameteren --public-access "All" for at aktivere ekstern adgang, som konfigurerede firewallen til at være åben for offentligheden.

Du kan få vist de eksisterende firewallregler ved at køre denne kommando:

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

Du bør kunne se følgende output:

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

Bemærk, at intervallet for tilladte IP-adresser 0.0.0.0 via 255.255.255.255. En firewallregel som denne giver alle klienter adgang til databasen. Hvis du vil sikre dig, at det kun er Quarkus-programmet, der har adgang til databasen, skal du opdatere firewallreglerne for PostgreSQL-serveren. I dette tilfælde er det bare et spørgsmål om at fjerne den offentlige regel. Kør følgende kommando for at fjerne den:

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øv nu at forespørge databasen ved at køre en SQL-sætning fra kommandolinjegrænsefladen:

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

Opkaldet udløber til sidst. Du bør se denne meddelelse:

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

Da du har fjernet alle firewallreglerne, kan selv Quarkus-programmet nu ikke få adgang til databasen. Hvis du forsøger at hente opgaveerne fra databasen, mislykkes anmodningen. Kør følgende cURL-anmodning:

curl https://$AZ_APP_URL/api/todos

Tilføj en ny firewallregel

Du skal konfigurere firewallen for kun at tillade adgang til Quarkus-programmet. Du skal tilføje en ny firewallregel. Kør denne kommando for at tilføje reglen:

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"

Angivelse af start-ip-address og end-ip-address til 0.0.0.0 giver adgang fra alle interne Ip-adresser i Azure, men tillader ikke adgang fra eksterne IP-adresser. Denne praksis hjælper med at sikre databasen mod ekstern adgang.

Hvis du forsøger at få adgang til databasen fra kommandolinjegrænsefladen ved at køre følgende kommando, bør forsøget mislykkes:

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 hvis du forsøger at bruge følgende kommando til at hente to-dos fra databasen via Quarkus-programmet, der kører på Container Apps, lykkes forsøget:

curl https://$AZ_APP_URL/api/todos

Denne kommando returnerer listen over alle to-do elementer fra databasen. Du kan få adgang til PostgreSQL-serveren fra Quarkus-programmet, der kører på en Azure-tjeneste, men der kan ikke opnås adgang til den uden for Azure.