DevSecOps: Güvenliği DevOps'a Entegre Etme

DevSecOps, güvenliği planlama ve kodlamadan test, dağıtım ve operasyonlara kadar yazılım geliştirme yaşam döngüsünün her aşamasına entegre etme uygulamasıdır. DevSecOps, güvenliği son bir kapı (veya daha kötüsü sonradan akla gelen bir düşünce) olarak ele almak yerine, güvenliği geliştirme, operasyonlar ve güvenlik ekipleri arasında sürekli, paylaşılan bir sorumluluk haline getirir.
giriiş
DevSecOps, güvenliği planlama ve kodlamadan test, dağıtım ve operasyonlara kadar yazılım geliştirme yaşam döngüsünün her aşamasına entegre etme uygulamasıdır. DevSecOps, güvenliği son bir kapı (veya daha kötüsü sonradan akla gelen bir düşünce) olarak ele almak yerine, güvenliği geliştirme, operasyonlar ve güvenlik ekipleri arasında sürekli, paylaşılan bir sorumluluk haline getirir.
Temel felsefe **"sola kaydırma"**dır; güvenlikle ilgili endişeleri geliştirme sürecinde mümkün olduğu kadar erken, en ucuz ve düzeltilmesi en kolay zamanda ele alın. Üretimde bulunan bir güvenlik açığının düzeltilmesi, tasarım sırasında yakalanan güvenlik açığından 100 kat daha fazla maliyetlidir.
Sola Geçiş Felsefesi
Güvenlik Açıklarını Düzeltmenin Maliyeti
Stage Cost to Fix Detection
──────────────────────────────────────────────
Design $1 Threat modeling, architecture review
Development $6 SAST, peer review
Testing $15 DAST, penetration testing
Staging $40 Integration tests
Production $100+ Incident response, breach
Kaynak: IBM Sistem Bilimi Enstitüsü
Kod Olarak Güvenlik
DevOps'un "kod olarak altyapı"yı getirmesi gibi, DevSecOps da "kod olarak güvenlik" getiriyor:
# .sast.yml — Security policies defined in code
version: 1.0
policies:
sql_injection:
severity: critical
action: block_build
hardcoded_secret:
severity: high
action: alert_and_review
deprecated_api:
severity: medium
action: warn
DevSecOps İşlem Hattı
Plan → Code → Build → Test → Deploy → Operate
│ │ │ │ │ │
├─ Threat Model
│ ├─ SAST
│ ├─ Dependency Scan
│ ├─ Container Scan
│ ├─ DAST
│ ├─ IaC Scan
│ ├─ Sign
│ ├─ Policy Check
│ ├─ Monitoring
│ ├─ SIEM
│ ├─ Incident Response
1. Planlama Aşaması — Tehdit Modellemesi
Kod yazmadan önce STRIDE gibi çerçeveleri kullanarak potansiyel tehditleri belirleyin:
| Kategori | Örnek | Azaltma |
|---|---|---|
| Spoofing | Saldırgan bir kullanıcının kimliğine bürünür | Kimlik doğrulama (MFA, JWT) |
| Tamperleme | Saldırgan aktarım halindeki verileri değiştirir | TLS, imzalama |
| Rreddedilme | Kullanıcı bir eylemi reddeder | Denetim günlüğü |
| Ibilgi Açıklama | Hata mesajları yoluyla veri sızıntısı | Doğru hata yönetimi |
| **Hizmet Reddi | API'yi isteklerle boğun | Hız sınırlaması |
| E Ayrıcalığın kaldırılması | Normal kullanıcı yönetici erişimi kazanır | RBAC, yetkilendirme kontrolleri |
Araç: OWASP Threat Dragon — STRIDE desteğine sahip açık kaynaklı tehdit modelleme aracı.
2. Kod Aşaması - Statik Uygulama Güvenliği Testi (SAST)
SAST, kaynak kodunu çalıştırmadan güvenlik açıklarına karşı analiz eder.
// SAST will flag this as SQL injection
app.get('/user', (req, res) => {
const sql = `SELECT * FROM users WHERE id = '${req.query.id}'`;
db.query(sql);
});
// Corrected version
app.get('/user', (req, res) => {
const sql = 'SELECT * FROM users WHERE id = ?';
db.query(sql, [req.query.id]);
});
SAST Araçları:
| Alet | Diller | Entegrasyon |
|---|---|---|
| SonarQube | 30'dan fazla dil | GitHub/GitLab CI, Jenkins |
| Segrep | Python, Go, JS, TS, Java vb. | CLI, CI, ön taahhüt |
| CodeQL | C/C++, C#, Java, JS/TS, Python | GitHub Gelişmiş Güvenlik |
| Checkmarx | 20'den fazla dil | Kurumsal SDLC |
CI Entegrasyonu:
# GitHub Actions — SAST on every PR
name: SAST
on: [pull_request]
jobs:
sast:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Run Semgrep
uses: semgrep/semgrep-action@v1
with:
config: p/default
- name: Check results
run: |
if [ -f semgrep-results.json ]; then
CRITICAL=$(jq '.results | map(select(.severity=="CRITICAL")) | length' semgrep-results.json)
if [ "$CRITICAL" -gt 0 ]; then
echo "❌ $CRITICAL critical vulnerabilities found"
exit 1
fi
fi
3. Oluşturma Aşaması - Bağımlılık ve Konteyner Taraması
Bağımlılık Taraması
Açık kaynaklı kütüphaneler modern uygulamaların %60-80'ini oluşturur. Her bağımlılık potansiyel bir saldırı vektörüdür.
Önemli tedarik zinciri saldırıları:
- Event-stream (2018) — Kötü amaçlı paket, cüzdanlardan Bitcoin çaldı.
- SolarWinds (2020) — Arka kapılı derleme hattı 18.000'den fazla kuruluşu etkiledi.
- Log4j (2021) — Yaygın olarak kullanılan günlük kaydı kitaplığında kritik RCE.
- xz utils (2024) — Linux sıkıştırma kitaplığında SSH arka kapısı.
# Dependency scanning with Trivy
$ trivy fs --scanners vuln --severity CRITICAL,HIGH .
Total: 14 (CRITICAL: 3, HIGH: 11)
┌──────────────────────┬──────────────────┬──────────┬───────────────────┐
│ Package │ Vulnerability ID │ Severity │ Installed Version │
├──────────────────────┼──────────────────┼──────────┼───────────────────┤
│ lodash │ CVE-2024-1234 │ CRITICAL │ 4.17.20 │
│ express │ CVE-2024-5678 │ HIGH │ 4.18.1 │
└──────────────────────┴──────────────────┴──────────┴───────────────────┘
Bağımlılık sürümlerini kilitleyin ve bütünlük karmalarını kullanın:
// package-lock.json ensures reproducible builds with hashes
"lodash": {
"version": "4.17.21",
"integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="
}
Konteyner Görüntüsü Tarama
# Bad practice: large base image, runs as root
FROM node:20
COPY . .
RUN npm install
USER root
CMD ["node", "app.js"]
# Good practice: minimal base image, non-root user
FROM node:20-alpine
RUN addgroup -S appgroup && adduser -S appuser -G appgroup
COPY --chown=appuser:appgroup . .
RUN npm ci --production
USER appuser
CMD ["node", "app.js"]
# Scan container image
$ trivy image myapp:latest
┌──────────────────┬──────────────────┬──────────┐
│ Library │ Vulnerability │ Severity │
├──────────────────┼──────────────────┼──────────┤
│ libcrypto │ CVE-2024-9999 │ CRITICAL │
│ bash │ CVE-2024-8888 │ HIGH │
└──────────────────┴──────────────────┴──────────┘
Recommendation: Use distroless or scratch base images
4. Test Aşaması — Dinamik Uygulama Güvenliği Testi (DAST)
DAST, çalışan uygulamayı güvenlik açıklarına karşı test eder:
# OWASP ZAP automated scan
docker run -v $(pwd):/zap/wrk:rw zaproxy/zap-stable \
zap-cli quick-scan \
--self-contained \
--start-options '-config api.addrs.addr.name=.*' \
http://staging.example.com
# Generate HTML report
zap-cli report -o zap-report.html -f html
DAST kapsamı (OWASP İlk 10):
- A01: Bozuk Erişim Kontrolü
- A02: Şifreleme Hataları
- A03: Enjeksiyon (SQL, NoSQL, OS komutu)
- A04: Güvenli Olmayan Tasarım
- A05: Güvenlik Yanlış Yapılandırması
- A06: Savunmasız Bileşenler
- A07: Kimlik Doğrulama Hataları
- A08: Veri Bütünlüğü Hataları
- A09: Günlüğe Kaydetme/İzleme Hataları
- A10: SSRF
5. Dağıtım Aşaması - Politika Uygulaması
İmzalama ve Doğrulama
# Cosign — sign container images
cosign sign --key cosign.key registry.example.com/myapp:latest
# Verify before deployment
cosign verify --key cosign.pub registry.example.com/myapp:latest
Giriş Denetleyicileri (Kubernetes)
# OPA/Gatekeeper — Deny privileged containers
apiVersion: constraints.gatekeeper.sh/v1beta1
kind: K8sBlockPrivilegedContainers
metadata:
name: no-privileged-containers
spec:
match:
kinds:
- apiGroups: [""]
kinds: ["Pod"]
parameters:
enforcementAction: deny
validation:
message: "Privileged containers are not allowed"
deny:
conditions:
- key: "spec.containers[].securityContext.privileged"
operator: In
values: ["true"]
6. İşletme Aşaması — Sürekli İzleme
Güvenlik Bilgileri ve Olay Yönetimi (SIEM)
# Filebeat configuration for shipping logs to ELK
filebeat.inputs:
- type: container
paths:
- /var/log/containers/*.log
output.elasticsearch:
hosts: ["https://elasticsearch:9200"]
username: "filebeat"
password: "${ELASTIC_PASSWORD}"
SIEM algılama kuralları:
# Elastic Security rule: Multiple failed logins
sequence by source.ip
with maxspan=5m
[authentication where event.action == "login_failed"] |
[authentication where event.action == "login_failed"] |
[authentication where event.action == "login_success"]
Çalışma Zamanı Koruması
- Falco — Container'lar ve Kubernetes için çalışma zamanı güvenlik izlemesi.
- AppArmor / SELinux — Linux'ta zorunlu erişim kontrolü.
- Seccomp — Konteynerlere sunulan sistem çağrılarını kısıtlayın.
# Falco rule: Shell in container
- rule: Terminal shell in container
desc: A shell was spawned in a container
condition: container.id != host
and proc.name in (bash, zsh, sh, ash)
and spawned_process
output: "Shell spawned in container (user=%user.name container=%container.id)"
priority: WARNING
DevSecOps Kültürü
DevSecOps, araçlarla olduğu kadar kültür ve süreçlerle de ilgilidir:
Kültürel İlkeler
| Prensip | Geleneksel | DevSecOps |
|---|---|---|
| Güvenlik sahipliği | Güvenlik ekibi buranın sahibi | Herkes ona sahip |
| Güvenlik gerçekleştiğinde | Geliştirmenin sonu | Boyunca sürekli |
| Geri bildirim nasıl iletilir? | "Hayır" (engelleyici) | "Evet, eğer..." (etkinleştirici) |
| Takım yapısı | Ayrı silolar | Çapraz fonksiyonel |
| Otomasyon | Manuel güvenlik kapıları | Otomatik güvenlik kontrolleri |
| Hız ve Güvenlik | Takas (yavaş ve güvenli ile hızlı ve güvensiz) | Her ikisi de — otomatik güvenlik hız sağlar |
DevSecOps Programı Oluşturma
- Küçük başlayın — SAST ve bağımlılık taramasını tek bir ardışık düzene ekleyin.
- Değeri göster — Üretimden önce yakalanan güvenlik açıklarını izleyin.
- Otomatikleştirin, engellemeyin — Güvenlik kapıları engelleyiciler değil geri bildirim sağlamalıdır.
- Geliştiricileri eğitin — Her takımda güvenlik şampiyonları.
- Ölçüm — Ortalama düzeltme süresi (MTTR), güvenlik açığı yoğunluğu.
Güvenlik Şampiyonları Programı
Geliştirme ekipleri içindeki güvenlik şampiyonlarını belirleyin:
- Güvenlik ve geliştirme arasında köprü görevi görür.
- Güvenlik aracı bulgularını inceleyin.
- Akran güvenliği incelemeleri gerçekleştirin.
- En iyi güvenlik uygulamaları konusunda güncel kalın.
DevSecOps Araç Zinciri Özeti
| Faz | Araç Seçenekleri | Amaç |
|---|---|---|
| Tehdit Modellemesi | OWASP Tehdit Ejderhası, Microsoft Tehdit Modelleme Aracı | Tehditleri erken tespit edin |
| SAST | SonarQube, Semgrep, CodeQL, Checkmarx | Statik kod analizi |
| Bağımlılık | Snyk, Dependabot, Trivy, OWASP DC | Açık kaynaklı güvenlik açığı yönetimi |
| Konteyner | Trivy, Clair, Docker Scout, Grype | Görüntü güvenlik açığı taraması |
| DAST | OWASP ZAP, Burp Paketi, Acunetix | Çalışma zamanı güvenlik açığı testi |
| IaC | Checkov, tfsec, Terrascan, KICS | Altyapı yanlış yapılandırma tespiti |
| Sırlar | GitGuardian, TruffleHog, Gitleaks | Koddaki sırları tespit edin |
| İmzalama | Cosign, Sigstore, Noter | Yapıt imzalama ve doğrulama |
| Politika | OPA/Gatekeeper, Kyverno, Sentinel | Politika yaptırımı |
| Çalışma zamanı | Falco, AppArmor, Secomp | Çalışma zamanı tehdit tespiti |
| SIEM | ELK, Splunk, Datadog Güvenliği, Sentinel | Günlük toplama ve tehdit algılama |
Çözüm
DevSecOps, güvenliği bir darboğazdan kolaylaştırıcıya dönüştürür. Güvenlik kontrollerini geliştirme yaşam döngüsünün her aşamasına entegre ederek ve bunları CI/CD işlem hatlarında otomatikleştirerek kuruluşlar şunları yapabilir:
- Güvenlik açıklarını daha erken yakalayın — Düzeltilmesi 100 kat daha ucuz olduğunda.
- Daha hızlı gönderin — Otomatik güvenlik kapıları, manuel incelemeden daha hızlıdır.
- Riski azaltın — Sürekli güvenlik izleme, insanların kaçırdığı şeyleri yakalar.
- Güvenlik kültürü oluşturun — Güvenlik herkesin sorumluluğu haline gelir.
En yüksek etkili, en düşük sürtünmeli araçlarla başlayın: SAST ve bağımlılık taraması. Kapsayıcı taramayı, DAST ve IaC taramasını aşamalı olarak ekleyin. İlerlemeyi ölçün, galibiyetleri kutlayın ve tekrarlayın.
Öne Çıkan Makaleler

2026’da Oluşturmaya Değer 50 Claude Skill
Claude Skills, tekrarlanan promptları yeniden kullanılabilir workflow’lara dönüştürebilir. İşte yazma, kodlama, araştırma, iş, üretkenlik, tasarım, analiz ve destek için 50 pratik Claude Skill.

Senior Engineer’lardan Öğrendiğim 6 Kodlama Pattern’i

Özel Bir Yapay Zeka Not Asistanı Kurun
Markdown notlarını özel taslakları açığa çıkarmadan aranabilir bir asistana dönüştürün.
Yorumlar
0 yorumHenüz onaylı yorum yok. Yeni yanıtlar moderasyon bekleyebilir.