Ćwiczenie — ograniczanie dostępu do środowiska usługi Azure Container Apps
W tej lekcji upewnisz się, że baza danych PostgreSQL będzie dostępna tylko przez aplikację Quarkus, a nie przez innych klientów zewnętrznych. Obecnie możesz uzyskać dostęp do bazy danych z dowolnego klienta przy użyciu interfejsu wiersza polecenia platformy Azure i lokalnie uruchomić aplikację Quarkus. Ta konfiguracja nie jest bezpieczna. Należy dodać regułę zapory, aby zezwolić na dostęp do serwera bazy danych tylko adresom IP w środowisku usługi Azure Container Apps.
Uzyskiwanie dostępu do serwera PostgreSQL przy użyciu interfejsu wiersza polecenia
Najpierw upewnij się, że masz dostęp do serwera PostgreSQL przy użyciu interfejsu wiersza polecenia platformy Azure. Aby to zrobić, uruchom następujące polecenie:
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
Powinna być widoczna zawartość bazy danych. Jeśli to możliwe, dostęp do bazy danych można uzyskać poza środowiskiem.
Usuwanie reguły zapory permissive
Usługa Azure Database for PostgreSQL domyślnie zapewnia zabezpieczenia. Zapora zwykle nie zezwala na połączenia przychodzące. Jednak po utworzeniu serwera PostgreSQL określono --public-access "All"
parametr umożliwiający dostęp zewnętrzny, który skonfigurował otwarcie zapory dla publicznej wersji.
Istniejące reguły zapory można wyświetlić, uruchamiając następujące polecenie:
az postgres flexible-server firewall-rule list \
--name "$AZ_POSTGRES_SERVER_NAME" \
--resource-group "$AZ_RESOURCE_GROUP" \
--output table
Powinny zostać wyświetlone następujące dane wyjściowe:
EndIpAddress Name ResourceGroup StartIpAddress
--------------- ------------------------- ----------------------- ----------------
255.255.255.255 AllowAll_2023-1-3_10-20-4 rgazure-deploy-quarkus 0.0.0.0
Zwróć uwagę, że zakres dozwolonych adresów IP to 0.0.0.0
.255.255.255.255
Reguła zapory, taka jak ta, umożliwia każdemu klientowi dostęp do bazy danych. Aby upewnić się, że tylko aplikacja Quarkus może uzyskać dostęp do bazy danych, należy zaktualizować reguły zapory serwera PostgreSQL.
W tym przypadku wystarczy usunąć regułę publiczną. Aby go usunąć, uruchom następujące polecenie:
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
Teraz spróbuj wykonać zapytanie dotyczące bazy danych, uruchamiając instrukcję SQL z poziomu interfejsu wiersza polecenia:
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
Połączenie ostatecznie upłynął limit czasu. Powinien zostać wyświetlony następujący komunikat:
Unable to connect to flexible server: connection to server failed: Operation timed out
Ponieważ usunięto wszystkie reguły zapory, nawet aplikacja Quarkus nie może uzyskać dostępu do bazy danych. Jeśli spróbujesz pobrać zadania do wykonania z bazy danych, żądanie zakończy się niepowodzeniem. Uruchom następujące żądanie cURL:
curl https://$AZ_APP_URL/api/todos
Dodawanie nowej reguły zapory
Należy skonfigurować zaporę, aby zezwolić na dostęp tylko do aplikacji Quarkus. Musisz dodać nową regułę zapory. Aby dodać regułę, uruchom następujące polecenie:
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"
Ustawienie wartości start-ip-address
i end-ip-address
0.0.0.0
zezwala na dostęp ze wszystkich wewnętrznych adresów IP platformy Azure, ale nie zezwala na dostęp z zewnętrznych adresów IP. Ta praktyka pomaga zabezpieczyć bazę danych przed dostępem zewnętrznym.
Jeśli spróbujesz uzyskać dostęp do bazy danych z poziomu interfejsu wiersza polecenia, uruchom następujące polecenie, próba powinna zakończyć się niepowodzeniem:
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
Jeśli jednak spróbujesz użyć następującego polecenia, aby pobrać zadania do wykonania z bazy danych za pośrednictwem aplikacji Quarkus uruchomionej w usłudze Container Apps, próba powiedzie się:
curl https://$AZ_APP_URL/api/todos
To polecenie zwraca listę wszystkich elementów do wykonania z bazy danych. Dostęp do serwera PostgreSQL można uzyskać z poziomu aplikacji Quarkus działającej w usłudze platformy Azure, ale nie można uzyskać do niego dostępu spoza platformy Azure.