Oefening: de toegang tot de Azure Container Apps-omgeving beperken

Voltooid

In deze les zorgt u ervoor dat de PostgreSQL-database alleen toegankelijk is voor de Quarkus-toepassing en niet door andere externe clients. U hebt momenteel toegang tot de database vanaf elke client met behulp van Azure CLI en quarkus lokaal uit te voeren. Deze configuratie is niet beveiligd. U moet een firewallregel toevoegen om alleen IP-adressen in de Azure Container Apps-omgeving toegang te geven tot de databaseserver.

Toegang tot de PostgreSQL-server met behulp van de CLI

Zorg er eerst voor dat u toegang hebt tot de PostgreSQL-server met behulp van de Azure CLI. Voer hiervoor de volgende opdracht uit:

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

U moet de inhoud van de database kunnen zien. Als dat mogelijk is, kan de database buiten de omgeving worden geopend.

De missieve firewallregel verwijderen

Azure Database for PostgreSQL biedt standaard beveiliging. De firewall staat meestal geen binnenkomende verbindingen toe. Maar toen u de PostgreSQL-server hebt gemaakt, hebt u de --public-access "All" parameter opgegeven om externe toegang in te schakelen, waardoor de firewall open moet zijn voor het publiek.

U kunt de bestaande firewallregels weergeven door deze opdracht uit te voeren:

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

U moet de volgende uitvoer zien:

EndIpAddress     Name                       ResourceGroup            StartIpAddress
---------------  -------------------------  -----------------------  ----------------
255.255.255.255  AllowAll_2023-1-3_10-20-4  rgazure-deploy-quarkus  0.0.0.0

U ziet dat het bereik van toegestane IP-adressen wordt 0.0.0.0 doorlopen 255.255.255.255. Met een firewallregel zoals deze kan elke client toegang krijgen tot de database. Om ervoor te zorgen dat alleen de Quarkus-toepassing toegang heeft tot de database, moet u de firewallregels van de PostgreSQL-server bijwerken. In dit geval is het slechts een kwestie van het verwijderen van de openbare regel. Voer de volgende opdracht uit om deze te verwijderen:

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

Probeer nu een query uit te voeren op de database door een SQL-instructie uit te voeren vanuit de 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

Er treedt uiteindelijk een time-out op voor de oproep. U ziet dit bericht:

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

Omdat u alle firewallregels hebt verwijderd, heeft zelfs de Quarkus-toepassing geen toegang tot de database. Als u de taken uit de database probeert op te halen, mislukt de aanvraag. Voer de volgende cURL-aanvraag uit:

curl https://$AZ_APP_URL/api/todos

Een nieuwe firewallregel toevoegen

U moet de firewall configureren om alleen toegang tot de Quarkus-toepassing toe te staan. U moet een nieuwe firewallregel toevoegen. Voer deze opdracht uit om de regel toe te voegen:

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"

Het instellen van en start-ip-address de end-ip-address toegang 0.0.0.0 tot alle interne IP-adressen van Azure, maar geen toegang vanaf externe IP-adressen toestaat. Deze procedure helpt bij het beveiligen van de database vanuit externe toegang.

Als u probeert toegang te krijgen tot de database vanuit de CLI door de volgende opdracht uit te voeren, mislukt de poging:

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

Maar als u de volgende opdracht gebruikt om de taken op te halen uit de database via de Quarkus-toepassing die wordt uitgevoerd in Container Apps, slaagt de poging:

curl https://$AZ_APP_URL/api/todos

Met deze opdracht wordt de lijst met alle taakitems uit de database geretourneerd. De PostgreSQL-server kan worden geopend vanuit de Quarkus-toepassing die wordt uitgevoerd in een Azure-service, maar deze kan niet worden geopend buiten Azure.