Azure Bastion: Public IP ve VPN olmadan sanal makinelere güvenli erişim

Sanal makine üzerinde çalışan iş yüklerinizi AWS, Azure veya Google Cloud gibi bulut servis sağlayıcıları üzerinde barındırdığınızda bu makineleri RDP (Remote Desktop Services) veya SSH (Secure Socket Shell) ile uzaktan yönetmek istediğinizde söz konusu makinelere bir Public IP atamak ve güvenlik duvarında ilgili portları dışarıya açmanız gerekmektedir. Her ne kadar kaynak IP veya etiket (tag) kısıtlaması ile bu erişimi sınırlandırmak mümkün olsa da bunlar best practice’e uygun yöntemler değil. Kaynak IP kısıtlamasına gittiğinizde bu da size yönetimsel bir yük bindirecek ve erişmeye çalışacak her bir IP’yi beyaz listeye almanız gerekecek. Keza kaynak IP tek başına güvenlik önlemi olamaz, zira söz konusu IP’den ilgili porta gelen her isteği kabul etmiş olursunuz ve bu da günümüzde hala IPv4 ve NAT yoğun bir şekilde kullanıldığı için yüzlerce hatta binlerce istemciye izin vermiş olduğunuz anlamına gelir.

Makineleri internete açmak yerine söz konusu bulut sağlayıcı ile aranızda bir Site2Site VPN yapabilirsiniz fakat bu, hem özel bir donanım (S2S VPN özelliği olan bir router, firewall veya sunucu) ve konfigürasyon bilgisi gerektiriği için sadece uzaktan yönetim için maliyetli bir çözüm oluyor.

Son çözüm olarak networkümüzün DMZ segmentine “bastion host” diye tabir ettiğimiz aracı makineler kurup bu makineleri internet üzerinden erişime açarak, önce bu aracı makineye bağlanıp sonrasında iç networkteki makinelere erişebiliriz. Fakat burada bastion host’larının bakımı, yönetimi ve güvenliği sizin sorumluluğunuzda oluyor.

Azure Bastion hizmeti tahmin ettiğiniz üzere bu aracı makineyi size servis olarak sunuyor. Dolayısıyla yukarda bahsettiğim güvenlik, bakım ve yönetim yükünü kendi üzerine alıyor. Siz sadece bu servise özel bir subnet oluşturuyorsunuz, gerisine karışmıyorsunuz. Buna ek olarak sanal makinelerinize Azure Portal üzerinden, web tarayıcınızın dışına çıkmadan RDP veya SSH atabiliyorsunuz. Bu da güvenli uzaktan yönetim için atılacak onca takladan sizi kurtarıyor. İhtiyacınız olan tek şey bir web tarayıcısı ve yetki oluyor.

Şu an public preview aşamasında olan bu özelliği test etmek için bir Azure hesabına sahip olmanız yeterli. Özelliği Azure üyeliğinizde aktif hale getirip sonrasında konfigüre edebiliyorsunuz. Aktivasyonu powershell üzerinden gerçekleştirmeniz gerekiyor. Bir istemci makineye aşağıdaki linkten Azure Powershell’i kurduktan sonra konfigürasyonumuza başlayabiliriz.

Yönetici haklarıyla Powershell’i çalıştırdıktan sonra Execution Policy ayarını “RemoteSigned” almamız gerekiyor. Bunun için şu komutu çalıştıralım:

Set-ExecutionPolicy RemoteSigned

Bundan sonra aşağıdaki komut ile Azure Powershell’i kuralım:

Install-Module -Name Az -AllowClobber

Sonrasında aşağıdaki komutu girdikten sonra hesap bilgilerimizi girerek Azure üyeliğimize bağlanalım:

Connect-AzAccount

Mevcut Azure üyeliğiniz için Azure Bastion Preview özelliğini aktif hale getirmek için sırayla şu komutları çalıştıralım:

Register-AzProviderFeature -FeatureName AllowBastionHost -ProviderNamespace Microsoft.Network

Register-AzResourceProvider -ProviderNamespace Microsoft.Network

Birkaç dakika bekledikten sonra preview özellik aktif hale gelecektir. Bu özelliğe erişmek ve kullanmak için standart Azure Portal yerine Preview Azure Portalı kullanmamız gerekiyor. Preview Azure portala bu linkten erişebilirsiniz.

Preview portalı, üzerindeki turuncu şerit ile standart portaldan ayırt edebilirsiniz.

Bastion servisini oluşturmadan önce mevcut VNet’imizde Bastion’a özel, minimum /27 genişliğinde bir subnet açıp bu subnet’e AzureBastionSubnet ismini vermemiz gerekiyor. Bastion hizmetini oluştururken bu VNet ve subnet’i seçeceğiz.

Örneğimizde 192.168.10.0/27 subnet’inikullandık.

Subnet’i oluşturduktan sonra Bastion servisine geçebiliriz. “All Services” kısmına tıklayıp arama kutusuna “bastion” yazalım:

Bastion (preview) seçerek devam edelim.

Bastion konfigürasyonu

Burada Resource Group, lokasyon, VNet/Subnet ve Public IP seçimi yaptıktan sonra “Review & Create” butonuna basarak kuruluma başlayalım.

Hizmetin oluşturulması birkaç dakika alıyor. Sonrasında uzaktan bağlanmak istediğiniz bir sanal makineye RDP veya SSH ile bağlanmak için söz konusu makinenin portal sayfasına girip “Connect” butonuna bastığınızda karşınıza bağlanma seçenekleri arasında “Bastion” çıkacaktır:

Sanal makinede yetkli bir kullanıcının bilgilerini girerek oturumunuzu başlatabilirsiniz.

Bağlandığımız makine bir Server Core kurulumu ve gördüğünüz gibi tarayıcı sekmesinde masaüstünü görebiliyoruz.

Bağlandığımız makine Windows 10 yüklü bir makine olduğunda masaüstü bu şekilde gözüküyor. Ekranın sol kenarının ortasında Clipboard’a erişebileceğiniz bir ok işareti mevcut.

Bu oka tıkladığınızda Bastion içerisinde kopyaladığınız veya kestiğiniz metinler burada gözükecektir. Burada yaptığınız değişiklikler uzaktaki makinenin clipboard’unu etkileyecektir. Gördüğünüz gibi clipboard erişimi de güvenli bir şekilde gerçekleşiyor. Dolayısıyla clipboard üzerinden uzaktan kod çalıştırma saldırılarının da önüne geçmiş oluyorsunuz. Standart RDP’den farklı olarak dosya kopyala/yapıştır yapamıyorsunuz, keza bunu gerçek ortamda da yapmamalısınız.

Linux makinelerde ise durum benzer şekilde gerçekleşiyor: Kullanıcı adı şifre veya SSH Private Key ile makinelere bağlanabiliyorsunuz.

Yazımda Azure bulut ortamındaki sanal makinelere public IP ve port erişimi vermeden Bastion hizmetiyle uzaktan, güvenli bir şekilde nasıl bağlanılabileceğini anlatmaya çalıştım. Bir sonraki yazıda görüşmek üzere.

--

--