Genel anlamda Azure üzerindeki PaaS iş yüklerine erişimi public endpoint’ler üzerinden sağlıyoruz. Tam olarak bu noktada, güvenlik sıkılaştırmaları ya da performans iyileştirmeleri yapmak istediğimizde karşımıza çıkan iki farklı hizmet;
- Azure Service Endpoint
- Azure Private Link
Bu iki servis temel anlamda Azure Virtual Network’ler (VNet’ler) ile Azure PaaS kaynakları arasındaki iletişimi Microsoft backbone network altyapısı üzerinden kurmamızı sağlasa da birbirlerinden ayrıldıkları, farklılaştıkları noktalar mevcut.
İsterseniz öncelikle, Azure Service Endpoint’e ve Azure Private Link’e ayrı ayrı inceleyelim. Sonrasında servisleri bir demo ile test edelim ve aralarındaki farklara göz atalım.
Azure Service Endpoint
Azure Service Endpoint hizmeti ile Azure servisleri ve Azure Virtual Network’ler (VNet’ler) Microsoft backbone network üzerinden güvenli ve direkt bağlantı kurabilirler. Bu sayede kritik Azure PaaS iş yüklerine bağlantıları kısıtlayarak yalnızca Azure Virtual Network’lerin iletişim kurmasını sağlayabiliriz.
Azure Service Endpoint, Azure VNet’e bağlı cihazların Private IP adresleri ile VNet üzerinde bir Public IP adresine ihtiyaç duymadan Azure PaaS kaynaklarına ulaşmasını sağlar. Bu yapılandırmayı da subnet seviyesine kadar izole etmek mümkündür.Bu sayede PaaS kaynaklar VNet’in tamamından ya da VNet içerisinde herhangi bir subnet içerisinden gelen trafiği kabul eder
Azure Service Endpoint, subnet üzerinde oluşturduğu route’lar sayesinde ilgili subnet içerisindeki Network Interface’lerin Azure PaaS kaynaklarına doğrudan erişmesini sağlar. Bu süreçte PaaS kaynaklarının Public Endpoint’lerini kullanır fakat trafik Microsoft backbone network içerisinde dolaşır.
Azure Private Link
Azure Private Link, Azure VNet içerisindeki Private Endpoint oluşturarak Azure servislerine erişilmesine olanak tanıyan bir hizmettir. Azure Private Link ile Azure VNet ve PaaS kaynakları arasındaki trafik Microsoft backbone network üzerinden dolaşır. Böylece servislerin internete açılmasına gerek kalmaz.
Azure Private Link içerisinde bulunan Azure Private Link Service hizmetini kendi Azure VNet’imiz içerisine konumlandırarak, kendimizin başka Azure Tenant’ları ya da iş ortaklarının Azure Tenant’ları altında çalışan Azure servisleri ile iletişim kurmasını sağlayabiliriz. Burada yapılması gereken müşterilerin VNet’leri içerisinde bir Private Endpoint kurulması ve provider taraftaki Private Link Service ile eşlenmesidir.
Birazdan demosunu ve karşılaştırmasını yapacağımız Azure Private Endpoint ise, Azure Private Link tarafından private ve güvenli bir bağlantı kurmak için Azure VNet’i içerisinde sağlanan bir Network Interface’dir. Azure Private Endpoint, Azure VNet içerisinde bir Private IP adresi kullanarak Azure servisi ile VNet’in iletişim kurmasını sağlar. Azure Private Endpoint’i Azure Storage, Azure Cosmos DB, SQL gibi PaaS kaynakların VNet ile iletişim kurması için kullanabiliriz.
Azure Service Endpoint ile Azure Private Endpoint arasındaki farklara bir demo ile bakalım;
Demoda kullanacağımız Azure Servislerini olan Storage Account, VNet ve VM’i oluşturuyoruz. VM’in Public IP adresinin olmaması gerektiği senaryoyu uygulayabilmek için VM’in Public IP adresini disassociate edeceğiz ve Azure Virtual Network Gateway oluşturup, VNet’imiz ile Point-to-Site VPN konfigürasyonunu yapıyoruz. Bu sayede kendi bilgisayarımızdan direkt Azure VNet’imize bağnanıp ve Private IP adresinden VM’e erişebileceğiz. VM’imizin bir Public IP adresi olmayacak.
Bu konfigürasyonların ardından sırası ile Azure Service Endpoint ile ilgili testimiz aşağıdaki adımları gerçekleştireceğiz;
- Storage Account’a bir text file yükleyeceğiz.
- Storage Account üzerinde Public erişimi kapatacağız, Azure Service Endpoint ile VNet’imiz ile Storage Account’u bağlayacağız.
- Kendi bilgisayarımızdan ve Azure üzerindeki VM’den Storage Account’a erişimi test edeceğiz. Bakalım Azure üzerindeki VM’den denediğimizde Azure Storage Account’umuz hangi IP adresinden bize geri dönecek.
- Sonrasında Azure Storage’a bilgisayarımızın Public IP’si için erişim izni verip, Storage’a hem VM üzerinden hem de public network üzerinden gelecek olan IP izni tanımlanmış bilgisayarımızın erişip, erişemediğimizi test edeceğiz.
- Ek olarak, VM’in internete çıkmamasını ve sadece storage’a bağlanmasını istediğimiz senaryoya bakacağız.
- Son olarak, Azure Service Endpoint ile ilgili bilgileri kaydedip, Azure Private Endpoint ile olan testlerimize başlayabilmek için mevcut tanımlamalarımızı sıfırlayacağız. Bu süreçte Azure Storage Account üzerinde VNet’e verilen erişim iznini kaldırıp, tekrar VM üzerinden bağlantıyı test edip, bağlanamadığını göreceğiz.
Tanımlamalarımızı kaldırdıktan sonra Azure Private Endpoint testleri için aşağıdaki adımları gerçekleştireceğiz;
- Storage Account üzerinde public erişimi tekrar kapatacağız ve Azure Private Endpoint tanımı oluşturup, Storage Account ile Vnet’imizi konuşturacağız. Bu tanımı yapınca VNet içerisinde bir Network Interface oluşmasını bekliyoruz. Buna paralel olarak subnet’e bağlı cihazlar için Storage Account’un DNS tanımının Private IP üzerinden dönmesi için bir Private DNS Zone oluşacak ve Storage Account için DNS’in Private IP’den yönlenmesini sağlayacak.
- Bir önceki Azure Service Endpoint testimizle VM’in internete çıkmaması için yaptığımız çalışmayı bir adım ileriye götüreceğiz ve Azure West Europe için eklediğimiz izini kaldıracağız. Beklentimiz VM ile Storage Account aynı subnet içerisinden konuşacağı için trafiğin VNet içerisinde Private IP’den dönüyor olması ve erişim sorunu yaşamamamız.
- Sonrasında VM üzerinden Storage Account’a erişmeye çalışacağız ve Storage Account’un bize hangi IP üzerinden geldiğini kontrol edeceğiz.
- Bu süreçte Storage Account’u public erişime açacağız, hem kendi bilgisayarımızdan hem de VM üzerinden tekrar Storage Account’un bize hangi IP üzerinden geldiğini kontrol edeceğiz.
Tüm bu testlerden sonra her iki Azure hizmeti ile ilgili genel karşılaştırmamızı yapacağız.
Azure Service Endpoint ile başlayalım.
- Storage Account’a bir text file upload edip, URL üzerinden kontrolünü sağlıyorum. URL bana 52.239.143.164 IP’sinden dönüyor.
- Storage Account üzerinde public erişimi kapatıyorum ve VNet ile bağlantısını kuruyorum. Bu aşamada Azure VNet’te ilgili subnet’e Service Endpoint deploy edildiğini de görüyoruz. Service Endpoint’i aynı zamanda VNet üzerinden de kontrol edilebilir. Ek olarak ilgili subnet içerisindeki Network Interface’ler içerisinden de route tanımları kontrol edilebilir.
VNet üzerinden Service Endpoint’i kontrol ediyorum.
- Bu adımda kendi bilgisayarım üzerinden URL’i tekrar çağırmayı deniyorum. Kendi bilgisayarımdan çağırmayı denediğimde, erişim engelim olduğu için beklediğim hatayı alıyorum, sonrasında Point2Site VPN ile Azure VNet içerisindeki sunucuya Private ip üzerinden bağlanıyorum ve text file’ı browser üzerinden çağırıyorum ve bana yine aynı Public IP’den yanıt döndüğünü görüyorum;
- Storage Account üzerinde Public IP adresime yetki veriyorum ve bilgisayarım üzerinden URL’e gitmeyi deniyorum. URL’in başarılı bir şekilde geldiğini görüyorum. Yani hem VNet içerisinden hem de public’de istediğim IP ya da IP aralığından Storage Account’a erişim sağlayabilirim.
- VM’in internete erişmesini istemiyor ve Azure Storage Account’a erişmesini istiyorum ve Network Security Group’umu aşağıdaki şekilde düzenliyorum. Burada dikkat edilmesi gereken VM’in Azure West Europe’daki tüm Storage Account’lara gitme izninin verilmiş olmasıdır. Azure Private Endpoint teslerinde bakalım bu durum, Private Endpoint için de böyle mi? Şimdi VM’in internete erişemediğini ve Storage Account’a erişebildiğini gözlemliyorum.
- Son olarak, Storage Account üzerindeki VNet bağlantısını ve VNet üzerindeki Service Endpoint tanımını kaldırıyorum. Bunu yaptıktan sonra ilgili subnet’in Network Interface’lere uyguladığı route tanımlarını tekrar kontrol ediyorum ve Service Endpoint’e giden route’ların kalktığını görüyorum. Sonrasında, VM içerisinden Storage Account’a erişimi kontrol ediyorum ve erişemediğimi görüyorum.
Şimdi gelelim Azure Private Endpoint ile ilgili testlerimize;
- Storage Account ile VNet’i bağlayacak olan Azure Private Endpoint tanımını oluşturuyorum. Sonrasında VNet içerisinde oluşmuş olan Network Interface’i ve Private DNS Zone tanımını kontrol ediyorum.
Network Interface;
DNS Zone;
- Hatırlayacağınız gibi VM’in Network Security Group’u üzerinde West Europe lokasyonu Storage Account’ları için outbound izin tanımlaması yapmıştık. Fakat Service Endpoint’i kaldırdıktan sonra, Storage Account’umuz public erişime kapalı olduğu için gidememiştik. Bu aşamada bir adım daha ileri giderek NSG üzerinde bu tanımı da kaldırıp VM’den internete giden tüm trafiği engelliyorum. Beklentimiz trafik VNet içerisinden döneceği için erişimde herhangi bir sorun yaşamayacağımız yönünde.
- VM üzerinden Storage Account’a tekrar erişmeye çalışıyorum ve Storage Account’un bana geldiği IP’yi kontrol ediyorum. Ve Bingo! Storage Account bana Private IP adresinden geliyor. Yani trafiğim Network dışına çıkmıyor. Hatırlarsanız Service Endpoint ile Storage Account’un Public IP adresine giderek erişim sağlayabiliyordum.
- Storage Account’u public erişime tekrar açıyoruz. Burada istersek yine kendi IP’mize ya da sadece erişmesini istediğimiz IP’lere erişim izni verebiliriz. Kendi bilgisayarımdan ve VM üzerinden URL’e erişmeye çalışıyoruz. Beklediğimiz gibi kendi bilgisayarımda Public IP’den VM’den DNS Zone tanımı sayesinde Private IP’den URL’in geldiğini görüyoruz.
Subnet içerisindeki bir Network Interface üzerinden route’ları kontrol ettiğimde Storage Account için Private Endpoint’in oluşturduğu Private IP adresini ve Next Hop Type olarak da Interface Endpoint’i görüyorum. Hatırlarsanız Service Endpoint’te burada Public IP adreslerini görüyorduk.
Şimdi yaptığımız çalışmalar ve diğer teorik bilgilerimiz ışığında aradaki farkları özetleyelim;
- Öncelikli olarak ilk dikkat ettiğimiz gereken ilk nokta Service Endpoint kullandığımızda trafiğin Microsoft backbone network’ü içerisinden çıkmadığı ama VNet ile servis bağlantısının public endpoint üzerinden yapıldığı oldu. Priave Endpoint’te ise VNet içerisinde ilgili subnet’te bir Network Interface ve Private DNS Zone otomatik olarak oluşturuldu ve DNS yönlendirmesi ile Storage Account’una Private IP üzerinden erişim sağlayabildik ve trafiğimiz VNet’imizden dışarıya çıkmadı.
- Private Endpoint’in bize diğer bir avantajı ise subnet içerisindeki bir Network Interface üzerinden iletişim kurulduğu için, subnet içerisinde Network Security Group ile kısıtlamalarına imkan vermesi oluyor. Service Endpoint tarafında bu işlemi demomuzda da yaptığımız gibi Service Tag’ler yardımıyla yapabiliriz. Dikkat etmemiz gereken nokta Service Tag’lerin erişmek istemeyeceğimiz yerlere de geniş bir yelpazade izin verebilecek olmasıdır.
- Private Endpoint ile trafik VNet dışarısına çıkmayacağı için verilerin dışarıya sızması noktasında built-in bir koruma olacaktır. Service Endpoint için Firewall vb. önlemler almamız gerekebilir.
- Private Endpoint kullanımında DNS yönlendirmeleri, Network Interface eklemeleri işin içerisine girdiği için mevcut yapımıza Service Endpoint’i eklemek daha kolay bir seçenek olarak karşımıza çıkacaktır.
- İşin maliyet tarafında ise Service Endpoint maliyetsiz bir çözüm olarak karşımıza çıkmaktadır. Private Endpoint ise çalışma saati ve in/out trafik üzerinden fiyatlandırıldığı için ücretli bir çözüm olarak karşımıza çıkmaktadır.