Biznet BilişimBiznet Bilişim

DevOps ve Güvenlik

Yazar: Caner Aşçıoğlu

Organizasyonel yapılanmalarda sorumlulukların, yetkilerin ve süreçlerin bölüm bazında ayrıştırılmasıyla, yazılım geliştiricilerinin ve sistem yöneticilerinin birbirlerinin alanlarına yakınlıkları ve hakimiyetleri zayıflayabilmekte, birbirlerine bağımlılıkları artabilmekte ve aralarındaki işbirliği, entegrasyon ve iletişim kesintiye uğrayabilmektedir.

Bunun yanında, yazılım geliştirme ve yönetimi sürecinin otomasyonunun maksimize edilmemesi yazılım ve sistem takımları arasındaki bağımlılıkların artmasına, canlı ortama (production) aktarım (deploy/release) sürecinin uzamasına, operasyonel ve tekrarlı işlerinin artmasına, test ortamında gözlemlenmeyen hataların canlı ortamda oluşmasına ve canlı ortamlarına aktarımın problemli olmasına neden olabilmektedir. Ek olarak operasyonel süreçlerin ve işlerin artması; tespit edilen hata (bug) düzeltmelerinin ve kapsamlı değişiklikleri içeren projelerin, sık ve hızla hayata geçirilmesi yerine seyrek ve düşük hızda ilerlemesine ve kurumların değişikliklere yavaş tepki vermesine yol açmaktadır.

—DevOps—

Agile 2008 konferansında ortaya atılan DevOps, yazılım geliştirmenin (development) ve sistem yönetiminin (operation) iş birliğine dayanan, hem geliştirmenin operasyonunu hem de operasyonun geliştirmesini içeren bir kültürdür.

DevOps ve Agile arasındaki bağ incelendiğinde birbirini tamamladıkları görülebilmektedir. Agile müşteri ile ürün yöneticileri, yazılım geliştiriciler ve kalite kontrolcüler arasındaki işbirliğini zenginleştirmeyi hedefleyerek yüksek kaliteli, sık ve sorunsuz ürün çıktısı sağlayarak müşteri için yaratılan değerin yüksek olmasını hedefler. DevOps ise, yazılım geliştiricilerinin çıktısı olan ürünlerin diğer sistemlerle etkileşiminin de müşteriye sunulan değerin temel bir parçası olduğunu söyleyerek geliştiricilerin, sistem etkileşimini de hesaba katmasını ister. Agile, bir projenin geliştirmesinin tamamlanmasına kadar olan süreçlere odaklanırken; yapılandırma/sürüm (deploy/release), sürekli teslimat (continuous delivery), altyapı otomasyonu, izleme/ölçümleme, geri dönüş otomasyonu, test otomasyonu konularını açıkta bırakmaktadır. DevOps ise tam da bahsi geçen açıkta kalan konulara odaklanarak uçtan uca çevikliği sağlamaya yardımcı olur. Yani, DevOps Agile prensipleri genişleterek sadece üretilen kodu değil hizmetin tamamını göz önünde bulundurur.

Yukarıdaki resimde de geçen Sürekli Teslimat (Continuous Delivery) ve Sürekli Entegrasyon (Continuous Integration) konularına kısaca değinmek gerekirse; Sürekli Entegrasyon süreci, aynı yazılım üzerinde yapılan geliştirmelerin yüksek sıklıkta, birim testlerden geçmesi ve yapılandırma (build) sürecinin işletilmesi için entegre olmasıdır. Sürekli Teslimat süreci ise, Sürekli Entegrasyon sürecini başarılı tamamlamış geliştirmelerin ve Sürekli Entegrasyon çıktısının (artifact’ın), otomatik, kabul ve performans testlerinden geçirilmesi ve test ortamlarına yüklenmesidir. Bunların dışında bir de Sürekli Canlı Ortama Aktarım süreci ise Sürekli Teslimat sürecini başarı ile tamamlamış her geliştirmenin canlı ortama otomatik olarak yüklenmesini sağlar.

—DevOps’ta Güvenlik—

Mevcutta Güvenli Yazılım Geliştirme Yaşam Döngüsü (Secure Software Development Life Cycle / S-SDLC) sürecinde aşağıdakilerin yapılması beklenmektedir:

  • Yazılım geliştirme, analiz, tasarım ve test ekiplerinin güvenli yazılım geliştirme eğitimi alması,
  • Güvenlik gereksinimlerinin analizinin, tasarımının ve kodlamasının yapılması,
  • Fonksiyonel güvenlik testlerinin yapılması,
  • Güvenli kod analizinin yapılması,
  • Penetrasyon (Sızma) testlerinin yapılması.

Bununla birlikte otomasyonun artması ile birlikte süreçler hızlandırılırken neden güvenlik süreçleri kısmen de olsa hızlandırılmasın? Aşağıdaki adımları izleyerek süreci hızlandırmak mümkün hale gelebilir.

  • Kod geliştirme sürecine otomatize kod analizi araçlarının enjekte edilerek kod yazılırken güvenlik eksikliklerinin görülmesi ve düzeltilmesi,
  • Kodlar production’a geçmeden önce uygulamaya otomatize ataklar yapılması,
  • Güvenlik testlerinin, otomatize testlere dâhil edilmesi,
  • Otomatize araçlarla production ve harici ortamlarda zafiyetlerin sürekli olarak taranması.

—DevOps Ne Değildir?—

  • Sadece birkaç uygulama kullanılarak süreçlerin otomatize edilmesi değildir.
  • Operasyonel işlerin tamamının ortadan kalkması değildir.
  • Sadece yazılım geliştiricileri ve operasyon tarafını değil; konfigürasyon yönetimi, ağ yönetimi, veritabanı yönetimi, güvenlik…vb. taraflarını da kapsar.
  • Sadece bir kişinin ünvanı değildir. Tüm ekiplerin benimsemesi gereken bir yaklaşımdır.
  • Tüm sorunları çözmesi beklenmemelidir.

—DevOps Yaşam Döngüsü—

DevOps Yaşam Döngüsü aşağıdaki adımları kapsamalıdır:

  • Otomatize kod analizi sonucunda çıkan bulguların giderilmesi
  • Kodların kaynak kontrol sistemine aktarılması
  • Kodların kaynak kontrol sisteminden çekilerek derlenmesi
  • Sürekli Entegrasyon sunucusunun yapılandırma ve sürümleri üretmesi, entegrasyon ve kullanıcı testlerinin çalıştırılması
  • Otomatize güvenlik testlerinin de dahil olduğu testlerin çalışması
  • Testlerin, Sürekli Entegrasyon çıktılarının ve yapılandırmaların depolanarak saklanması
  • Otomatik bir sürüm aracı kullanılarak aktarım yapılması
  • Çevre konfigürasyonlarının yapılması
  • Veritabanlarının güncellenmesi
  • Uygulamaların güncellenmesi
  • Test edilmiş uygulamaların kullanıcıların kesinti yaşamalarına gerek kalmadan aktarılması
  • Uygulama ve ağ performansının izlenmesi ve sorunların oluşmadan engellenmeye çalışılması
  • Adımların iyileştirilerek tekrarlanması

 —DevOps Olgunluk Modeli—

DevOps olgunluğunun değerlendirilmesi, süreç standardizasyonu, otomasyon araçları ve iş birliği yaklaşımlarının seviyesini ve iyileştirme fırsatlarını anlamanızı sağlar.

 

—DevOps Kullanan Bazı Şirketler—

                                  

 

 


 

 

 

Bu arada siz bu yazıyı okumaya başladığınız andan beri AMAZON yaklaşık 10 adet hata giderme (bug fix) devreye aldı 🙂

—DevOps Araçları—

DevOps kültürü için sihirli bir dokunuş sağlayacak bir araç/uygulama diye bir şey aslında bulunmamaktadır. Ancak DevOps prensiplerinin gerçeklenmesi amacına hizmet eden ve otomasyonu ve işbirliğini destekleyen araçlar bir araya getirilerek bir araç seti (toolkit) olarak kullanılabilmektedir.

Her bir aracı açıklamak buraya sığmayacağından DevOps’un deyim yerindeyse periyodik tablosuna girmiş araçlar dahi aslında iş birliği ve otomasyonu destekleyen araçların seçiminin kolay olmadığını gösteriyor 🙂

 

Siber güvenlik dünyasında öne çıkan haberler, etkinlikler ve daha çok blog yazısı için Biznet Bilişim’i sosyal medyada takip edin. LinkedIn, Facebook, Google+ ve Twitter’da sizleri bekliyoruz.

 

caner.ascioglu
Yazar: caner.ascioglu