Exercițiul - Restricționarea accesului la mediul Aplicații container Azure
În această unitate, vă asigurați că baza de date PostgreSQL poate fi accesată numai de aplicația Quarkus, nu de alți clienți externi. În prezent, puteți accesa baza de date de la orice client utilizând Azure CLI și rulând Quarkus local. Această configurație nu este sigură. Trebuie să adăugați o regulă de firewall pentru a permite doar adreselor IP din mediul Aplicații container Azure să acceseze serverul bazei de date.
Accesarea serverului PostgreSQL utilizând CLI
Mai întâi, asigurați-vă că puteți accesa serverul PostgreSQL utilizând Azure CLI. Pentru a face acest lucru, rulați această comandă:
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
Ar trebui să puteți vedea conținutul bazei de date. Dacă este posibil, baza de date poate fi accesată în afara mediului.
Eliminarea regulii de firewall permisive
Baza de date Azure pentru PostgreSQL oferă securitate în mod implicit. De obicei, firewallul său nu permite conexiuni de intrare. Dar când ați creat serverul PostgreSQL, ați specificat parametrul --public-access "All" pentru a activa accesul extern, care a configurat ca firewallul să fie deschis publicului.
Puteți lista regulile de firewall existente rulând această comandă:
az postgres flexible-server firewall-rule list \
--name "$AZ_POSTGRES_SERVER_NAME" \
--resource-group "$AZ_RESOURCE_GROUP" \
--output table
Ar trebui să vedeți următoarea ieșire:
EndIpAddress Name ResourceGroup StartIpAddress
--------------- --------------------------- ---------------------- ----------------
255.255.255.255 AllowAll_2025-2-26_16-57-40 rgazure-deploy-quarkus 0.0.0.0
Observați că intervalul de adrese IP permise este 0.0.0.0 prin 255.255.255.255. O regulă de firewall ca aceasta permite oricărui client să acceseze baza de date. Pentru a vă asigura că numai aplicația Quarkus poate accesa baza de date, trebuie să actualizați regulile paravanului de protecție ale serverului PostgreSQL.
În acest caz, este doar o problemă de eliminare a regulii publice. Pentru a-l elimina, rulați următoarea comandă:
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
Acum încercați să interogați baza de date rulând o instrucțiune SQL din 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
Apelul a expirat în cele din urmă. Ar trebui să vedeți acest mesaj:
Unable to connect to flexible server: connection to server failed: Operation timed out
Deoarece ați eliminat toate regulile paravanului de protecție, chiar și aplicația Quarkus nu poate accesa baza de date. Dacă încercați să regăsiți lucrurile de făcut din baza de date, solicitarea nu reușește. Rulați următoarea solicitare cURL:
curl https://$AZ_APP_URL/api/todos
Adăugarea unei noi reguli de firewall
Trebuie să configurați firewallul pentru a permite accesul doar la aplicația Quarkus. Trebuie să adăugați o nouă regulă de firewall. Pentru a adăuga regula, rulați această comandă:
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"
Setarea start-ip-address și a end-ip-address la 0.0.0.0 permite accesul de la toate adresele IP azure interne, dar nu permite accesul de la adrese IP externe. Această practică ajută la securizarea bazei de date din accesul extern.
Dacă încercați să accesați baza de date din CLI rulând următoarea comandă, încercarea ar trebui să nu reușească:
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
Dar dacă încercați să utilizați următoarea comandă pentru a regăsi activități de făcut din baza de date prin aplicația Quarkus care rulează pe Aplicații container, încercarea reușește:
curl https://$AZ_APP_URL/api/todos
Această comandă returnează lista tuturor elementelor to-do din baza de date. Serverul PostgreSQL poate fi accesat din aplicația Quarkus care rulează pe un serviciu Azure, dar nu poate fi accesat din afara Azure.