Alıştırma - Azure hizmetlerine genel veritabanı erişimini sınırlama
Bu ünitede, tüm genel IPv4 adreslerinden gelen bağlantı girişimlerine izin veren PostgreSQL güvenlik duvarı kuralını Azure hizmetleri istisnasıyla değiştirirsiniz. Veritabanı genel erişime açık uç noktasını korur. İstisna, bu Quarkus uygulaması da dahil olmak üzere Azure hizmetlerinin ve kaynaklarının kimliği doğrulanmış bağlantılar kurmayı denemesine izin verir; bu uygulamaya veya Container Apps ortamına erişimi kısıtlamaz.
Önceki alıştırmalardaki değişkenlerle AZ_* aynı yerel Bash kabuğunda veya Windows üzerinde WSL'de devam edin. Veritabanı denetimlerini Azure olmayan bir genel kaynak ağından çalıştırın. Azure CLI 2.87.0 veya üzerini kullanın ve kaynak adı veya parola kurulumunu yeniden çalıştırmayın.
CLI kullanarak PostgreSQL sunucusuna erişme
İlk olarak, geçerli istemci ağınızdan PostgreSQL sunucusunu sorgulayabileceğinizi onaylayı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
Sorgunun daha önce oluşturduğunuz to-do öğelerini döndürdüğünü doğrulayın. Bu, her istemci ağından değil, kabuğunuzun kaynak ağından bağlantıyı onaylar. Güvenlik duvarını değiştirmeden önce, sonraki testler için çalışan bir temel durumunuz olması amacıyla tüm sorgu hatalarını giderin.
İzinli güvenlik duvarı kuralını kaldırma
Yeni PostgreSQL sunucusunu oluşturduğunuzda, genel uç noktasını --public-access All etkinleştirdiniz ve tüm genel IPv4 adresleri için bir güvenlik duvarı kuralı oluşturdunuz.
Note
Bu güvenlik duvarı komutları, Azure CLI 2.87.0'da tanıtılan parametre adlarını kullanır: --server-name sunucuyu tanımlar ve --name güvenlik duvarı kuralını tanımlar. Ayrı az postgres flexible-server execute komutu sunucu için hâlâ --name kullanır. Söz dizimi ayrıntıları için güvenlik duvarı komut başvurusuna bakın.
Devam etmeden önce başarısız olan güvenlik duvarı komutlarını çözün; reddedilen bir komut güvenlik duvarını değiştirmez. Alıştırmaya ait sunucunuzdaki mevcut kuralları listeleyin:
az postgres flexible-server firewall-rule list \
--server-name "$AZ_POSTGRES_SERVER_NAME" \
--resource-group "$AZ_RESOURCE_GROUP" \
--output table
EndIpAddress
255.255.255.255 ve StartIpAddress0.0.0.0 olan kuralı bulun. Oluşturulan ad, Name sütununda değişir. Bu modülde kullanılan yeni sunucudaki tek kural bu olmalıdır. Sonuç farklıysa, alıştırmaya ait sunucuyu kullandığınızı onaylayın ve devam etmeden önce tutarsızlığı çözün. Var olan veya paylaşılan bir sunucudan ilişkisiz kuralları silmeyin.
Bu aralık, tüm genel IPv4 kaynak adreslerinin veritabanı bağlantısını denemesine izin verir. İstemcilerin hala geçerli PostgreSQL kimlik bilgilerine ihtiyacı vardır. Alıştırmanın devamında Azure hizmetleri özel durumunu eklemeden önce bu kuralı kaldırın.
PostgreSQL güvenlik duvarı güncelleştirmelerinin uygulanması beş dakika kadar sürebilir. Bağlantıyı denetlemeden önce her başarılı değişiklik sonrasında zaman tanıyin. Yeni bir veritabanı bağlantısını test etmek için CLI sorgusunu yeni bir çağrıda yineleyin; uygulamaya yönelik http isteği ayrı bir uygulama düzeyi denetimidir.
Aşağıdaki komutta, Name yerine az önce listelediğiniz tüm adresler kuralının gerçek <allow-all-rule-name> değerini yazın. Açılı ayraçları kaldırın, tırnak işaretlerini koruyun ve yalnızca bu kuralı silin:
az postgres flexible-server firewall-rule delete \
--server-name "$AZ_POSTGRES_SERVER_NAME" \
--resource-group "$AZ_RESOURCE_GROUP" \
--name "<allow-all-rule-name>" \
--yes
Silme işlemi başarılı olduktan sonra kuralları yeniden listeleyin:
az postgres flexible-server firewall-rule list \
--server-name "$AZ_POSTGRES_SERVER_NAME" \
--resource-group "$AZ_RESOURCE_GROUP" \
--output table
Başarıyla tamamlanan list komutu artık hiçbir kural döndürmemelidir. Komut başarısız olursa veya herhangi bir kural kalırsa devam etmeden önce bu sorunu giderin. Boş bir liste yapılandırılan kuralları doğrular, ancak ağ güncelleştirmesinin yayıldığını doğrulamaz.
Yayma süresine izin verdikten sonra sorguyu yeniden çalıştırarak yeni bir doğrudan veritabanı bağlantısı oluşturun:
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
Silme işlemi uygulandıktan sonra yeni bir veritabanı bağlantısı reddedilmelidir. Hata metni istemciye ve ağ yoluna bağlıdır; Örneğin, PostgreSQL eşleşen pg_hba.conf girdi olmadığını bildirebilir. Belirli bir zaman aşımı iletisi beklemeyin. Silme işleminden hemen sonra başarılı bir sorgu, güvenlik duvarı değişikliğinin yayılmaya devam ettiğini gösterir.
Bu kuralsız aşama, değişiklik etkili olduktan sonra uygulamadan gelen yeni veritabanı bağlantılarını kasıtlı olarak engeller. Uygulamanın HTTPS uç noktası herkese açık kalır. Quarkus havuza alınan veritabanı bağlantılarını kullandığı için HTTP isteğinin yeni bir veritabanı bağlantısı açması gerekmez. HTTP durumunu ve gövdesini inceleyin, ancak güvenlik duvarı yayma işleminin tamamlandığının kanıtı olarak tek bir anlık yanıt kullanmayın:
curl --include "https://$AZ_APP_URL/api/todos"
--include seçeneği, gövdenin yanı sıra HTTP yanıt üst bilgilerini de görüntüler. Varsayılan olarak curl, HTTP hata durumunu komut hatası olarak algılamaz, bu nedenle çıkış koduna güvenmek yerine durumu inceleyin. Ayrıntılar için curl kılavuzuna bakın.
Azure hizmetleri özel durumunu ekleyin
Dağıtılan uygulamanın veritabanına yeniden bağlanabilmesi için Azure hizmetleri istisnasını ekleyin:
az postgres flexible-server firewall-rule create \
--server-name "$AZ_POSTGRES_SERVER_NAME" \
--resource-group "$AZ_RESOURCE_GROUP" \
--name "Allow_Azure-services" \
--start-ip-address "0.0.0.0" \
--end-ip-address "0.0.0.0"
Başlangıç ve bitiş değerleri 0.0.0.0, PostgreSQL güvenlik duvarı kuralları'nda açıklandığı gibi, Allow public access from any Azure service within Azure to this server seçeneğini etkinleştirir. Bu, özel IP adresi aralığı değil, veritabanının genel uç noktasında hizmet tanımlı bir özel durumdur.
Important
Özel durum, diğer müşterilerin aboneliklerindeki Azure kaynaklardan bağlantı girişimlerine de izin verir. Quarkus uygulamasını tanımlamaz veya tek bir ortam, abonelik veya kiracıya erişimi kısıtlamaz. İstemcilerin yine de kimlik doğrulaması yapması gerekir. Bu alıştırma özel ağ veya yalnızca uygulama erişimini yapılandırmaz.
Oluşturma işlemi başarılı olduktan sonra kuralları yeniden listeleyin:
az postgres flexible-server firewall-rule list \
--server-name "$AZ_POSTGRES_SERVER_NAME" \
--resource-group "$AZ_RESOURCE_GROUP" \
--output table
Bu yeni sunucudaki tek kural artık Allow_Azure-services olmalı ve hem StartIpAddress hem de EndIpAddress, 0.0.0.0 olarak ayarlanmalıdır. Komut başarısız olursa veya kurallar bu sonuçla eşleşmiyorsa bağlantıyı test etmeden önce tutarsızlığı çözün. Değişikliğin geçerlilik kazanması için beş dakikaya kadar bekleyin.
Veritabanı ve uygulama erişimini doğrulama
Yayma süresine izin verdikten sonra, Azure olmayan bir genel kaynak ağdaki yerel geliştirme bilgisayarınızdan yeni bir oturumda aşağıdaki komutu çalıştırın. İlk sorguyla aynı çalışma veritabanı kimlik bilgilerini kullanın. Başka bir güvenlik duvarı kuralı bu kaynak adrese izin vermediğinde veritabanı bağlantısı reddedilmelidir.
Güvenlik duvarı kuralları, istemcinin Azure CLI olup olmadığını değil kaynak adresi değerlendirir. Bu negatif test için Azure Cloud Shell kullanmayın: Azure hizmetleri istisnası bağlantıya izin verebilir. geçerli kimlik bilgilerine sahip Azure barındırılan bir istemciden gelen başarılı bir sorgu, güvenlik duvarı güncelleştirmesinin başarısız olduğunu göstermez.
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
Azure hizmetleri istisnasının geçerli olması için zaman verdikten sonra, dağıtılan uygulama aracılığıyla to-do öğelerini alın. Daha önce oluşturduğunuz to-do öğelerini içeren bir JSON dizisini ve HTTP 200 yanıtını denetleyin:
curl --include "https://$AZ_APP_URL/api/todos"
Yayılma penceresinden sonra yeni bir veritabanı bağlantısının hala beklenmeyen bir sonucu varsa, kimlik bilgilerini değiştirmeden önce gerçek güvenlik duvarı kurallarını ve istemcinin kaynak ağını inceleyin. HTTP 200 ve beklenen JSON verileri olmayan bir uygulama yanıtı pozitif denetimi geçemez.
Azure olmayan kaynak adreslerden doğrudan PostgreSQL bağlantıları, başka hiçbir kural izin vermediğinde engellenir. Geçerli veritabanı kimlik bilgilerine sahip Azure kaynaklı istemciler yine bağlanabilir. Uygulamanın HTTPS API'si herkese açık kalır; bu denetimler yalnızca uygulamaya ait veritabanı yalıtımı oluşturmaz.