Esercizio - Limitare l'accesso all'ambiente App contenitore di Azure
In questa unità, si verifica che il database PostgreSQL sia accessibile solo all'applicazione Quarkus e non ad altri client esterni. È attualmente possibile accedere al database da qualsiasi client usando l'interfaccia della riga di comando di Azure ed eseguendo Quarkus in locale. Questa configurazione non è sicura. È necessario aggiungere una regola del firewall per consentire solo agli indirizzi IP all'interno dell'ambiente delle App contenitore di Azure di accedere al server di database.
Accedere al server PostgreSQL usando l'interfaccia della riga di comando
Assicurarsi prima di tutto di poter accedere al server PostgreSQL usando l'interfaccia della riga di comando di Azure. A tale scopo, eseguire il comando seguente:
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
Dovrebbe essere possibile visualizzare il contenuto del database. Se è possibile, il database può essere consultato al di fuori dell'ambiente.
Rimuovere la regola del firewall permissiva
Database di Azure per PostgreSQL offre sicurezza per impostazione predefinita. Il firewall in genere non consente le connessioni in ingresso. Tuttavia, quando si è creato il server PostgreSQL, si è specificato il parametro --public-access "All"
per abilitare l'accesso esterno, che ha configurato il firewall come aperto al pubblico.
È possibile elencare le regole del firewall esistenti eseguendo il comando seguente:
az postgres flexible-server firewall-rule list \
--name "$AZ_POSTGRES_SERVER_NAME" \
--resource-group "$AZ_RESOURCE_GROUP" \
--output table
Verrà visualizzato l'output seguente:
EndIpAddress Name ResourceGroup StartIpAddress
--------------- ------------------------- ----------------------- ----------------
255.255.255.255 AllowAll_2023-1-3_10-20-4 rgazure-deploy-quarkus 0.0.0.0
Si noti che l'intervallo di indirizzi IP consentiti è compreso tra 0.0.0.0
e 255.255.255.255
. Una regola del firewall di questo tipo consente a qualsiasi client di accedere al database. Per garantire che solo l'applicazione Quarkus possa accedere al database, è necessario aggiornare le regole del firewall del server PostgreSQL.
In questo caso, si tratta solo di rimuovere la regola pubblica. Per rimuoverla, eseguire il comando seguente:
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
Provare ora a eseguire una query sul database usando un'istruzione SQL dall'interfaccia della riga di comando:
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
Infine, la chiamata raggiungere il timeout. Verrà visualizzato il messaggio seguente:
Unable to connect to flexible server: connection to server failed: Operation timed out
Poiché sono state rimosse tutte le regole del firewall, ora anche l'applicazione Quarkus non può accedere al database. Se si tenta di recuperare le attività dal database, la richiesta ha esito negativo. Eseguire la richiesta cURL seguente:
curl https://$AZ_APP_URL/api/todos
Aggiungere una nuova regola firewall
È necessario configurare il firewall per consentire l'accesso solo all'applicazione Quarkus. È necessario aggiungere una nuova regola del firewall. Per aggiungere la regola, eseguire il comando seguente:
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"
L'impostazione di start-ip-address
e di end-ip-address
su 0.0.0.0
consente l'accesso da tutti gli indirizzi IP interni di Azure, ma non dagli indirizzi IP esterni. Questa procedura consente di proteggere il database dall'accesso esterno.
Se si tenta di accedere al database dall'interfaccia della riga di comando eseguendo il comando seguente, il tentativo dovrebbe avere esito negativo:
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
Tuttavia, se si tenta di usare il comando seguente per recuperare le attività dal database tramite l'applicazione Quarkus in esecuzione nelle App contenitore, il tentativo ha esito positivo:
curl https://$AZ_APP_URL/api/todos
Questo comando restituisce l'elenco di tutte le attività del database. È possibile accedere al server PostgreSQL dall'applicazione Quarkus in esecuzione in un servizio di Azure, ma non è possibile accedervi dall'esterno di Azure.