AWS EC2 üzerinde Key Pair Kullanımı ve Key Pair Recovery İşlemleri
Merhabalar bu yazımız ile birlikte AWS içinde EC2 makinelerine güvenli giriş işlemleri için kullanılan key pair kavramından bahsedeceğim. Bu kısıma geçmeden önce bir kaç tanımlamayı incelemek faydalı olacaktır.
SSH Anahtarı (Key) : Ağ erişimi (ssh tunneling) aşamasında tüm trafiğin şirelenmesi, saldırılardan korunması için artırılmış güvenlik önlemlerini barındıran SSH protokolü için kullanılan kimlik bilgisini içeren anahtar olarak tanımlanabilir.
Açık anahtar doğrulaması (PKI — public key infrastructure) : Açık/gizli anahtar çiftine dayanan bir yöntemdir. Anahtar çiftinin açık olan anahtarı herkes tarafından kullanılabilir ve bu anahtarla veri kriptolanır. Sadece anahtar çiftinin gizli olan anahtarı bu kriptolu veriyi çözümleyebilir.
AWS içinde key pair kullanımı ile herhangi bir şifre kullanmadan EC2 makinelerimize güvenli bağlantı sağlayabilemekteyiz.
AWS key pairs ile ilgili daha detaylı bilgilere aşağıdaki link üzerinden ulaşabilirsiniz.
AWS EC2 Oluşturma ve Key Pair Kullanımı
Öncelikli olarak AWS yönetim konsolumuzu açarak EC2 dashboard üzerinden bu demo için henüz herhangi bir kaynağın oluşturulmadığını kontrol ediyoruz. Resimden de anlaşıldığı üzere sadece default olarak oluşturulmuş 1 adet Security Group bulunmakta.
EC2 oluştururken Ubuntu 18.04 imajından türetilen bir AMI seçerek t2.micro tipinde bir makine seçiyoruz. Gerekli VPC , subnet ayarlarını yapıp standart bir EBS volume olan gp2 tipindeki SSD disk tipini seçiyoruz ve makine ismi olarak “Production” atamasını tag oluşturma alanından yapıyoruz. Security Group olarak default olan PROD-SG içinden 22 portunu inbound olarak açarak adımlarımızı kontrol ederek EC2 instance oluşturma işlemlerimizi tamamlıyoruz.
Oluşturmuş olduğumuz EC2 ye güvenli bir şekilde bağlanmak için kullanmak üzere “ KP-PROD-LONDON ” isimli bir key pair oluşturuyoruz.
EC2 oluşturma işlemimiz tamamlandıktan sonra “Instances” sekmesi üzerinden EC2 detaylarını incelediğimizde IPv4 Public IP alanından public IP için gerekli adresi görebilmekteyiz. Burada dikkat edilmesi gereken durum eğer oluşturulan EC2 lar için herhangi bir elastic ip ataması yapılmadı ise her makine durdurulmasında ve yeniden başlatılmasında bu IPv4 Public IP adresi yeniden atanacaktır. Dolayısı ile bu makine için bir elastic ip ataması yapmak istiyorum.
“Network & Security” alanından Elastic IPs tabını seçerek “Allocate new address” diyerek amazon pool tanımını seçerek yeni bir elastic IP oluşturuyoruz.
Oluşan bu Elastic IP adresini seçip “Actions” kısmından “Associate address” diyerek olusturmuş olduğumuz EC2 instance ID yi seçerek atama işlemini tamamlıyoruz.
EC2 dashboard alanı üzerinden Elastic IP’s alanını kontrol ettiğimizde 1 adet yeni elastic IP yi görebiliriz. Ayrıca instances alanından baktığımızda public IP nin elastic IP nin adresi olarak güncellendiğini görmekteyiz.
Bu EC2 üzerindeki “Connect” butonunu tıkladığımızda bağlantı için gereken komutu ve gerekli adımları nasıl uygulayacağımızı görebiliriz. Bu kısımda ilgili ssh komutunu uyguladığımızda ubuntu makinemize ulaşabildiğimizi terminal üzerinden kontrol edebiliriz.
Bağlantı işlemi gerçekleştikten sonra EC2 makinesinden logout olarak çıkıp kullanmış olduğumuz pem uzantılı key pair dosyamızı vim editör içinden açarak hashlanmiş bağlantı anahtarını görebilmekteyiz.
Burada bir felakat senaryosu uygulamak adına ilgili haslanmiş anahtarın içini silerek sanki kullandığımız anahtarın bozulduğunu kurgulamaya çalışıyoruz.
Aynı bağlantı anahtarı ile ssh bağlantısı kurmaya çalıştığımızda artık bu anahtarla bağlantının sağlanamadığını aşağıdaki ekran görüntüsünden takip edebilmekteyiz.
Key Pair Recovery işlemi
Key pairler sadece EC2 makineleri oluşturulurken ataması yapılabildiği için burada daha önce oluşturduğumuz EC2 makinesinin birkaç özelliğini kalıtım olarak alan yeni bir EC2 makinesi oluşturup, yeni bir key pair kullanarak, bağlanamadığımız “Production” isimli EC2 üzerindeki diski yeni oluşturduğumuz makineye mount edip bazı dosyaları kopyalayacağız ve “Production“ isimli makineye geri takarak yeni bağlantıyı sıfırdan oluşturduğumuz key pair ile yapmaya çalışacağız.
Böyle bir durumla karşılaştığımız zaman önce tekrardan bağlantı kurabileceğimiz bir ssh anahtarı oluşturmak için key pair alanından yeni bir key pair pem dosyası oluşturuyoruz.
İlk oluşturduğumuz EC2 instance detaylarını inceleyerek bu makineye ait Instance ID, AMI ID, Subnet ID ve root diske ait bilgileri ileride kullanmak adına bir yere kayıt edebilirsiniz.
Daha önce oluşturduğumuz EC2 model ve AMI tipini seçerek işlemimize devam ediyoruz.
Burada önemle dikkat edeceğimiz konu VPC ve Subnet olarak Production isimli EC2 ya ait bilgileri kullanmamız gerektiğidir.
Kalan işlemlerimizi tamamlayarak “ KP-PROD-LONDON-NEW ” isimli key pair pem dosyasını kullanarak “Temporary” isimli bir EC2 makinesini ayaklandırıyoruz.
Yeni bağlantı anahtarını kullanarak “Temporary” adlı EC2 makinesine ssh protokolü ile ulaşımı sağlayabiliyoruz.
Artık “Production” makinesi üzerindeki diski çıkartmak adına bu makineyi durduruyoruz.
“Elastic Block Store” alanı üzerinden Volumes alanını secerek production diskini secerek actions üzerinden “Detach Volume” diyerek diskin sökülme işlemini gerçekleştiriyoruz. “available” state durumunu gördüğümüz taktirde bu işlemin gerçekleştiğini görebiliriz.
Aynı production isimli diski seçerek actions alanı üzerinden “Attach Volume” diyerek instance alanı içinden “Temporary” makinesini secerek yeni oluşturduğumuz EC2 instance üzerine takılma işlemini gerçekleştiriyoruz. Burada yeni diske atanırken diskin ismi değişeceği için burada default gelen değeri seçerek işlemimize devam ediyoruz. İstenildiği takdirde kendimize ait bir isimlendirme belirleyebiliriz.
“Temporary” isimli EC2 instance üzerinde yeni diskin eklendiğini aşağıdaki ekran görüntüsünden takip edilebilirsiniz.
“ KP-PROD-LONDON -NEW” isimli key pairi kullanarak temporary makinesine ssh bağlantısı sağladıktan sonra “lsblk” komutunu kullanarak bu makineye dahil olan disklerimizi kontrol edebiliriz.
Takip eden adımlarda “sudo mkdir /mnt/tempvol” komutunu kullanarak temporary makinesi üzerinde root disk üzerinde mnt klasörü altında tempvol klasörü oluşturuyoruz. Sonrasında “sudo mount /dev/xvdf1 /mnt/tempvol” komutunu kullanarak eklediğimiz production diskini, yeni oluşturduğumuz temporary diski üzerindeki mnt/tempvol klasörüne eşitliyoruz.
“sudo cp .ssh/authorized_keys /mnt/tempvol/home/ubuntu/.ssh/authorized_keys” komutunu kullanarak temporary disk üzerindeki ssh klasörü içindeki autherized_keys dosyasını production diski üzerindeki yerine kopyalıyoruz. “sudo umount /mnt/tempvol” komutu ile ilgili production diski ile /mnt/tempvol klasörünün eşleştirilmesini kaldırıyoruz.
Production diskini production EC2 makinesinde tekrardan kullanmak için temporary EC2 makinesinden detach ediyoruz.
Aynı diski tekrardan production EC2 makinesine attach etme işlemini gerçekleştiriyoruz.
Burada dikkat edilmesi gereken durum production makinesinde bu disk ismi /dev/sda1 olarak oluşturulduğu için burada bu ismi giriyoruz.
Production isimli EC2 makinesini tekrardan start ediyoruz.Bu makine ayağa kalktıktan sonra bağlantıyı tekrardan sağlamak için gerekli işlemlere başlayabiliriz.
Production EC2 makinesinin detaylarına baktığımız takdirde hala “ KP-PROD-LONDON.pem” isimli key pairi görmekteyiz. Bu pem dosyası ile ssh bağlantısı kurmaya çalıştıımızda hala bağlantığı oluşturamaktayız. Yeni atamasını gerçekleştirdiğimiz “ KP-PROD-LONDON-NEW.pem” anahtarını kullanarak ssh bağlantısı oluşturduğumuzda artık yeniden kontrolünü yitirdiğimiz production EC2 makinesine bağlanabilmekteyiz.
Sonuç
Uzun süren bir konfigurasyon sürecinden sonra tüm adımlarımızı tamamlayıp ssh bağlantısını yitirdiğimiz production makinesine yeniden güvenli şekilde bağlanmayı başardık. Burada kullandığımız path bizler için ssh anahtarımızı kaybettiğimizde, bizden başka kullanıcıların bu dosyaya ulaşabildiğini düşündüğümüz durumlarda, bu dosyayı bozduğumuz ya da EC2 makinesi ve bağlanmak istediğimiz makinenin anahtarlarının bir şekilde uyuşamadığı durumlarda bizlere fayda sağlayacaktır diye düşünüyorum.
Bir dahaki yazıda görüşmek dileği ile.