Alıştırma - Azure Container Apps ortamına erişimi kısıtlama
Bu ünitede PostgreSQL veritabanına diğer dış istemciler tarafından değil yalnızca Quarkus uygulaması tarafından erişilebildiğinden emin olursunuz. Şu anda Azure CLI kullanarak ve Quarkus'ı yerel olarak çalıştırarak herhangi bir istemciden veritabanına erişebilirsiniz. Bu yapılandırma güvenli değildir. Veritabanı sunucusuna yalnızca Azure Container Apps ortamındaki IP adreslerinin erişmesine izin vermek için bir güvenlik duvarı kuralı eklemeniz gerekir.
CLI kullanarak PostgreSQL sunucusuna erişme
İlk olarak, Azure CLI kullanarak PostgreSQL sunucusuna erişebildiğinizden emin olun. Bunu yapmak için şu komutu çalıştırın:
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
Veritabanının içeriğini görebilmeniz gerekir. Bunu yapabilirseniz, veritabanına ortamın dışından erişilebilir.
İzinli güvenlik duvarı kuralını kaldırma
PostgreSQL için Azure Veritabanı varsayılan olarak güvenlik sağlar. Güvenlik duvarı genellikle gelen bağlantılara izin vermez. Ancak PostgreSQL sunucusunu oluşturduğunuzda, dış erişimi etkinleştirmek için güvenlik duvarını genel kullanıma açık olacak şekilde yapılandıran --public-access "All" parametresini belirttiniz.
Şu komutu çalıştırarak mevcut güvenlik duvarı kurallarını listeleyebilirsiniz:
az postgres flexible-server firewall-rule list \
--name "$AZ_POSTGRES_SERVER_NAME" \
--resource-group "$AZ_RESOURCE_GROUP" \
--output table
Aşağıdaki çıkışı görmeniz gerekir:
EndIpAddress Name ResourceGroup StartIpAddress
--------------- --------------------------- ---------------------- ----------------
255.255.255.255 AllowAll_2025-2-26_16-57-40 rgazure-deploy-quarkus 0.0.0.0
İzin verilen IP adresleri aralığının 0.0.0.0'dan 255.255.255.255'e olduğunu fark edin. Bunun gibi bir güvenlik duvarı kuralı, herhangi bir istemcinin veritabanına erişmesine izin verir. Veritabanına yalnızca Quarkus uygulamasının erişebildiğinden emin olmak için PostgreSQL sunucusunun güvenlik duvarı kurallarını güncelleştirmeniz gerekir.
Bu durumda, bu yalnızca genel kuralı kaldırma meselesidir. Kaldırmak için aşağıdaki komutu çalıştırın:
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
Şimdi CLI'dan bir SQL deyimi çalıştırarak veritabanını sorgulamayı deneyin:
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
Arama sonunda zaman aşımına uğrar. Şu iletiyi görmeniz gerekir:
Unable to connect to flexible server: connection to server failed: Operation timed out
Tüm güvenlik duvarı kurallarını kaldırdığınız için Quarkus uygulaması bile veritabanına erişemiyor. Yapılacaklar öğesini veritabanından almaya çalışırsanız istek başarısız olur. Aşağıdaki cURL isteğini çalıştırın:
curl https://$AZ_APP_URL/api/todos
Yeni güvenlik duvarı kuralı ekleme
Güvenlik duvarını yalnızca Quarkus uygulamasına erişime izin verecek şekilde yapılandırmanız gerekir. Yeni bir güvenlik duvarı kuralı eklemeniz gerekir. Kuralı eklemek için şu komutu çalıştırın:
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"
start-ip-address ve end-ip-address0.0.0.0 olarak ayarlamak, tüm Azure iç IP adreslerinden erişime izin verir, ancak dış IP adreslerinden erişime izin vermez. Bu uygulama, veritabanını dış erişimden güvenli bir şekilde korumanızı sağlar.
Aşağıdaki komutu çalıştırarak VERITABANıNA CLI'dan erişmeye çalışırsanız, deneme başarısız olmalıdır:
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
Ancak Container Apps üzerinde çalışan Quarkus uygulaması aracılığıyla veritabanından yapılacakları almak için aşağıdaki komutu kullanmayı denerseniz, deneme başarılı olur:
curl https://$AZ_APP_URL/api/todos
Bu komut, veritabanındaki tüm to-do öğelerinin listesini döndürür. PostgreSQL sunucusuna bir Azure hizmetinde çalışan Quarkus uygulamasından erişilebilir, ancak Azure dışından erişilemiyor.