Azure App Service ve Azure Database for PostgreSQL ile SonarQube Kurulumu
  1. Anasayfa
  2. Microsoft Azure

Azure App Service ve Azure Database for PostgreSQL ile SonarQube Kurulumu

0

Uygulamalarımızın güvenlik açıkları ve potansiyel bug’larını tespit etmek için kullandığımız Static Application Security Testing ya da kısa adıyla SAST tool’u denildiğinde ilk akıla gelen isimlerden biri de SonarQube. Bu yazıda “SonarQube nedir?”e girmeyeceğim için detaylı bilgi için buraya bakabilirsiniz.

SonarQube kurulumu ile ilgili kendi dokümantasyonu dışında internette de bir çok makale bulabilirsiniz. Hatta incelemek isterseniz Microsoft’un SonarQube Hosted On Azure App Service adında bir blogpost’u da var. Kurulum için birden fazla yöntem var, ama siz kendiniz için en uygun yöntemi seçip onunla ilerleyebilirsiniz. Eğer Azure üzerinde düşünüyorsanız, bir kaç farklı örnek verebilirim: Azure App Service üzerine native çalışacak şekilde ve Azure SQL kullanarak, SonarQube ve kullanacağınız veri tabanının (MSSQL, PostgreSQL) Docker imajları ile Azure App Service üzerinde Docker Compose kullanarak çalıştırma gibi senaryoları çoğaltabilirsiniz. Bu yazıda ise kurulumu aşağıdaki servisleri kullanarak yapacağım:

1. Azure App Service

Azure App Service üzerine SonarQube kurulumu yaparken native olarak değil de container olarak tercih etmemin bir nedeni güncelleme işleminin biraz daha kolay olması. Güncelleme için yapmanı gereken mevcut container imajını yenisi ile değiştirmek. Veri tabanını ayrı bir servis üzerinde kullanacağım için bu işlem herhangi bir veri kaybına sebebiyet vermeyecektir, tabii veri tabanı tarafında bu kadar rahat olamayacağımız için o tarafta yedekleme konusunda dikkatli olmakta fayda var.

Web App oluştururken sistemin çalışabilmesi için planları sistemin çalışabileceği minimum seviyede seçmeye çalıştım. Resim-1‘de de göreceğiniz gibi standart bir web app oluşturma işlemi gerçekleştiriyorum.

Resim-1

Docker sekmesine docker image ve tag değerlerini sonarqube:lts-community olarak belirtiyorum (Resim-2).

Resim-2

2. Azure Virtual Network

Veri tabanına uygulama haricinde dışarıdan erişilmesini istemediğim için veri tabanına geçmeden önce bir VNET oluşturacağım. VNET oluştururken 2 tane subnet ekleyeceğim. Bunlardan bir tanesi web app (10.0.0.0/24), diğeri de veri tabanı (10.0.1.0/24) için. İki subnet de aynı VNET içerisinde oldukları birbirleri ile haberleşlemeri için ayrı bir konfigürasyon ya da ek bir servis ihtiyacımız olmayacak (Resim-3). Güvenlik için ek olarak Firewall da ekleyebilirsiniz, bu örnekte eklemedim.

Resim-3

3. Azure Database for PostgreSQL

Veri tabanı seçiminde Azure üzerinde PostgreSQL kullanacağım ve Resim-4‘te de göreceğiniz gibi tavsiye edilen şekilde Flexible Server tercih edeceğim.

Resim-4

Burada önemli olan kısım Networking, yani VNET ayarlarını yapacağım kısım. Diğer kısımları istediğiniz şekilde ayarlayabilirsiniz. Virtual network ayarlarında biraz önce oluşturduğum VNET’i ve veri tabanı için oluşturduğum sonar-db isimli subnet’i seçiyorum (Resim-5).

Resim-5

Buraya kadar sadece Azure üzerinde kaynakları oluşturdum. Buradan itibaren de yapmam gereken bir kaç konfigürasyon işlemi var.

Azure App Service oluşturma sırasında VNET ile ilgili bir ayar yapmamıştım. Web app internet erişimine açık olacağı için, burada yapacağım ayar uygulamanın outbound trafiğini, VNET içerisinde web app için tanımladığım subnet’e yönlendirmek.

Resim-6

Bunun için de web app’in network ayarlarına gelip Outbound Traffic altında yer alan VNET integration‘a tıklıyorum (Resim-7).

Resim-7

VNET ayarlarını tamamladıktan sonra, PostgreSQL connection string bilgilerini Application settings altına tanımlıyorum.

  1. SONAR_JDBC_URL:
    jdbc:postgresql://<Azure Database for PostgreSQL Server name>:5432/sonar
  2. SONAR_JDBC_USERNAME: Azure Database for PostgreSQL oluştururken verdiğiniz kullanıcı
  3. SONAR_JDBC_PASSWORD: Azure Database for PostgreSQL oluştururken verdiğiniz şifre.

Son olarak da bir workaround yapacağım. “Max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]” hatasını geçebilmek için Elasticsearch bootstrap check’i disable etmem gerekiyor. Bu nedenle de SONAR_ES_BOOTSTRAP_CHECKS_DISABLE değerini true olarak set ediyorum. Bu konuda detaylı bilgi için buraya tıklayabilirsiniz.

Resim-8

Application settings’i kaydedip, web app’i restart ettikten sonra artık sırada SonarQube’e giriş yapıp her şeyin çalıştığını kontrol etmek var. Ama maalesef göreceğiniz şey Resim-9‘deki ekran :)

Resim-9

Her şeyi doğru yaptığımı (?) varsayarak hatanın kaynağını anlamak için App Service Monitoring altında yer alan Log stream ekranın gidiyorum ve web app tekrar restart ederek buradan logları takip ediyorum, gördüğüm ile hata: “Database ‘sonar’ does not exist” (Resim-10).

Resim-10

Oluşturduğum Azure Database for PostgreSQL kaynağının Settings sekmesindeki Databases‘a giderek sonar adında yeni bir veri tabanı oluşturuyorum (Resim-11).

Resim-11

Web app’i tekrar restart ettikten sonra, web app url’ine gittiğimde ise artık SonarQube login sayfasını görebiliyorum. Geçici kullanıcı adı admin ve şifresi admin olarak girdikten sonra yeni bir şifre belirlemem gerekiyor. Sonra Administration menüsünde System altından Resim-12‘de göreceğiniz gibi veri tabanının PostgreSQL olduğunu görebiliyorum.

Resim-12

NOT: Eğer herhangi bir veri tabanı ayarı yapmadan SonarQube container’ını çalıştırırsanız, internal H2 veri tabanı ile çalışacak ve bu ekranda “H2 database should be used for evaluation purpose only” şeklinde bir mesaj göreceksiniz. Mesajdan da anlaşıldığı üzere bu sistemin çalışmasını test etmek amaçlı bir veri tabanı ve production için önerilmiyor. 

Bu konuyla ilgili sorularınızı alt kısımda bulunan yorumlar alanını kullanarak sorabilirsiniz.

Referanslar

www.mshowto.org

SonarQube 9.9

Azure Database for PostgreSQL – Flexible Server | Microsoft Learn

SonarQube Hosted On Azure App Service – Developer Support (microsoft.com)

TAGs: Azure, Azure App Service, Azure Web App, Azure Database for PostgreSQL, PostgreSQL, SonarQube, Sonar, Azure VNET, VNET, SAST, Static Application Security Testing

Bu İçeriğe Tepkin Ne Oldu?
  • 4
    harika_
    Harika!!
  • 0
    be_enmedim
    Beğenmedim
  • 0
    _ok_iyi
    Çok iyi
  • 0
    sevdim_
    Sevdim!
  • 0
    bilemedim_
    Bilemedim!
  • 0
    olmad_
    Olmadı!
  • 0
    k_zd_m_
    Kızdım!

Mert Yeter, lisans eğitimini Yıldız Teknik Üniversitesi'nde, yüksek lisans eğitimini ise Bahçeşehir Üniversitesi'nde tamamlamıştır. Yazılım dünyasına üniversitenin ilk yıllarında aldığı QBasic ile başlayan Mert, .NET ve SQL Server gibi Microsoft teknolojileri ile devam etmiş; yüksek lisans tezini ise Linux konusunda yapmıştır. Netaş ve Ziraat Teknoloji gibi sektörün önde gelen firmalarında C#, .NET, SQL Server, Cisco Contact Center ürünleri ve Linux üzerine çalışmış, bir çok firmaya da bu konularda danışmanlık vermiştir.

Yazarın Profili

Bültenimize Katılın

Tıklayın, üyemiz olun ve yeni güncellemelerden haberdar olan ilk kişi siz olun.

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir