Øvelse – Begræns adgangen til Azure Container Apps-miljøet
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.