Øvelse – Begrense tilgangen til Azure Container Apps-miljøet
I denne enheten sikrer du at PostgreSQL-databasen bare kan åpnes av Quarkus-programmet, og ikke av andre eksterne klienter. Du kan for øyeblikket få tilgang til databasen fra en hvilken som helst klient ved hjelp av Azure CLI og kjøre Quarkus lokalt. Denne konfigurasjonen er ikke sikker. Du må legge til en brannmurregel for å tillate at bare IP-adresser i Azure Container Apps-miljøet får tilgang til databaseserveren.
Få tilgang til PostgreSQL-serveren ved hjelp av CLI
Kontroller først at du har tilgang til PostgreSQL-serveren ved hjelp av Azure CLI. Hvis du vil gjøre dette, kjører du denne kommandoen:
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 skal kunne se innholdet i databasen. Hvis du kan, kan du få tilgang til databasen utenfor miljøet.
Fjern den tillatte brannmurregelen
Azure Database for PostgreSQL gir sikkerhet som standard. Brannmuren tillater vanligvis ikke innkommende tilkoblinger. Men da du opprettet PostgreSQL-serveren, angav du --public-access "All"-parameteren for å aktivere ekstern tilgang, som konfigurerte brannmuren til å være åpen for publikum.
Du kan føre opp eksisterende brannmurregler ved å kjøre denne kommandoen:
az postgres flexible-server firewall-rule list \
--name "$AZ_POSTGRES_SERVER_NAME" \
--resource-group "$AZ_RESOURCE_GROUP" \
--output table
Du skal se følgende utdata:
EndIpAddress Name ResourceGroup StartIpAddress
--------------- --------------------------- ---------------------- ----------------
255.255.255.255 AllowAll_2025-2-26_16-57-40 rgazure-deploy-quarkus 0.0.0.0
Legg merke til at området med tillatte IP-adresser 0.0.0.0 gjennom 255.255.255.255. En brannmurregel som dette gir alle klienter tilgang til databasen. Hvis du vil sikre at bare Quarkus-programmet har tilgang til databasen, må du oppdatere brannmurreglene for PostgreSQL-serveren.
I dette tilfellet er det bare et spørsmål om å fjerne den offentlige regelen. Hvis du vil fjerne den, kjører du følgende 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
Prøv nå å spørre databasen ved å kjøre en SQL-setning fra 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
Samtalen blir til slutt tidsavbrutt. Du skal se denne meldingen:
Unable to connect to flexible server: connection to server failed: Operation timed out
Fordi du fjernet alle brannmurreglene, får ikke selv Quarkus-programmet tilgang til databasen. Hvis du prøver å hente gjøremålene fra databasen, mislykkes forespørselen. Kjør følgende cURL-forespørsel:
curl https://$AZ_APP_URL/api/todos
Legg til en ny brannmurregel
Du må konfigurere brannmuren for å gi tilgang til bare Quarkus-programmet. Du må legge til en ny brannmurregel. Hvis du vil legge til regelen, kjører du denne kommandoen:
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"
Hvis du angir start-ip-address og end-ip-address til 0.0.0.0, får du tilgang fra alle Azure-interne IP-adresser, men tillater ikke tilgang fra eksterne IP-adresser. Denne praksisen bidrar til å sikre databasen fra ekstern tilgang.
Hvis du prøver å få tilgang til databasen fra CLI ved å kjøre følgende kommando, bør forsøket 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 prøver å bruke følgende kommando til å hente gjøremålene fra databasen via Quarkus-programmet som kjører på Container Apps, lykkes forsøket:
curl https://$AZ_APP_URL/api/todos
Denne kommandoen returnerer listen over alle to-do elementer fra databasen. Du får tilgang til PostgreSQL-serveren fra Quarkus-programmet som kjører på en Azure-tjeneste, men den kan ikke nås fra utenfor Azure.