All writing

SonarQube Eğitim Dokümanı

1. GİRİŞ VE TEMEL YAPI

1.1. SonarQube ve Kurumsal Değer

SonarQube Nedir?

SonarQube, SonarSource tarafından geliştirilen, kaynak kodun sürekli ve otomatik olarak analiz edilmesini sağlayan açık kaynak tabanlı bir statik kod analiz platformudur. Kodunuzu derlemeden veya çalıştırmadan analiz eder; hataları, güvenlik açıklarını, kod kokularını (code smells) ve teknik borçları tespit eder.

Temel Kavramlar

Kavram Açıklama
Bug Çalışma zamanında beklenmeyen davranışa yol açabilecek kodlama hataları
Vulnerability Güvenlik açığına yol açabilecek zayıf noktalar
Code Smell Kodun çalışmasını engellemez ancak bakım maliyetini artıran kötü tasarım kalıpları
Security Hotspot Manuel güvenlik incelemesi gerektiren potansiyel risk noktaları
Technical Debt Kod kalitesi sorunlarını gidermek için gereken tahmini süre
Coverage Birim testlerinin kodu ne kadar kapsadığını gösteren oran
Duplication Kod tekrarı oranı

SonarQube'ün Kurumsal Değeri

1. Yazılım Kalitesinin Standardizasyonu

2. Güvenlik Açıklarının Erken Tespiti (Shift-Left)

3. Teknik Borç Yönetimi

4. Maliyet Tasarrufu

SonarQube Edisyonları

Edisyon Özellikler
Community Build Ücretsiz, temel analiz, 20+ dil, tek branch
Developer Branch analizi, PR decoration, taint analizi
Enterprise Portföy yönetimi, uyum raporları, 35+ dil, SAST, SCA, taint analizi
Data Center Enterprise + yüksek erişilebilirlik (HA), yatay ölçekleme

SonarQube Mimarisi

┌─────────────────────────────────────────────────────────────────┐
│                        GELİŞTİRİCİ                              │
│  ┌──────────┐    ┌──────────┐    ┌──────────────────────┐       │
│  │   IDE     │    │  Git Push│    │  CI/CD Pipeline       │      │
│  │(SonarLint)│───│          │───│  (SonarScanner)       │      │
│  └──────────┘    └──────────┘    └──────────┬────────────┘      │
│                                              │                   │
│                                              ▼                   │
│                                  ┌──────────────────────┐       │
│                                  │   SonarQube Server    │       │
│                                  │  ┌────────────────┐  │       │
│                                  │  │ Compute Engine  │  │       │
│                                  │  │ (Analiz Motoru) │  │       │
│                                  │  └────────┬───────┘  │       │
│                                  │           │          │       │
│                                  │  ┌────────▼───────┐  │       │
│                                  │  │   Web Server   │  │       │
│                                  │  │  (Dashboard)   │  │       │
│                                  │  └────────────────┘  │       │
│                                  │  ┌────────────────┐  │       │
│                                  │  │   Database      │  │       │
│                                  │  │ (PostgreSQL)    │  │       │
│                                  │  └────────────────┘  │       │
│                                  └──────────────────────┘       │
└─────────────────────────────────────────────────────────────────┘

1.2. Platform Entegrasyonlarına Genel Bakış

Desteklenen Entegrasyonlar

SonarQube, modern yazılım geliştirme yaşam döngüsünün (SDLC) her aşamasına entegre olur:

DevOps Platformları
Platform Entegrasyon Özellikleri
GitHub (Enterprise & Cloud) PR Decoration, SSO, GitHub Actions, monorepo desteği
GitLab (Self-Managed & Cloud) MR Decoration, SSO, GitLab CI/CD
Azure DevOps PR Decoration, Azure Pipelines, Azure AD SSO
Bitbucket (Cloud & Data Center) PR Decoration, Bitbucket Pipelines
CI/CD Araçları
Araç Entegrasyon Yöntemi
Jenkins SonarQube Scanner Plugin
GitHub Actions sonarsource/sonarqube-scan-action
GitLab CI/CD sonar-scanner-cli Docker image
Azure Pipelines SonarQube Extension
Bitbucket Pipelines Pipe tabanlı entegrasyon
Codemagic Mobil uygulama CI/CD
IDE Entegrasyonları (SonarLint / SonarQube for IDE)
AI ve Agentic Entegrasyonlar (2025-2026 Yenilik)
İş Araçları Entegrasyonları

Entegrasyon Akış Şeması

 IDE (SonarLint)          Git Repository          CI/CD Pipeline
      │                        │                       │
      │  Anlık analiz          │  Push/PR              │  Otomatik tetikleme
      │  & uyarılar            │                       │
      ▼                        ▼                       ▼
 ┌─────────────────────────────────────────────────────────────┐
 │                      SONARQUBE SERVER                        │
 │                                                             │
 │  ┌──────────┐  ┌──────────────┐  ┌────────────────────┐    │
 │  │ Rules &  │  │ Quality Gate │  │  Analiz Motoru      │    │
 │  │ Profiles │  │ Değerlendirme│  │  (SAST + SCA)       │    │
 │  └──────────┘  └──────────────┘  └────────────────────┘    │
 │                                                             │
 │  ┌──────────┐  ┌──────────────┐  ┌────────────────────┐    │
 │  │ Portfolio │  │  PR          │  │  Raporlama         │    │
 │  │ Yönetimi │  │  Decoration  │  │  (PDF / Dashboard) │    │
 │  └──────────┘  └──────────────┘  └────────────────────┘    │
 └─────────────────────────────────────────────────────────────┘
      │                   │                      │
      ▼                   ▼                      ▼
   Jira/Slack        GitHub/GitLab           Yönetim Raporları
   Bildirimleri      PR Yorumları            & Uyum Raporları

2. KURUMSAL ERİŞİM VE YETKİLENDİRME YÖNETİMİ

2.1. Kullanıcı Yönetimi Temelleri (Basic ve LDAP/SSO)

Kimlik Doğrulama (Authentication) Yöntemleri

SonarQube, kurumsal ortamlara uygun çoklu kimlik doğrulama yöntemlerini destekler:

1. Yerleşik (Built-in) Kimlik Doğrulama

Yapılandırma:

Administration → Security → Force Authentication = Enabled

Güvenlik Uyarısı: Üretim ortamında "Force Authentication" mutlaka aktif olmalıdır. Aksi halde anonim kullanıcılar projeleri görüntüleyebilir.

2. LDAP / Active Directory Entegrasyonu

LDAP entegrasyonu, kurumsal dizin servisleriyle (OpenLDAP, Microsoft Active Directory) merkezi kimlik doğrulama sağlar.

Temel Özellikler:

sonar.properties Yapılandırma Örneği:

# LDAP Sunucu Yapılandırması
sonar.security.realm=LDAP
ldap.url=ldap://ldap.sirketiniz.com:389

# Bağlantı Bilgileri
ldap.bindDn=cn=sonarqube,ou=ServiceAccounts,dc=sirketiniz,dc=com
ldap.bindPassword=gizli_sifre

# Kullanıcı Eşleme
ldap.user.baseDn=ou=Users,dc=sirketiniz,dc=com
ldap.user.request=(&(objectClass=person)(sAMAccountName={login}))
ldap.user.realNameAttribute=cn
ldap.user.emailAttribute=mail

# Grup Eşleme (Yetkilendirme için)
ldap.group.baseDn=ou=Groups,dc=sirketiniz,dc=com
ldap.group.request=(&(objectClass=group)(member={dn}))
ldap.group.idAttribute=cn

Active Directory İçin Ek Not: Microsoft Active Directory, LDAP protokolünü destekler. Yukarıdaki yapılandırma AD sunucuları için de geçerlidir. AD kullanıyorsanız sAMAccountName veya userPrincipalName ile kullanıcı eşlemesi yapabilirsiniz.

3. SAML 2.0 SSO (Single Sign-On)

SAML tabanlı SSO, kullanıcıların kimlik sağlayıcı (Identity Provider) üzerinden tek oturum açma ile SonarQube'e erişmesini sağlar.

Desteklenen Kimlik Sağlayıcılar:

SAML Yapılandırması (Administration → Configuration → Authentication → SAML):

Parametre Açıklama Örnek Değer
Application ID SP Entity ID sonarqube
Provider Name IdP adı Okta
Provider ID IdP Entity ID http://www.okta.com/xxx
SAML Login URL IdP SSO URL https://sirket.okta.com/app/xxx/sso/saml
Identity Provider Certificate IdP sertifikası Base64 kodlanmış X.509
SAML User Login Attribute Kullanıcı adı alanı login
SAML User Name Attribute Görünen ad name
SAML User Email Attribute E-posta email
SAML Group Attribute Grup bilgisi groups

Yapılandırma Akışı:

1. IdP'de (Okta, Azure AD vb.) yeni bir SAML uygulaması oluşturun
2. SonarQube'ün ACS URL'ini ekleyin: https://sonarqube.sirketiniz.com/oauth2/callback/saml
3. IdP'den metadata bilgilerini alın
4. SonarQube Administration'da SAML ayarlarını yapılandırın
5. "Test Configuration" butonu ile doğrulayın
6. Başarılıysa SAML'ı etkinleştirin
4. DevOps Platform SSO
Platform Yapılandırma
GitHub SSO GitHub OAuth App oluşturulur → Client ID/Secret SonarQube'e tanımlanır
GitLab SSO GitLab Application oluşturulur → Application ID/Secret tanımlanır
Bitbucket SSO OAuth Consumer oluşturulur

İpucu: DevOps Platform SSO kullanıldığında, platformdaki grup bilgileri SonarQube'e aktarılabilir. Bu sayede yetkilendirme de merkezi olarak yönetilir.

Token Tabanlı Kimlik Doğrulama

CI/CD pipeline'ları ve API çağrıları için token kullanılır:

Token Türü Kullanım Alanı Kapsam
User Token Kullanıcı adına API erişimi Kullanıcının tüm yetkileri
Project Analysis Token Belirli proje analizi Sadece hedef proje
Global Analysis Token Tüm projelerin analizi Tüm projeler (analiz izni)

Token Oluşturma:

My Account → Security → Generate Tokens
Token Adı: "Jenkins-Pipeline-Token"
Tür: Project Analysis Token
Proje: my-java-project
Süre: 90 gün (önerilen)

Token oluşturulduktan sonra bir kez gösterilir, kaydedilmezse tekrar erişilemez!

2.2. Rol ve İzin Yapıları

Genel (Global) İzinler

Global izinler, SonarQube instance genelinde geçerli olan yetkilerdir:

İzin Açıklama Tipik Rol
Administer System Tüm sistem ayarlarını yönetme SonarQube Admin
Administer Quality Profiles Kalite profillerini oluşturma/düzenleme Kalite Yöneticisi
Administer Quality Gates Kalite kapılarını yönetme Kalite Yöneticisi
Execute Analysis Analiz çalıştırma (global düzeyde) CI/CD Service Account
Create Projects Yeni proje oluşturma Takım Lideri
Create Applications Uygulama (application) oluşturma Portföy Yöneticisi
Create Portfolios Portföy oluşturma Üst Yönetim / CTO

Proje Düzeyinde İzinler

Her proje için ayrı ayrı izin tanımlanabilir:

İzin Açıklama
Browse Projeyi görüntüleme, dashboard ve sorunlara erişim
See Source Code Kaynak kodu görüntüleme
Administer Issues Sorun durumlarını değiştirme (false positive, won't fix vb.)
Administer Security Hotspots Güvenlik hotspot'larını inceleme ve yönetme
Administer Proje ayarlarını yönetme (kalite kapısı atama, izin düzenleme)
Execute Analysis Bu projeye analiz gönderme

İzin Şablonları (Permission Templates)

Yeni oluşturulan projelere otomatik olarak izin atamak için şablonlar kullanılır:

Administration → Security → Permission Templates

Örnek Şablon: "Microservice-Projesi"

Grup Browse See Source Administer Issues Execute Analysis Administer
developers
tech-leads
ci-cd-accounts
security-team
sonar-admins

Şablon Uygulanma Koşulu:

Grup Yönetimi ve RBAC (Role-Based Access Control)

Yerleşik Gruplar:

Önerilen Grup Yapısı:

sonar-administrators     → Sistem yöneticileri
quality-managers          → Kalite profili ve kalite kapısı yöneticileri
security-auditors         → Güvenlik inceleme ekibi
team-backend              → Backend geliştirme ekibi
team-frontend             → Frontend geliştirme ekibi
team-mobile               → Mobil geliştirme ekibi
ci-cd-service             → CI/CD pipeline service account'ları
management-viewers        → Yönetim (sadece okuma yetkisi)

LDAP/SSO Grup Eşleme: LDAP veya SSO üzerinden gelen grup bilgileri, SonarQube'daki aynı isimdeki gruplarla otomatik eşleştirilir. Bu sayede kullanıcı izinleri merkezi dizin üzerinden yönetilir.

LDAP Grubu: "CN=developers,OU=Groups,DC=sirket,DC=com"
     Otomatik Eşleşme
SonarQube Grubu: "developers"
    → Browse, See Source Code, Administer Issues izinleri

3. KALİTE VE GÜVENLİK STANDARTLARININ OLUŞTURULMASI

3.1. Kalite Kapısı (Quality Gate) Açıklama ve Oluşturma

Kalite Kapısı Nedir?

Kalite Kapısı (Quality Gate), kodunuzun üretime hazır olup olmadığını belirleyen koşullar kümesidir. Analiz sonuçları bu koşullarla karşılaştırılır ve kod ya geçer (Passed) ya da kalır (Failed).

Tek Soruyu Yanıtlar: "Bu kod üretime alınmaya hazır mı?"

Kalite Kapısı Nasıl Çalışır?

Kod Push / PR Açılır
        │
        ▼
  SonarScanner Analiz Yapar
        │
        ▼
  Analiz Sonuçları Hesaplanır
  (Coverage, Bugs, Vulnerabilities...)
        │
        ▼
  Quality Gate Koşulları Kontrol Edilir
        │
    ┌───┴───┐
    │       │
  PASSED  FAILED
    │       │
    ▼       ▼
  PR       PR Merge
  Merge    Engellenir
  Edilir   (Opsiyonel)

Yerleşik Kalite Kapıları

1. Sonar Way (Varsayılan)

Sonar'ın önerdiği, yeni koda odaklanan kalite kapısı:

# Koşul Eşik Uygulandığı Kod
1 Yeni sorun sayısı 0 Yeni Kod
2 Security Hotspot inceleme oranı %100 Yeni Kod
3 Test kapsama oranı (Coverage) ≥ %80 Yeni Kod
4 Tekrarlanan satır yoğunluğu (Duplication) ≤ %3 Yeni Kod
2. Sonar Way for AI Code

AI tarafından üretilen kod içeren projeler için önerilen kalite kapısı:

Özel (Custom) Kalite Kapısı Oluşturma

Adımlar:

1. Quality Gates → Create (sağ üst köşe)
2. İsim girin: "Kurumsal-QualityGate"
3. Add Condition → Koşulları ekleyin
4. Set as Default (isteğe bağlı)

Örnek Kurumsal Kalite Kapısı:

# Metrik Operatör Eşik Kapsam
1 Issues (Yeni sorunlar) > 0 Yeni Kod
2 Security Hotspots Reviewed < 100% Yeni Kod
3 Coverage < 80% Yeni Kod
4 Duplicated Lines (%) > 3% Yeni Kod
5 Reliability Rating worse than A Yeni Kod
6 Security Rating worse than A Yeni Kod
7 Maintainability Rating worse than A Yeni Kod
8 Coverage < 60% Genel Kod
9 Duplicated Lines (%) > 5% Genel Kod

Kalite Kapısı - Proje Eşleştirme

Manuel Eşleştirme:

Quality Gates → Kurumsal-QualityGate → Projects sekmesi → Proje seçin

Proje Tarafından Eşleştirme:

Project Settings → Quality Gate → Kalite kapısı seçin

Fudge Factor (Tolerans Mekanizması)

Küçük değişikliklerde (20 satırdan az yeni kod) coverage ve duplication koşulları göz ardı edilir. Bu, küçük düzeltmelerin kalite kapısını gereksiz yere engellemesini önler.

Administration → Configuration → General → Quality Gate Fudge Factor

Kalite Kapısı ve CI/CD Entegrasyonu

Kalite kapısı sonucu CI/CD pipeline'ına aktarılarak build'in başarısız olması sağlanabilir:

# SonarScanner çalıştırıldıktan sonra kalite kapısı sonucunu bekle
sonar-scanner -Dsonar.qualitygate.wait=true

Bu parametre ile:

"Yeni Kod" (New Code) Tanımı

Kalite kapıları yeni kod üzerinde çalışır. "Yeni kod" tanımı yapılandırılabilir:

Yöntem Açıklama
Previous Version Son versiyondan bu yana yapılan değişiklikler (önerilen)
Number of Days Son X gün içindeki değişiklikler
Reference Branch Belirli bir branch'e göre fark
Specific Analysis Belirli bir analiz tarihinden itibaren
Administration → Configuration → New Code → Default
    veya
Project Settings → New Code

3.2. Custom Kural Ekleme (Quality Profiles)

Kalite Profili (Quality Profile) Nedir?

Kalite Profili, bir programlama dili için uygulanacak kurallar kümesidir. Her dil için bir kalite profili aktif olabilir ve bu profil analiz sırasında hangi kuralların uygulanacağını belirler.

Kalite Profili = Dil + Aktif Kurallar + Kural Özelleştirmeleri

Yerleşik Profiller

Her dil için "Sonar way" adında yerleşik bir profil gelir:

Özel Profil Oluşturma

Yöntem 1: Sonar Way'den Miras Alma (Önerilen)

1. Quality Profiles → Dil seçin (ör. Java)
2. Sonar way profili → Copy
3. Yeni isim: "Kurumsal-Java-Profili"
4. İstenmeyen kuralları devre dışı bırakın
5. Ek kuralları aktifleştirin

Yöntem 2: Sıfırdan Oluşturma

1. Quality Profiles → Create
2. Dil seçin
3. İsim girin
4. Kuralları tek tek aktifleştirin

Yöntem 3: Miras (Inheritance) ile Hiyerarşik Profiller

Sonar Way (Temel)
    └── Kurumsal-Temel (Extend)
            ├── Kurumsal-Backend (Extend)
            └── Kurumsal-Frontend (Extend)

Kural Yönetimi

Kuralları Keşfetme:

Rules → Dil filtreleri → Tür filtreleri → Etiket filtreleri

Kural Türleri:

Tür Simge Açıklama
Bug Programlama hataları
Vulnerability Güvenlik açıkları
Code Smell Bakım sorunları
Security Hotspot Manuel güvenlik incelemesi gerektiren noktalar

Kural Ciddiyet Seviyeleri:

Seviye Açıklama
Blocker Uygulamayı çökertebilecek veya ciddi güvenlik açığı oluşturacak hatalar
Critical Beklenmeyen davranışa yol açabilecek veya küçük güvenlik açığı olan hatalar
Major Geliştirici verimliliğini ciddi ölçüde etkileyen kalite sorunları
Minor Geliştirici verimliliğini az etkileyen kalite sorunları
Info Hata veya kalite sorunu olmayan, bilgilendirme amaçlı kurallar

Kural Özelleştirme Örnekleri

Örnek 1: Maksimum Metot Uzunluğu Kuralını Ayarlama

Rules → Java → "Methods should not have too many lines"
→ Profilde aktifleştir
→ Parametreyi düzenle: max = 30 (varsayılan 100)

Örnek 2: Paket İsimlendirme Kuralı

Rules → Java → "Package names should comply with a naming convention"
→ format parametresi: "com\.sirketiniz\.[a-z]+(\.[a-z]+)*"

Örnek 3: Güvenlik Kurallarını Güçlendirme

Rules → Type: Vulnerability → Tag: owasp-top10
→ Tüm OWASP Top 10 kurallarını aktifleştirin
→ Ciddiyet: Blocker veya Critical olarak ayarlayın

Önceliklendirilmiş Kurallar (Prioritized Rules) - Enterprise

Enterprise edisyonunda, belirli kurallar "önceliklendirilmiş" olarak işaretlenebilir. Bu kuralların ihlali kalite kapısında ayrı bir koşul olarak değerlendirilir.

Quality Profile → Kural seçin → "Set as prioritized"

Kullanım Senaryosu: "SQL Injection kuralı ihlal edilirse, test coverage ne olursa olsun kalite kapısı başarısız olsun"

Profil Karşılaştırma ve Değişiklik İzleme

İki Profili Karşılaştırma:

Quality Profiles → Compare (herhangi iki profili karşılaştırın)

Değişiklik Geçmişi:

Quality Profiles → Profil seçin → Changelog
→ Hangi kuralların ne zaman eklenip/çıkarıldığı görüntülenir

Profil Yedekleme ve Geri Yükleme

Quality Profiles → Profil seçin → Back up (XML olarak indir)
Quality Profiles → Restore (XML'den geri yükle)

Bu özellik, profillerin farklı SonarQube instance'ları arasında taşınmasını sağlar.

4. GELİŞMİŞ ANALİZLER VE TEDARİK ZİNCİRİ GÜVENLİĞİ (SCA)

4.1. Branch Tarama Yapısı ve Pull Request Decoration

Branch Analizi

SonarQube (Developer edisyon ve üstü), birden fazla branch'i ayrı ayrı analiz edebilir:

Desteklenen Branch Türleri:

Branch Türü Analiz Davranışı
Main (Ana) Branch Tüm kod analiz edilir, genel metrikler hesaplanır
Feature/Development Branch Ana branch ile karşılaştırılarak yeni kodun kalitesi ölçülür
Release Branch Ana branch gibi tam analiz yapılabilir

Branch Analizi Yapılandırması:

# Ana branch analizi
sonar-scanner \
  -Dsonar.projectKey=my-project \
  -Dsonar.host.url=https://sonarqube.sirketiniz.com \
  -Dsonar.token=$SONAR_TOKEN

# Feature branch analizi
sonar-scanner \
  -Dsonar.projectKey=my-project \
  -Dsonar.branch.name=feature/login-refactor \
  -Dsonar.host.url=https://sonarqube.sirketiniz.com \
  -Dsonar.token=$SONAR_TOKEN

Pull Request (PR) Analizi

PR analizi, merge edilmek üzere olan kodun kalitesini değerlendirir. Yalnızca yeni kod koşulları uygulanır.

# PR analizi
sonar-scanner \
  -Dsonar.projectKey=my-project \
  -Dsonar.pullrequest.key=42 \
  -Dsonar.pullrequest.branch=feature/user-auth \
  -Dsonar.pullrequest.base=main \
  -Dsonar.host.url=https://sonarqube.sirketiniz.com \
  -Dsonar.token=$SONAR_TOKEN

Pull Request Decoration

PR Decoration, analiz sonuçlarını doğrudan DevOps platformundaki PR sayfasında görüntüler:

┌─────────────────────────────────────────────────────────────┐
│  Pull Request #42: Feature/user-auth                        │
│                                                             │
│  ┌─────────────────────────────────────────────────────┐    │
│  │   SonarQube Quality Gate: PASSED                   │    │
│  │                                                     │    │
│  │   5 New Issues (0 Bugs, 0 Vulnerabilities,        │    │
│  │     5 Code Smells)                                  │    │
│  │   Coverage on New Code: 85.2%                     │    │
│  │   Duplication on New Code: 1.3%                   │    │
│  │                                                     │    │
│  │  [View in SonarQube →]                              │    │
│  └─────────────────────────────────────────────────────┘    │
│                                                             │
│  Satır bazında yorumlar:                                     │
│  ├── src/auth/UserService.java:45 -  Bug: ...            │
│  └── src/auth/TokenUtil.java:78 -  Code Smell: ...       │
└─────────────────────────────────────────────────────────────┘

PR Decoration Yapılandırması

GitHub Entegrasyonu
1. Administration → Configuration → DevOps Platform Integrations → GitHub
2. GitHub App oluşturun veya mevcut olanı kullanın
3. Configuration:
   - GitHub API URL: https://api.github.com (veya Enterprise URL)
   - GitHub App ID: <app-id>
   - Client ID: <client-id>
   - Client Secret: <client-secret>
   - Private Key: <.pem dosyası içeriği>
GitLab Entegrasyonu
1. Administration → Configuration → DevOps Platform Integrations → GitLab
2. GitLab Personal Access Token oluşturun (api scope ile)
3. Configuration:
   - GitLab API URL: https://gitlab.com (veya Self-Managed URL)
   - Personal Access Token: <token>
Azure DevOps Entegrasyonu
1. Administration → Configuration → DevOps Platform Integrations → Azure DevOps
2. Azure DevOps Personal Access Token oluşturun (Code: Read & Write scope)
3. Configuration:
   - Azure DevOps URL: https://dev.azure.com/organization
   - Personal Access Token: <token>

PR Merge Engelleme

Kalite kapısı başarısız olduğunda PR merge'inin engellenmesi için:

Platform Yapılandırma
GitHub Branch Protection Rules → Require status checks → "SonarQube Quality Gate" seçin
GitLab Settings → Merge Requests → "Pipelines must succeed" + External Status Check
Azure DevOps Branch Policies → Build Validation
Bitbucket Branch Permissions → Merge Checks

4.2. Yazılım Bileşen Analizi (SCA)

SCA (Software Composition Analysis) Nedir?

SCA, projenizdeki üçüncü parti (3rd party) kütüphaneleri ve bağımlılıkları analiz ederek güvenlik açıklarını, lisans risklerini ve tedarik zinciri tehditlerini tespit eden bir güvenlik analiz yöntemidir.

Neden Önemli: Modern uygulamaların %80-90'ı açık kaynak bileşenlerden oluşur. Bu bileşenlerdeki güvenlik açıkları, uygulamanızı doğrudan etkiler.

SonarQube Advanced Security kapsamında sunulan SCA, Enterprise ve Data Center edisyonlarında kullanılabilir.

SCA Mimarisi

Proje Kaynak Kodu
        │
        ├── pom.xml / build.gradle (Java)
        ├── package.json / package-lock.json (JavaScript)
        ├── requirements.txt / Pipfile.lock (Python)
        ├── *.csproj / packages.config (.NET)
        ├── go.mod (Go)
        ├── Cargo.toml (Rust)
        └── conanfile.txt (C/C++)
        │
        ▼
┌────────────────────────────────┐
│     SonarQube SCA Motoru       │
│                                │
│  1. Bağımlılık dosyalarını     │
│     parse et                   │
│  2. Doğrudan ve geçişli        │
│     (transitive) bağımlılıkları│
│     çöz                        │
│  3. Güvenlik açığı             │
│     veritabanlarıyla karşılaştır│
│  4. Lisans bilgilerini kontrol │
│     et                         │
│  5. SBOM oluştur               │
│  6. Kötü amaçlı paketleri     │
│     tespit et                  │
└────────────┬───────────────────┘
             │
             ▼
    ┌────────────────────┐
    │  Sonuç Raporları   │
    │  • Güvenlik Açıkları│
    │  • Lisans İhlalleri │
    │  • SBOM             │
    │  • Risk Skorları    │
    └────────────────────┘

3. Parti Kütüphane Güvenlik Açıkları

Güvenlik Açığı Tespiti

SonarQube SCA, bağımlılıklarınızı şu veritabanlarına karşı kontrol eder:

Güvenlik Açığı Görüntüleme
Proje → Dependencies sekmesi → Bağımlılık listesi

Her bağımlılık için:
├── Versiyon bilgisi
├── Doğrudan (direct) mı, geçişli (transitive) mi?
├── Bilinen güvenlik açıkları (CVE numaraları)
├── CVSS skoru (0-10)
├── Exploit edilebilirlik değerlendirmesi
├── Önerilen güvenli versiyon
└── Bakımcı güvenilirlik skoru

Örnek Güvenlik Açığı Raporu:

Bağımlılık Mevcut Versiyon CVE CVSS Öneri
log4j-core 2.14.1 CVE-2021-44228 10.0 (Critical) ≥ 2.17.1'e güncelle
jackson-databind 2.9.8 CVE-2019-14540 9.8 (Critical) ≥ 2.15.0'a güncelle
commons-text 1.9 CVE-2022-42889 9.8 (Critical) ≥ 1.10.0'a güncelle
Sürekli İzleme (Continuous Monitoring)

SonarQube 2025.4 ve sonrası sürümlerde, yeni bir güvenlik açığı keşfedildiğinde yeniden analiz yapmaya gerek kalmadan otomatik olarak bildirim yapılır.

Kötü Amaçlı Paket Tespiti (2026.1 Yenilik)

SonarQube 2026.1 LTA ile birlikte, typosquatting ve dependency confusion gibi saldırı vektörlerine karşı proaktif kötü amaçlı paket tespiti özelliği eklenmiştir.

Yazılım Lisansları Kontrolü

Lisans Profili Oluşturma

SonarQube SCA, üçüncü parti kütüphanelerin lisanslarını kontrol ederek uyumsuzlukları tespit eder.

Lisans Kategorileri:

Kategori Örnekler Risk Seviyesi
Permissive MIT, Apache 2.0, BSD Düşük
Weak Copyleft LGPL, MPL Orta
Strong Copyleft GPL v2, GPL v3, AGPL Yüksek
Commercial Ticari lisanslar Değişken
Unknown Lisans bilgisi bulunamayan Yüksek

Lisans Politikası Yapılandırması:

Administration → Configuration → SCA → License Profiles

Politika Seçenekleri:
├── Allowed (İzin Verilen): MIT, Apache 2.0, BSD
├── Prohibited (Yasaklanan): GPL v3, AGPL
└── Review Required (İnceleme Gerekli): LGPL, bilinmeyen lisanslar

Kurumsal Lisans Politikası Örneği:

 İzin Verilen:
   - MIT License
   - Apache License 2.0
   - BSD 2-Clause / 3-Clause
   - ISC License
   - CC0 1.0 Universal

 İnceleme Gerekli:
   - LGPL v2.1 / v3
   - MPL 2.0
   - EPL 2.0
   - Bilinmeyen Lisanslar

 Yasaklanan:
   - GPL v2 / v3
   - AGPL v3
   - SSPL
   - CC BY-SA (kod için)

SBOM (Software Bill of Materials)

SonarQube, projelerin bağımlılık haritasını SBOM formatında oluşturur:

Desteklenen Formatlar:

Kullanım Alanları:

4.3. IDE Entegrasyonu (SonarLint / SonarQube for IDE)

SonarQube for IDE (Eski adıyla SonarLint) Nedir?

SonarQube for IDE, geliştiricilerin kodlama sırasında anlık geri bildirim almasını sağlayan ücretsiz bir IDE eklentisidir. Kod yazılırken hataları, güvenlik açıklarını ve kod kokularını tespit eder.

Desteklenen IDE'ler

IDE Desteklenen Diller
VS Code JS, TS, Python, Java, C, C++, Go, PHP ve daha fazlası
IntelliJ IDEA Java, Kotlin, Scala, Python ve JetBrains ekosistemi
Eclipse Java, C/C++
Visual Studio C#, VB.NET, C, C++
PyCharm Python
WebStorm JS, TS

Kurulum

VS Code için:

1. Extensions → "SonarQube for IDE" arayın
2. Install
3. VS Code'u yeniden başlatın

IntelliJ IDEA için:

1. Settings → Plugins → Marketplace
2. "SonarQube" arayın
3. Install & Restart

Connected Mode (Bağlı Mod)

Connected Mode, IDE eklentisini SonarQube Server'a bağlayarak kuralların ve konfigürasyonun senkronize edilmesini sağlar.

Bağlı Mod Avantajları:

VS Code Connected Mode Yapılandırması:

// settings.json
{
  "sonarlint.connectedMode.connections.sonarqube": [
    {
      "serverUrl": "https://sonarqube.sirketiniz.com",
      "token": "<user-token>"
    }
  ],
  "sonarlint.connectedMode.project": {
    "connectionId": "sonarqube.sirketiniz.com",
    "projectKey": "my-java-project"
  }
}

Geliştirici Deneyimi

Geliştirici Kod Yazar
        │
        ▼
SonarQube for IDE Anlık Analiz Yapar
        │
        ├──  Bug: NullPointerException riski (satır 45)
        ├──  Vulnerability: SQL Injection (satır 78)
        ├──  Code Smell: Metot çok uzun (satır 12-95)
        └──  Secret: Hardcoded password (satır 33)
        │
        ▼
Geliştirici Commit YAPMADAN Düzeltir
        │
        ▼
Temiz kod push edilir → CI/CD'de Quality Gate geçer 

Sonuç: SonarQube for IDE, sorunların en erken ve en ucuz aşamada (geliştirici masasında) tespit edilmesini sağlar. Bu, "Shift-Left" yaklaşımının en somut uygulamasıdır.

5. UYGULAMA VE RAPORLAMA (CI/CD ENTEGRASYONU)

5.1. CI/CD Entegrasyonları ve Analiz Akışı

Genel Analiz Akışı

┌──────────────────────────────────────────────────────────────────┐
│                        CI/CD PIPELINE                             │
│                                                                  │
│  ┌────────┐    ┌──────────┐    ┌───────────┐    ┌────────────┐  │
│  │ Build  │───│ Test     │───│ SonarQube │───│ Quality    │  │
│  │        │    │ & Cover  │    │ Analysis  │    │ Gate Check │  │
│  └────────┘    └──────────┘    └───────────┘    └──────┬─────┘  │
│                                                         │        │
│                                                    ┌────┴────┐   │
│                                                    │ PASSED? │   │
│                                                    └────┬────┘   │
│                                                   YES   │   NO   │
│                                                    │    │    │   │
│                                                    ▼         ▼   │
│                                              ┌──────────┐ FAIL  │
│                                              │ Deploy   │       │
│                                              └──────────┘       │
└──────────────────────────────────────────────────────────────────┘

SonarScanner Türleri

Scanner Kullanım Alanı
SonarScanner CLI Genel amaçlı, herhangi bir dil
SonarScanner for Maven Maven tabanlı Java projeleri
SonarScanner for Gradle Gradle tabanlı Java/Kotlin projeleri
SonarScanner for .NET .NET projeleri (MSBuild)
SonarScanner for npm Node.js/JavaScript projeleri

Proje Yapılandırma Dosyası

sonar-project.properties:

# Proje Tanımlama
sonar.projectKey=com.sirketiniz:my-service
sonar.projectName=My Microservice
sonar.projectVersion=2.1.0

# Kaynak Kod Yolları
sonar.sources=src/main
sonar.tests=src/test
sonar.java.binaries=target/classes

# Dahil Etme / Hariç Tutma
sonar.inclusions=**/*.java,**/*.xml
sonar.exclusions=**/generated/**,**/test/**
sonar.test.inclusions=**/*Test.java,**/*IT.java

# Kodlama
sonar.sourceEncoding=UTF-8

# Test Kapsama Raporu
sonar.coverage.jacoco.xmlReportPaths=target/site/jacoco/jacoco.xml

# Bağlantı Bilgileri (CI/CD değişkenlerinden alınmalı)
# sonar.host.url=${SONAR_HOST_URL}
# sonar.token=${SONAR_TOKEN}

CI/CD Platform Entegrasyonları

1. Jenkins Entegrasyonu

Gereksinimler:

Jenkinsfile (Declarative Pipeline):

pipeline {
    agent any

    environment {
        SONAR_TOKEN = credentials('sonarqube-token')
    }

    stages {
        stage('Build') {
            steps {
                sh 'mvn clean compile'
            }
        }

        stage('Test') {
            steps {
                sh 'mvn test'
            }
            post {
                always {
                    junit 'target/surefire-reports/*.xml'
                    jacoco execPattern: 'target/jacoco.exec'
                }
            }
        }

        stage('SonarQube Analysis') {
            steps {
                withSonarQubeEnv('SonarQube-Server') {
                    sh '''
                        mvn sonar:sonar \
                          -Dsonar.projectKey=my-service \
                          -Dsonar.host.url=${SONAR_HOST_URL} \
                          -Dsonar.token=${SONAR_TOKEN}
                    '''
                }
            }
        }

        stage('Quality Gate') {
            steps {
                timeout(time: 5, unit: 'MINUTES') {
                    waitForQualityGate abortPipeline: true
                }
            }
        }

        stage('Deploy') {
            when {
                branch 'main'
            }
            steps {
                sh 'kubectl apply -f k8s/'
            }
        }
    }
}
2. GitHub Actions Entegrasyonu

.github/workflows/sonarqube.yml:

name: SonarQube Analysis

on:
  push:
    branches: [ main, develop ]
  pull_request:
    branches: [ main ]

jobs:
  sonarqube:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout
        uses: actions/checkout@v4
        with:
          fetch-depth: 0  # Tam git geçmişi (blame analizi için)

      - name: Set up JDK 17
        uses: actions/setup-java@v4
        with:
          java-version: '17'
          distribution: 'temurin'

      - name: Build & Test
        run: mvn clean verify

      - name: SonarQube Scan
        uses: sonarsource/sonarqube-scan-action@master
        env:
          SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}
          SONAR_HOST_URL: ${{ secrets.SONAR_HOST_URL }}

      - name: Quality Gate Check
        uses: sonarsource/sonarqube-quality-gate-action@master
        timeout-minutes: 5
        env:
          SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}
3. GitLab CI/CD Entegrasyonu

.gitlab-ci.yml:

stages:
  - build
  - test
  - analysis
  - deploy

variables:
  SONAR_USER_HOME: "${CI_PROJECT_DIR}/.sonar"

build:
  stage: build
  image: maven:3.9-eclipse-temurin-17
  script:
    - mvn clean compile
  artifacts:
    paths:
      - target/

test:
  stage: test
  image: maven:3.9-eclipse-temurin-17
  script:
    - mvn test
  artifacts:
    paths:
      - target/
    reports:
      junit: target/surefire-reports/TEST-*.xml

sonarqube-analysis:
  stage: analysis
  image: sonarsource/sonar-scanner-cli:latest
  variables:
    SONAR_TOKEN: "${SONAR_TOKEN}"
    SONAR_HOST_URL: "${SONAR_HOST_URL}"
  script:
    - sonar-scanner
      -Dsonar.projectKey=${CI_PROJECT_NAME}
      -Dsonar.qualitygate.wait=true
  allow_failure: false
  only:
    - main
    - merge_requests
4. Azure Pipelines Entegrasyonu

azure-pipelines.yml:

trigger:
  branches:
    include:
      - main
      - develop

pr:
  branches:
    include:
      - main

pool:
  vmImage: 'ubuntu-latest'

steps:
  - task: SonarQubePrepare@6
    inputs:
      SonarQube: 'SonarQube-Connection'
      scannerMode: 'MSBuild'
      projectKey: 'my-dotnet-project'
      projectName: 'My .NET Project'

  - task: DotNetCoreCLI@2
    inputs:
      command: 'build'

  - task: DotNetCoreCLI@2
    inputs:
      command: 'test'
      arguments: '--collect:"Code Coverage"'

  - task: SonarQubeAnalyze@6

  - task: SonarQubePublish@6
    inputs:
      pollingTimeoutSec: '300'

Webhook Yapılandırması

SonarQube, analiz tamamlandığında webhook ile bildirim gönderir:

Administration → Configuration → Webhooks → Create

URL: https://jenkins.sirketiniz.com/sonarqube-webhook/
Secret: <güvenli-anahtar>

Webhook Payload Örneği:

{
  "serverUrl": "https://sonarqube.sirketiniz.com",
  "taskId": "AXoR...",
  "status": "SUCCESS",
  "analysedAt": "2026-02-19T10:30:00+0300",
  "project": {
    "key": "my-service",
    "name": "My Microservice"
  },
  "qualityGate": {
    "status": "OK",
    "conditions": [
      {
        "metric": "new_coverage",
        "operator": "LESS_THAN",
        "value": "85.3",
        "status": "OK",
        "errorThreshold": "80"
      }
    ]
  }
}

5.2. Kurumsal Yönetimsel Raporlama (Portföy ve PDF Raporları)

Portföy Yönetimi (Enterprise Edisyon)

Portföy, birden fazla projeyi mantıksal gruplar halinde organize ederek üst düzey bir görünüm sunar.

Hiyerarşi:

Portföy: "Kurumsal Yazılım Portföyü"
├── Alt Portföy: "Müşteri Uygulamaları"
│   ├── Proje: web-frontend
│   ├── Proje: mobile-app
│   └── Proje: customer-api
├── Alt Portföy: "İç Sistemler"
│   ├── Proje: erp-backend
│   ├── Proje: hr-system
│   └── Proje: reporting-service
└── Alt Portföy: "Altyapı"
    ├── Proje: api-gateway
    ├── Proje: config-server
    └── Proje: logging-service

Portföy Oluşturma:

1. Administration → Projects → Portfolios → Create Portfolio
2. İsim ve açıklama girin
3. Proje ekleme yöntemi seçin:
   a. Manuel: Projeleri tek tek seçin
   b. Etiket tabanlı: Belirli etikete sahip projeleri otomatik ekle
   c. Regex tabanlı: Proje adı kalıbıyla otomatik ekle
4. Alt portföyler oluşturun (gerekirse)

Portföy Dashboard Metrikleri

Portföy sayfasında görüntülenen özet metrikler:

Metrik Açıklama
Reliability Rating Tüm projelerin güvenilirlik ortalaması (A-E)
Security Rating Tüm projelerin güvenlik ortalaması (A-E)
Maintainability Rating Tüm projelerin bakım yapılabilirlik ortalaması (A-E)
Security Review Rating Güvenlik hotspot inceleme oranı
Coverage Ortalama test kapsama oranı
Duplications Ortalama kod tekrarı oranı
Lines of Code Toplam kod satır sayısı
Quality Gate Status Portföydeki projelerin kaçının kalite kapısını geçtiği

Application (Uygulama) Görünümü

Birden fazla projeden oluşan tek bir uygulamayı (ör. microservice mimarisi) bir bütün olarak değerlendirmek için Application kullanılır:

Application: "E-Ticaret Platformu"
├── order-service (Java)
├── payment-service (Java)
├── product-catalog (Node.js)
├── user-service (Python)
└── web-frontend (TypeScript)

PDF Raporları (Enterprise Edisyon)

SonarQube Enterprise, yönetim sunumları için kullanılabilecek PDF raporları üretir:

Rapor Türleri:

Rapor İçerik Hedef Kitle
Executive PDF Report Portföy düzeyinde özet metrikler, trend grafikleri CTO, VP of Engineering
Uyum Raporları OWASP Top 10, CWE Top 25, PCI DSS, STIG uyum durumu Güvenlik ekibi, denetçiler
OWASP Top 10 Report OWASP kategorilerine göre güvenlik açıkları Güvenlik mühendisleri
OWASP Top 10 for LLM LLM/AI uygulamalarına özel güvenlik raporu AI/ML ekipleri
OWASP MASVS Mobil uygulama güvenlik doğrulama standardı Mobil geliştirme ekibi
CWE Top 25 (2024) En yaygın 25 yazılım zayıflığı Geliştirme ekipleri
STIG V6R3 DoD güvenlik teknik uygulama kılavuzu Kamu/savunma projeleri
PCI DSS Ödeme kartı endüstrisi veri güvenliği standardı Finans/e-ticaret

PDF Rapor Oluşturma:

Portföy veya Proje sayfası → "Download PDF Report" butonu
→ Rapor arka planda oluşturulur
→ Hazır olduğunda indirilir

Uyum (Compliance) Raporları

OWASP Top 10 (2025) Raporu Örnek İçeriği:

# Kategori Proje Durumu Bulgu Sayısı
A01 Broken Access Control 3 vulnerability
A02 Cryptographic Failures 0
A03 Injection 1 hotspot
A04 Insecure Design 0
A05 Security Misconfiguration 0
A06 Vulnerable & Outdated Components 5 (SCA)
A07 Identification & Authentication Failures 0
A08 Software & Data Integrity Failures 0
A09 Security Logging & Monitoring Failures 2 hotspot
A10 Server-Side Request Forgery 0

Bildirim ve Uyarı Yönetimi

Kişisel Bildirimler:

My Account → Notifications
├── Kalite kapısı durumu değişikliği
├── Yeni sorun atanması
├── "Won't Fix" veya "False Positive" olarak işaretlenen sorunlar
└── Proje durumu değişiklikleri

Webhook Tabanlı Entegrasyonlar:

Hedef Kullanım
Slack Kalite kapısı durumlarını kanala bildir
Jira Kritik sorunları otomatik ticket oluştur
Microsoft Teams Webhook ile bildirim gönder
PagerDuty Kritik güvenlik açıklarında alarm tetikle

Slack Entegrasyonu (2025.6+)

SonarQube 2025.6 ve sonrası sürümlerde native Slack entegrasyonu:

Administration → Configuration → Slack
→ Slack Workspace bağlantısı kur
→ Kanal eşleştirmeleri tanımla
→ Bildirim türlerini seç (Quality Gate değişikliği vb.)

Jira Entegrasyonu

Administration → Configuration → Jira
→ Jira Cloud URL ve API token tanımla
→ Proje eşleştirmelerini yapılandır
→ Sorun türü ve öncelik eşleştirmelerini belirle

Jira Entegrasyonu ile:

EK: HIZLI BAŞVURU KARTI

Önemli URL'ler ve Kaynaklar

Kaynak URL
SonarQube Server Dokümantasyonu https://docs.sonarsource.com/sonarqube-server/latest/
SonarQube Kural Kataloğu https://rules.sonarsource.com/
SonarSource Community https://community.sonarsource.com/
SonarQube for IDE (VS Code) Dokümantasyonu https://docs.sonarsource.com/sonarqube-for-ide/vs-code/
SonarQube Güvenlik Açığı Veritabanı https://www.sonarsource.com/products/sonarqube/advanced-security/
SonarQube MCP Server https://docs.sonarsource.com/sonarqube-mcp-server

Sık Kullanılan sonar-scanner Parametreleri

# Temel Parametreler
-Dsonar.projectKey=proje-anahtari
-Dsonar.projectName="Proje Adı"
-Dsonar.host.url=https://sonarqube.sirketiniz.com
-Dsonar.token=xxx

# Branch / PR
-Dsonar.branch.name=feature/xxx
-Dsonar.pullrequest.key=42
-Dsonar.pullrequest.branch=feature/xxx
-Dsonar.pullrequest.base=main

# Kaynak ve Test
-Dsonar.sources=src/main
-Dsonar.tests=src/test
-Dsonar.exclusions=**/generated/**

# Kalite Kapısı
-Dsonar.qualitygate.wait=true
-Dsonar.qualitygate.timeout=300

Sorun Giderme Kontrol Listesi

Not: Bu doküman SonarQube Server 2026.1 LTA sürümü temel alınarak hazırlanmıştır. Bazı özellikler edisyona göre değişiklik gösterebilir.