Exploring Infinite Possibilities on FrontEnd 🚀
Burak Sağlık
Search...

Tue Sep 29 2026

2026 Gizlilik Yazılımı Seçim Kriterleri: RoPA, DPIA ve Uyumluluk Rehberi

2026 Gizlilik Yazılımı Seçim Kriterleri: RoPA, DPIA ve Uyumluluk Rehberi

🎯 Giriş: 2026'da Gizlilik Yazılımı Seçiminin Önemi

Merhaba! 👋
Ben de senin gibi bir geliştiriciyim ve son yıllarda gizlilik konusunda yaşadığım bir hikâye anlatayım.

📅 Neden 2026?

  • Düzenleyici baskı artıyor – GDPR, CCPA, KVKK ve yeni AB AI Act gibi yönetmelikler 2026’da tam uygulanmaya başlıyor.
  • Veri ihlali maliyeti – Ortalama bir ihlal şimdi $4.5M’yi buluyor (IBM 2024 raporu).
  • Büyüme hedefleri – Müşteriler artık “verilerim nerede?” diye soruyor; doğru yazılım güven ve rekabet avantajı demek.

🤔 Benim küçük deneyimim

Geçen yıl bir SaaS projesinde hızlıca bir çözüm entegre ettik. İki ay sonra bir denetim geldi ve logs’larda kişisel veri sızıntısı tespit edildi. Sonuç? Yasal para cezası + müşteri kaybı. O gün anladım ki: “Hangi aracı seçtiğin, projenin ömrünü belirler.”

🎯 Bu bölümden ne kazanacaksın?

  • 2026 risk haritası – Hangi yönetmelikler seni etkiler?
  • Seçim kriterleri – Compliance, entegrasyon kolaylığı, maliyet.
  • Pratik bir değerlendirme çerçevesi – Kendi projen için checklist oluşturma.

Hadi birlikte doğru gizlilik yazılımını nasıl seçeceğimizi keşfedelim! 🚀


🔁 Kriter 1: RoPA Desteği ve Otomatik Kayıt Tutma

RoPA (İşleme Faaliyetleri Kayıtları), KVKK’nın 30. maddesi uyarınca her veri sorumlusunun tutmak zorunda olduğu bir evrak çerçevesidir.
Kısaca: “Hangi veriyi, neden, kimle, ne kadar süre işlediğimi” kanıtlayabileceğimiz bir defter.

Neden bu kadar kritik? 🎯

  • Yasal zorunluluk – KVKK ve GDPR her iki yönetmelikte de kayıt tutma şart.
  • Denetim kolaylığı – Kurum denetiminde “RoPA’nız var mı?” sorusu ilk gelenlerden.
  • Risk yönetimi – Veri ihlali anında hangi işlem etkilendiğini hızlıca görebilirsin.

Bir SaaS platformunda RoPA modülü nasıl görünür? 🛠

Zorunlu Alan Açıklama
veri_sorumlusu Şirket/kurum unvanı, iletişim bilgileri, temsilci (varsa)
isleme_amaci Neden işleniyor? (ör. “Müşteri destek”, “Pazarlama e-postası”)
veri_kategorileri Kişisel veri, özel kategori veri, biyometrik veri vb.
saklama_suresi Kaç yıl/ay saklanacak, sonrasında nasıl yok edilecek
veri_alicilari Üçüncü taraf servisler, bulut sağlayıcılar, avukatlar
uluslararasi_transfer Veri AB dışına çıkıyor mu? Hangi mekanizma (SCC, BCR…)
guvenlik_onlemleri Şifreleme, erişim kontrolü, loglama vb.

Pratik ipucu: Otomatik güncelleme tetikleyicileri (trigger) koyarak, yeni bir işlem eklendiğinde veya mevcut bir işlem değiştiğinde RoPA kaydının yeniden üretilmesini sağlayabilirsin.
Örn: Yeni bir mikro servis “Kullanıcı analitiği” deploy edildi → CI/CD pipeline’ında ropa-update job’u tetiklenir → JSON kaydı otomatik yenilenir ✅

Minimum zorunlu alanları içeren JSON şablonu 👇

{
  "veri_sorumlusu": {
    "unvan": "Acme Teknoloji A.Ş.",
    "iletisim": "privacy@acme.com",
    "temsilci": "Ayşe Yılmaz"
  },
  "isleme_amaci": "Müşteri destek taleplerinin yönetimi",
  "veri_kategorileri": [
    "Kişisel veri",
    "İletişim bilgileri"
  ],
  "saklama_suresi": "3 yıl",
  "veri_alicilari": [
    "Zendesk",
    "AWS (EU Frankfurt)"
  ],
  "uluslararasi_transfer": false,
  "guvenlik_onlemleri": [
    "AES-256 şifreleme",
    "RBAC erişim kontrolü",
    "Yıllık penetrasyon testi"
  ]
}

Bu sayede her yeni özellik veya işlem değişikliği olduğunda geliştirici eliyle Excel doldurmak yerine, pipeline’dan çıkan bu JSON doğrudan RoPA veritabanına yazılır. Hem hata riski düşer hem de denetime “hazır” gidersin 🚀


🔁 Kriter 2: DPIA Modülleri ve Risk Değerlendirme Süreçleri

DPIA (Veri Koruma Etki Değerlendirmesi) — KVKK ve GDPR'da "yüksek risk" varsa mecburidir 🎯. Ama ne zaman "yüksek risk" diyoruz? Kısaca:

  • Sistematik profil oluşturma (ör. kredi skorlama, hedefli reklamcılık)
  • Hassas veri kategorilerinin geniş ölçekli işlenmesi (sağlık, biyometrik, ırk/vatan vb.)
  • Kamu alanının sistematik izlenmesi (kamera, Wi-Fi takibi, konum verisi)
  • Yeni teknolojilerin deneysel kullanımı (AI karar mekanizmaları, blockchain vb.)

Kural basit: Şüphe varsa DPIA yap. Ceza riskini almak yerine 2-3 saatlik bir değerlendirme çok daha ucuzdur 💸.


🛠 Yazılımda Ne Otomatikleştirilebilir?

Adım Manuel mı? Otomatikleştirilebilir mi?
Veri akışı haritalama ❌ ✅ (kod analizi / OpenAPI spec'ten)
Risk matrisi oluşturma ⚠️ Kısmen ✅ (kural motoru + skorlama)
Azaltma önlemleri önerme ⚠️ Kısmen ✅ (önceden tanımlı kontrol kütüphanesi)
Onay akışı (DPO → Yasal → Yönetim) ❌ ✅ (workflow motoru)
Rapor / kayıt tutma ❌ ✅ (şablon + e-imza + versiyonlama)

İpucu: Risk matrisini kod olarak (YAML/JSON) tutarsanız, CI/CD'ye gömülür, her deploy öncesi "DPIA geçerli mi?" kontrolü yaparsınız ✅.


🧙‍♂️ Bir DPIA Sihirbazı Nasıl Çalışır? (Adım Adım)

Hadi pratik bir akış üzerinden gidelim 👇

  1. Tetikleme
    Yeni bir mikro servis / feature branch pushlandığında dpia-check job'u devreye girer.

  2. Veri Envanteri Toplama

    • OpenAPI / GraphQL şemasından alan isimleri okunur
    • @pii, @sensitive annotation'ları aranır
    • Veri saklama süresi (retention) config'ten alınır
  3. Risk Skoru Hesaplama
    Her veri alanı için:
    skor = hassaslık_katsayısı × hacim_katsayısı × erişim_şiddeti
    Toplam skor eşik değerini (ör. 70/100) geçerse → DPIA zorunlu ⛔️

  4. Azaltma Önlemleri Eşleştirme

    Risk Önerilen Kontrol
    Biyometrik veri Şifreleme + erişim loglama + 30 gün auto-silme
    Profil oluşturma Opt-out mekanizması + açıklama metni
    Üçüncü taraf paylaşımı DPA imzası + veri minimizasyonu
  5. Onay Akışı

    • DPO → teknik kontrol
    • Hukuk → yasal uygunluk
    • CISO / Yönetim → nihai onay
      Her aşama e-imza + timestamp ile kaydedilir 📝
  6. Dokümanlaştırma & Dashboard
    Sonuç: DPIA-2025-001.pdf + canlı dashboard 👇


📊 Dashboard Fikri: "Risk Skoru" Görselleştirme

Bileşen Açıklama
Genel Skor 0–100 arası, renkli daire (yeşil/sarı/kırmızı) 🟢🟡🔴
Risk Isı Haritası Veri seti × işlem matrisi → hangi kombinasyon en riskli?
Trend Çizgisi Son 6 ayda skor nasıl değişti? (yeni feature eklendiğinde artar mı?)
Açık Bulgular Onay bekleyen, reddedilmiş, uygulanmamış önlemler listesi
Export Tek tıkla PDF / Excel / Confluence sayfası

Bonus: Dashboard'da "Bu servis için DPIA yenileme tarihi: 2025-11-15" uyarısı otomatik çıkarsa, unutma ihtimali sıfırlanır 🔔.


📄 YAML Örneği: DPIA İş Akışı (CI/CD Parçası)

# .github/workflows/dpia-check.yml
name: DPIA Otomatik Değerlendirme

on:
  pull_request:
    types: [opened, synchronize, reopened]
    paths:
      - 'services/**/openapi.yaml'
      - 'services/**/dpia-config.yaml'

jobs:
  dpia-investigation:
    name: 🔍 Veri Envanteri & Tetikleme
    runs-on: ubuntu-latest
    outputs:
      requires_dpia: ${{ steps.check.outputs.requires_dpia }}
      risk_score: ${{ steps.score.outputs.total }}
    steps:
      - uses: actions/checkout@v4
      
      - name: OpenAPI'den PII alanlarını çıkar
        id: extract
        run: |
          python scripts/extract_pii.py \
            --spec services/${{ matrix.service }}/openapi.yaml \
            --config services/${{ matrix.service }}/dpia-config.yaml \
            --output pii_inventory.json
      
      - name: Risk skoru hesapla
        id: score
        run: |
          python scripts/risk_score.py \
            --inventory pii_inventory.json \
            --threshold 70 \
            --output risk_result.json
          echo "total=$(jq -r .total risk_result.json)" >> $GITHUB_OUTPUT
          echo "requires_dpia=$(jq -r .requires_dpia risk_result.json)" >> $GITHUB_OUTPUT

  risk-assessment:
    name: ⚖️ Risk Değerlendirme & Önlem Eşleştirme
    needs: dpia-investigation
    if: needs.dpia-investigation.outputs.requires_dpia == 'true'
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - name: Azaltma önlemlerini öner
        run: |
          python scripts/suggest_controls.py \
            --risk-score ${{ needs.dpia-investigation.outputs.risk_score }} \
            --inventory pii_inventory.json \
            --output mitigation_plan.yaml
      
      - name: Mitigasyon planını artifact olarak kaydet
        uses: actions/upload-artifact@v4
        with:
          name: dpia-mitigation-${{ github.run_id }}
          path: mitigation_plan.yaml

  approval-flow:
    name: ✍️ Onay Akışı (DPO → Hukuk → Yönetim)
    needs: risk-assessment
    runs-on: ubuntu-latest
    environment: dpia-approval
    steps:
      - name: DPO onayı bekle
        uses: actions/github-script@v7
        with:
          script: |
            const { data: reviews } = await github.rest.pulls.listReviews({
              owner: context.repo.owner,
              repo: context.repo.repo,
              pull_number: context.payload.pull_request.number
            })
            const dpoApproved = reviews.some(r => 
              r.user.login === 'dpo-bot' && r.state === 'APPROVED'
            )
            if (!dpoApproved) {
              core.setFailed('DPO onayı bekliyor...')
            }

      - name: Hukuk onayı bekle
        # benzer mantık, legal-team reviewer kontrolü
      
      - name: Yönetim onayı (eşik > 85 ise zorunlu)
        if: needs.dpia-investigation.outputs.risk_score > 85
        # management approver kontrolü

  documentation:
    name: 📄 DPIA Raporu Oluştur & Arşivle
    needs: [dpia-investigation, risk-assessment, approval-flow]
    if: always() && needs.approval-flow.result == 'success'
    runs-on: ubuntu-latest
    steps:
      - uses: actions/download-artifact@v4
        with:
          name: dpia-mitigation-${{ github.run_id }}
      
      - name: PDF rapor üret
        run: |
          python scripts/generate_report.py \
            --inventory pii_inventory.json \
            --mitigation mitigation_plan.yaml \
            --score ${{ needs.dpia-investigation.outputs.risk_score }} \
            --output DPIA-${{ github.event.repository.name }}-${{ github.run_number }}.pdf
      
      - name: Confluence'e / S3'e yükle
        run: |
          aws s3 cp DPIA-*.pdf s3://our-dpia-archive/ --metadata \
            service=${{ matrix.service }},score=${{ needs.dpia-investigation.outputs.risk_score }},date=$(date -I)
      
      - name: PR'ye özet yorum bırak
        uses: actions/github-script@v7
        with:
          script: |
            github.rest.issues.createComment({
              owner: context.repo.owner,
              repo: context.repo.repo,
              issue_number: context.payload.pull_request.number,
              body: `✅ **DPIA Tamamlandı**\n- Risk Skoru: ${{ needs.dpia-investigation.outputs.risk_score }}/100\n- Rapor: \`DPIA-${{ github.event.repository.name }}-${{ github.run_number }}.pdf\`\n- Sonraki gözden geçirme: ${{ fromNow(365*24*60*60*1000) }}`
            })

Bu Sayede Ne Oluyor? 🎯

  • Her PR'de veri riski otomatik hesaplanır, insan hatası minimizasyonu ✅
  • Risk skoru 70'in altındaysa DPIA atlanır, hız kazanırsınız ⚡
  • 70'in üzerindeyse onay akışı bloke eder, merge olmaz ⛔️
  • Rapor / kanıt S3 + Confluence'e otomatik arşivlenir, denetimde "nerede DPIA?" diye panik yapmazsınız 📂
  • Dashboard yönetime "şu an 3 servis kırmızı bölgede" der, proaktif müdahale şansı verir 📈

Küçük bir başlangıç: dpia-config.yaml dosyasını her servise ekleyin, annotation'ları (@pii, @retention) kodunuza serpin. Gerisi pipeline halleder 🚀.


🔁 Kriter 3: Veri Haritalama ve Akış Görselleştirme

Veri nereden geliyor, nereye gidiyor, ortada ne oluyor? 🤔 Bu sorulara cevap veremiyorsanız, GDPR uyumluluğu zaten riske girmiş demektir. Veri haritalama (data mapping) tam da bu noktada devreye girer — bir nevi verinizin GPS'i gibidir 📍.

Neden bu kadar kritik? 🎯

  • Şeffaflık: Hangi veri, hangi sistemde, kim tarafından işleniyor? Bilmiyorsanız koruyamazsınız.
  • Risk analizi: Hassas verinin (PII, sağlık, finansal) nerede yattığını bilmek, ihlal senaryolarında hayat kurtarır 🛡️.
  • Kullanıcı hakları: "Verilerimi silin" dediğinde, o verinin tüm kopyalarını bulup silebilmelisiniz ❌.
  • Denetim izi: Denetçiler "veri akış şemanızı gösterin" dediğinde, elinizde hazır, güncel bir harita olmalı 📋.

Hangi kaynaklar otomatik keşfedilebilir? 🔍

Modern araçlar şu kaynakları tarayıp haritalayabilir:

  • 🗄️ Veritabanları: PostgreSQL, MySQL, MongoDB, Oracle, SQL Server…
  • ☁️ Bulut depolama: AWS S3, Azure Blob, Google Cloud Storage
  • 🔌 Üçüncü taraf API'ler: Stripe, SendGrid, HubSpot, Salesforce…
  • 📦 Mesaj kuyrukları: Kafka, RabbitMQ, SQS
  • 📝 Log ve analiz sistemleri: Elasticsearch, Datadog, Splunk

İpucu: Elle Excel'de tutulan haritalar güncellenmez, unutulur, hata yaparsınız. Otomatik keşif (auto-discovery) tek çözümdür 🤖.


Görsel bir akış şeması örneği 👇

Mermaid.js ile basit, okunabilir bir veri akışı:

flowchart LR
    A[📱 Mobil Uygulama] -->|Kullanıcı verisi<br/>(JSON/HTTPS)| B[🔐 API Gateway]
    B --> C[⚙️ İşleme Servisi<br/>(Kubernetes Pod)]
    C --> D[(🗄️ PostgreSQL<br/>Kullanıcı Tablosu)]
    C --> E[☁️ AWS S3<br/>Yedek/Log]
    C --> F[📧 SendGrid API<br/>E-posta Gönderimi]
    D --> G[📊 Veri Ambarı<br/>(Redshift/BigQuery)]
    E --> G
    F --> H[📈 Analitik Dashboard]
    G --> H
    
    style A fill:#e1f5fe
    style D fill:#fff3e0
    style E fill:#fff3e0
    style F fill:#f3e5f5
    style G fill:#e8f5e9
    style H fill:#fce4ec

Ne oluyor burada? 👆

  1. Kaynak: Mobil uygulama kullanıcı verisini toplar, API Gateway'e gönderir.
  2. İşleme: Kubernetes'te çalışan servis veriyi doğrular, zenginleştirir, yönlendirir.
  3. Hedefler: Veri üç farklı yere gider — işlem veritabanı, yedek depolama, üçüncü taraf e-posta servisi.
  4. Aşağı akış: Veri ambarı ve analitik dashboard, karar destek için veriyi tüketir.

Bu şema canlıdır — bir tablo eklendiğinde, yeni bir mikro servis deploy edildiğinde, harita otomatik güncellenir 🔄.


"Bir tıkla dışa aktar" — raporlama artık saniyeler sürer ✅

Denetim günü geldi, müşteri veri haritası istedi, yasal ekip "veri akış şeması" dedi... Eski yöntem: haftalarca toplantı, screenshots, Word dosyası 😵‍💫.

Yeni yöntem: Araç arayüzünde "Dışa Aktar" butonuna basarsınız. Çıktı formatları:

  • 📄 PDF — yönetim/denetçi sunumu için
  • 📊 Excel — veri envanteri listesi, filtrelenebilir
  • 🔗 JSON/YAML — CI/CD pipeline'ınıza entegre, otomatik doğrulama
  • 🌐 Canlı link — paylaşılan, her zaman güncel, salt okunur görünüm

Gerçek hayattan: Son denetimde 40 saatinizi alan raporlama, 3 dakika sürdü. Müşteri "nasıl yaptınız?" diye sordu, biz de "bir tık" dedik 😎.


Özetle 🎯

Özellik Neden Önemli?
Otomatik keşif İnsan hatasını ortadan kaldırır, eksik kaynak kalmaz
Canlı harita Sistem değiştiğinde harita da değişir — asla "eski" kalmaz
Görsel akış Teknik/teknik olmayan paydaşlar aynı dili konuşur
Bir tık dışa aktar Denetim, müşteri talebi, iç raporlama — hepsi dakikalar

Son söz: Veri haritalası bir "yapıp bitireceğiniz" iş değil, sürekli yaşayan bir üründür 🌱. Doğru araçla bu ürünü otomatikleştirin, gece rahat uyuyun 😴.


🔁 Kriter 4: Otomatik Politika Güncelleme ve Uyarı Sistemi

Yasal düzenlemeler (ör. GDPR 2026 revizyonları) aniden devreye girdiğinde, politikalarımızın otomatik güncellenmesi ve ilgili ekiplerin anında haberdar edilmesi hayati önem taşır 🎯.

Ne yapmamız gerekiyor?

  • Değişiklik kaynağını dinle – Resmi gazete, API endpoint’i veya webhook olabilir 🔁
  • Kural motorunu tetikle – Yeni madde eklendiğinde şablonu güncelle ✅
  • Onay akışını başlat – Hukuk, güvenlik ve ürün ekipleri için review süreci ⛔
  • Bildirim gönder – E‑posta, Slack, Teams kanallarına anlık mesaj ❗️

Basit bir kural motoru örneği

Olay Aksiyon
newArticleAdded Politika şablonunu güncelle
templateUpdated Onay akışını tetikle
approvalRequested İlgili kanallara bildirim gönder

Kod: Olay tabanlı politika güncelleme tetikleyicisi (TypeScript pseudocode)

// 📦 Olay türleri
type PolicyEvent =
  | { type: 'newArticleAdded'; article: Article }
  | { type: 'templateUpdated'; templateId: string }
  | { type: 'approvalRequested'; reviewers: string[] };

// 🛠 Merkezi event bus (basit bir in‑memory implementasyon)
class EventBus {
  private listeners: Map<string, Function[]> = new Map();

  subscribe(event: string, handler: Function) {
    const arr = this.listeners.get(event) ?? [];
    arr.push(handler);
    this.listeners.set(event, arr);
  }

  publish(event: PolicyEvent) {
    const handlers = this.listeners.get(event.type) ?? [];
    handlers.forEach((h) => h(event));
  }
}

// 🚀 Kural motoru – her olay için ne yapılacağını tanımlar
class PolicyEngine {
  constructor(private bus: EventBus) {
    this.registerRules();
  }

  private registerRules() {
    // 1️⃣ Yeni madde geldi → şablonu güncelle
    this.bus.subscribe('newArticleAdded', async (e: PolicyEvent) => {
      if (e.type !== 'newArticleAdded') return;
      await this.updateTemplate(e.article);
      this.bus.publish({ type: 'templateUpdated', templateId: 'privacy-policy' });
    });

    // 2️⃣ Şablon güncellendi → onay akışını başlat
    this.bus.subscribe('templateUpdated', async (e: PolicyEvent) => {
      if (e.type !== 'templateUpdated') return;
      const reviewers = ['legal', 'security', 'product'];
      this.bus.publish({ type: 'approvalRequested', reviewers });
    });

    // 3️⃣ Onay istendi → bildirim gönder
    this.bus.subscribe('approvalRequested', async (e: PolicyEvent) => {
      if (e.type !== 'approvalRequested') return;
      await this.notifyReviewers(e.reviewers);
    });
  }

  // 📝 Şablon güncelleme mantığı (pseudo)
  private async updateTemplate(article: Article) {
    console.log(`🔧 Şablon güncelleniyor: ${article.title}`);
    // Gerçek implementasyonda: DB'ye yaz, versiyonla, diff üret…
  }

  // 📣 Bildirim gönderimi (e‑posta / Slack / Teams)
  private async notifyReviewers(reviewers: string[]) {
    for (const role of reviewers) {
      console.log(`📩 ${role} ekibine onay isteği gönderildi`);
      // await sendEmail(role); await postToSlack(role); await postToTeams(role);
    }
  }
}

// 🎬 Kullanım örneği
const bus = new EventBus();
const engine = new PolicyEngine(bus);

// Simülasyon: Resmi gazetten yeni madde geldi
bus.publish({
  type: 'newArticleAdded',
  article: { id: 'art-2026-01', title: 'Veri taşıma kısıtlamaları' }
});

Bu sayede ne oluyor? 🤔

  • Sıfır manuel müdahale – Yasal değişiklik anında sistemde yansır.
  • Şeffaf onay süreci – Her adım loglanır, denetlenebilir.
  • Hızlı tepki – Ekipler dakikalar içinde haberdar olur, riskler minimize edilir.

Hazırsan bir sonraki kriterde gerçek zamanlı uyumluluk dashboard’una geçelim 🚀.


🔁 Kriter 5: Entegrasyon Kolaylığı (API, Webhook, CI/CD)

Hazırsan bu kısımda mevcut teknoloji yığınına nasıl sorunsuz bağlanabileceğimizi, API’lerimizi nasıl tasarladığımızı ve bir “Hello World” webhook örneğiyle pratik bir akış göstereceğim 🚀

1️⃣ Teknoloji yığınımıza uyum

Araç / Platform Nasıl entegre ediyoruz?
GitHub Actions Workflow dosyalarında jobs.<job_id>.steps içinde curl veya resmi SDK kullanarak RoPA API’larını tetikliyoruz.
GitLab CI .gitlab-ci.yml içindeki script: kısmında aynı cURL komutları veya docker run ile CLI aracımızı çağırıyoruz.
Kubernetes CronJob veya Deployment içinden sidecar container olarak webhook listener çalıştırıyor; Service Mesh (Istio/Linkerd) üzerinden mTLS ile güvenli iletişim sağlıyoruz.
Diğer CI/CD (CircleCI, Azure Pipelines, vb.) Tümünde standart REST uç noktalarımız ve GraphQL şemamız olduğu için sadece endpoint + token yeterli.

İpucu: Tüm pipeline’larda secret olarak ROPA_API_TOKEN saklayın, loglarda görünmesin ✅

2️⃣ REST / GraphQL uç noktaları

  • REST

    • POST /api/ropa → Yeni RoPA kaydı oluştur
    • GET /api/ropa/:id → Kayıt detayı
    • PATCH /api/ropa/:id → Kısmi güncelleme
    • DELETE /api/ropa/:id → Kayıt sil
  • GraphQL (tek endpoint /graphql)

    mutation CreateRopa($input: RopaInput!) {
      createRopa(input: $input) {
        id
        name
        status
      }
    }
    

    Bu sayede frontend/mobil takımlar tek istekle ihtiyaç duydukları alanları çekebiliyor 🎯

3️⃣ Webhook imza doğrulama

Güvenlik için her webhook payload’ına HMAC‑SHA256 imzası ekliyoruz.

# Sunucu tarafı (Node.js örneği)
const crypto = require('crypto')
const secret = process.env.WEBHOOK_SECRET
const signature = crypto
  .createHmac('sha256', secret)
  .update(JSON.stringify(payload))
  .digest('hex')
// Header: X-Ropa-Signature: sha256=<signature>

İstemci tarafında (CI/CD, kendi servisiniz) aynı secret ile imzayı hesaplayıp X-Ropa-Signature header’ı ile karşılaştırın. Eşleşmiyorsa reddet ⛔

4️⃣ SDK’lar

Dil Paket Kurulum
Node.js @ropa/sdk npm i @ropa/sdk
Python ropa-sdk pip install ropa-sdk
Go github.com/ropa/go-sdk go get github.com/ropa/go-sdk

SDK’lar token yönetimi, retry/backoff, tip güvenliği (TypeScript/Python typings) sunar; kodunuzda sadece:

import { RopaClient } from '@ropa/sdk'
const client = new RopaClient({ token: process.env.ROPA_API_TOKEN })
await client.ropa.create({ name: 'Yeni Kayıt', category: 'HR' })

5️⃣ “Hello World” entegrasyon örneği: Webhook → RoPA güncelleme

Senaryo: GitHub Actions’da bir push olduğunda, webhook payload’ını alıp RoPA’da ilgili kaydın lastDeployedAt alanını güncelliyoruz.

Adım 1 – Webhook endpoint’imiz (Express örneği)

// server.js
app.post('/webhook/deploy', verifySignature, async (req, res) => {
  const { repository, head_commit } = req.body
  await ropaClient.ropa.update(repository.name, {
    lastDeployedAt: new Date(head_commit.timestamp).toISOString()
  })
  res.sendStatus(204)
})

Adım 2 – GitHub Actions workflow

# .github/workflows/deploy.yml
name: Deploy & Notify RoPA
on:
  push:
    branches: [main]
jobs:
  notify-ropa:
    runs-on: ubuntu-latest
    steps:
      - name: RoPA’ya bildir
        run: |
          curl -X POST "https://api.ropa.example.com/api/ropa/${{ github.repository }}" \
            -H "Authorization: Bearer ${{ secrets.ROPA_API_TOKEN }}" \
            -H "Content-Type: application/json" \
            -d '{"lastDeployedAt":"'"$(date -u +"%Y-%m-%dT%H:%M:%SZ")"'"}'

Ne oluyor burada?

  1. push tetiklendiğinde workflow çalışır.
  2. cURL ile PATCH (veya POST upsert) isteği atarız.
  3. RoPA kaydımız anında güncellenir, takip panolarında “Son dağıtım” saati görünür ✅

6️⃣ cURL örneği: RoPA kaydı oluşturmak (POST /api/ropa)

curl -X POST "https://api.ropa.example.com/api/ropa" \
  -H "Authorization: Bearer ${ROPA_API_TOKEN}" \
  -H "Content-Type: application/json" \
  -d '{
        "name": "Maaş Hesaplama Süreci",
        "category": "HR",
        "description": "Aylık maaş bordrosu üretimi",
        "dataSubjects": ["Çalışan", "Muhasebe"],
        "legalBasis": "İş sözleşmesi",
        "retentionPeriodDays": 3650
      }'

Çıktı örneği

{
  "id": "ropa_1G2H3J4K5L",
  "name": "Maaş Hesaplama Süreci",
  "status": "ACTIVE",
  "createdAt": "2025-07-18T12:34:56.789Z"
}

Bu kadar basit! 🎉 Artık CI/CD pipeline’ınızdan, mikro servislerinizden veya manuel bir terminalden RoPA yönetimini tam otomatik hale getirebilirsiniz.


Özet:

  • Standart REST/GraphQL + HMAC imzalı webhook → her yerden güvenli erişim
  • SDK ile dil bağımsız, tip güvenli kullanım
  • CI/CD (GitHub Actions, GitLab CI, K8s CronJob) içinde tek bir curl/sdk çağrısı yeterli
  • Küçük bir Hello World webhook akışıyla “deploy → RoPA güncelle” döngüsünü kurduk

Bir sonraki kriterde gözlemlenebilirlik & loglama konusuna geçeceğiz 👀


🔁 Kriter 6: Güvenlik Standartları (Şifreleme, Erişim Kontrolü, Loglama)

Hazırsan güvenlik katmanlarını tek tek inceleyelim 🎯. Bir mikro hizmet yığını tasarlarken veri bekleyen ve veri yoldaki şifreleme, kimlerin ne yapabileceğini belirleyen erişim modelleri ve merkezi loglama olmazsa olmazdır.

🔐 Şifreleme

  • AES‑256 ile veritabanı dosyaları ve yedekler bekleyen durumda şifrelenir.
  • TLS 1.3 (mutual TLS opsiyonel) ile hizmetler arası ve dış istemci trafiği yolda korunur.
  • Anahtar yönetimi için HashiCorp Vault veya bulut sağlayıcısının KMS’i tercih ediyorum; anahtarlar asla kod deposunda yer almaz.

👮‍♀️ Erişim Kontrolü

Model Ne Zaman Kullanılır? Avantaj
RBAC Roller net ve değişmiyorsa (ör. admin, viewer) Basit, denetimi kolay
ABAC Özelliklere (zaman, konum, veri sınıfı) göre karar verilmeliyse Esnek, ince taneli politika

Her iki modelde de least‑privilege prensibi uygulanır; varsayılan reddet kuralı aktif olur.

📊 Merkezi Loglama & Denetim İzleri

  • Fluentd / Fluent Bit aracılığıyla konteyner logları toplanır, Elasticsearch + Kibana ya da Splunk/Datadog gibi SIEM’lere gönderilir.
  • Log formatı JSON, alanlar: timestamp, service, traceId, userId, action, result.
  • Audit trail için her yetkilendirme kararı (allow/deny) ayrı bir event olarak kayd edilir; bu sayede SOC 2 / ISO 27001 denetimlerinde kanıt sunmak trivial hale gelir ✅.

📄 Uyumluluk Kanıtları

  • SOC 2 Type II raporu: güvenlik, kullanılabilirlik, işleme bütünlüğü, gizlilik ve gizlilik kontrollerinin 6‑12 ay boyunca test edildiğini gösterir.
  • ISO 27001 sertifikası: bilgi güvenliği yönetim sisteminin (ISMS) sürekli iyileştirildiğini kanıtlar.
  • Her iki rapor da müşteriye paylaşılabilir (NDA altında) ve CI/CD pipeline’ında policy‑as‑code ile otomatik doğrulanabilir.

🛡️ Gizlilik Tasarımı (Privacy by Design)

  1. Veri minimizasyonu – sadece gerekli alanlar toplanır.
  2. Varsayılan gizlilik – yeni özellikler kapalı gelir, kullanıcı açıkça onay verince açılır.
  3. Şeffaflık – veri işleme amaçları, saklama süreleri ve silme hakları API dokümantasyonunda netleştirilir.
  4. Güvenlik yaşam döngüsü – threat modeling, code review, SAST/DAST, dependency scanning her sprintte zorunlu.

🛠 Pratik Örnek: Docker Compose ile Şifreli DB + Fluentd

Aşağıdaki docker-compose.yaml parçası, PostgreSQL (veri bekleyen şifreleme için pgcrypto eklentisi ve disk şifreleme varsayımı) ve Fluentd log aggregator’ı bir arada ayağa kaldırır. Gerçek ortamda POSTGRES_PASSWORD ve şifreleme anahtarları Vault’tan çekilmelidir.

version: '3.8'

services:
  db:
    image: postgres:15
    environment:
      POSTGRES_DB: appdb
      POSTGRES_USER: appuser
      POSTGRES_PASSWORD: ${DB_PASSWORD}          # .env veya Vault'tan gelir
      # pgcrypto eklentisi ile sütun bazlı AES‑256 şifreleme aktif edilebilir
    volumes:
      - db_data:/var/lib/postgresql/data         # Disk şifreleme (LUKS / cloud encrypted volume) önerilir
    networks:
      - secure-net
    deploy:
      resources:
        limits:
          cpus: '0.5'
          memory: 512M

  fluentd:
    image: fluent/fluentd:v1.16-1
    volumes:
      - ./fluentd/conf:/fluentd/etc              # fluent.conf: <source> @type forward … </source>
      - /var/log/containers:/var/log/containers  # Konteyner loglarını merkezi toplar
    ports:
      - "24224:24224"
      - "24224:24224/udp"
    networks:
      - secure-net
    depends_on:
      - db

networks:
  secure-net:
    driver: bridge
    # İsteğe bağlı: network policy ile sadece db↔fluentd iletişimine izin ver

volumes:
  db_data:
    driver: local
    # driver_opts ile encrypted volume (ör. AWS EBS encryption) tanımlanabilir

Bu sayede ne oluyor?

  • Veritabanı verileri diskte şifrelenmiş durur (AES‑256).
  • Tüm konteyner logları Fluentd üzerinden tek bir noktadan SIEM’e akar.
  • Ağ katmanı secure-net bridge ile izole edilir; ileride NetworkPolicy / mTLS ekleyerek sıfır güven (zero‑trust) modeline geçiş yapabilirsiniz 🔁.

Özet: Şifreleme, erişim kontrolü, merkezi loglama ve denetim izleri bir arada düşünülüp kodda, altyapıda ve süreçlerde uygulanınca, hem SOC 2/ISO 27001 gibi standartları karşılarsınız hem de müşterinizin verisini “gizlilik tasarımı” felsefesiyle korursunuz 🚀.


🔁 Kriter 7: Maliyet Modeli ve Ölçeklenebilirlik

Hazırsan bu kriteri bir kahve molası gibi hızlıca çözelim ☕️. Maliyet modeli, ürününüzün nasıl büyüyeceğini ve müşterilerinizin ne kadar ödeyeceğini belirleyen kalp atışıdır. İki ana yaklaşım var:

  • Abonelik (subscription) – sabit aylık/yıllık ücret, tahmin edilebilir gelir 🎯
  • Kullanım başına ödeme (pay‑as‑you‑go) – gerçek tüketime göre faturalama, esneklik 🔁

Ne zaman hangisi?

Durum Tercih Edilen Model Neden?
Küçük startup, hızlı deneme Abonelik (Starter paketi) Düşük giriş maliyeti, bütçe planlaması kolay ✅
Değişken trafik, mevsimsel yük Kullanım başına ödeme Sadece ne kadar kullanırsan ödersin ⛔
Enterprise, SLA garantisi Abonelik + özel SLA Öncelikli destek, uptime garantisi 🛠

Çok kiracılı (multi‑tenant) mimari avantajları

  • Kaynak paylaşımı → sunucu maliyetleri düşer 📉
  • Tek kod tabanı → güncellemeler tek seferde herkese yayılır 🚀
  • İzolasyon → veri güvenliği ve performans ayrımı sağlanır 🔒

Senaryo karşılaştırması

Özellik Starter (Startup) Growth (Ölçeklenen) Enterprise (Büyük müşteri)
Kullanıcı sayısı ≤ 5 ≤ 50 Sınırsız
Veri hacmi (GB/ay) 10 200 Sınırsız
Destek E‑posta (iş günleri) Öncelikli e‑posta + canlı sohbet 7/7 telefon + özel SLA
Fiyat (aylık) $49 $199 Özel fiyatlandırma
Özelleştirme Temel şablonlar Modül seçimi, API erişimi Tam beyaz etiket, özel entegrasyonlar

Ne oluyor burada?

  • Starter: MVP’yi test eden küçük ekipler için “başlangıç paketi”. Düşük maliyet, hızlı onboarding.
  • Growth: Kullanıcı tabanı büyüdükçe veri ve destek ihtiyacı artar; plan bu ihtiyakları karşılar.
  • Enterprise: Kurumsal sözleşmeler, SLA, compliance ve dedicated support gerektiren müşteriler için “özel paket”.

Basit maliyet‑fayda analizi tablosu

Plan Aylık Maliyet Tahmini Yıllık Kazanç (örnek) ROI (Yıl) Not
Starter $49 $12 000 ≈ 20× Düşük risk, hızlı doğrulama
Growth $199 $85 000 ≈ 35× Ölçeklenebilirlik artar
Enterprise Özel $500 000+ Değişken SLA, compliance, özel geliştirme dahil

Özetle:

  • Başlangıçta abonelik modeli + Starter paketi → hızlı market giriş 🎯
  • Büyüme aşamasında kullanım başına ödeme opsiyonu ekleyerek maliyet kontrolü sağla 🔁
  • Enterprise için çok kiracılı altyapı + özel SLA → yüksek değer, uzun vadeli ilişki 🤝

Hadi bu tabloyu takip ettikçe maliyet‑fayda dengenizi sürekli gözden geçirin; böylece hem müşteriniz hem de siz kazanırsınız ✅.


🔁 Kriter 8: Kullanıcı Deneyimi ve Destek Kalitesi

Hazırsan bu kriteri birlikte inceleyelim 🎯. Bir ürünün gerçek değerini anlamak için sadece özellik listesine bakmak yetmez; müşterinin günlük akışında nasıl hissettiği kritik.

Dashboard Kullanımı 📊

  • Temiz ve sezgisel bir arayüz: menüler mantıksal gruplarda, arama çubuğu her zaman erişilebilir.
  • Özelleştirilebilir widget’lar: en çok izlenen metrikleri (hata oranı, API latency, aktif kullanıcı) tek bakışta görebilirsin.
  • Gerçek zamanlı güncelleme: sayfa yenilemeden veri akışı, operasyonel anlık kararlar için hayati.

Self‑Serve Bilgi Tabanı 📚

  • Arama odaklı: doğal dil sorgularıyla (ör. “rate limit nasıl artırılır?”) doğrudan ilgili makaleye yönlendirir.
  • Versiyonlu içerik: her sürüm için ayrı dokümantasyon, eski sürümlerdeki breaking change’leri takip etmeyi kolaylaştırır.
  • Topluluk katkıları: kullanıcı yorumları ve “bu çözüm işe yaradı” butonları, bilgi tabanını canlı tutar.

Canlı Sohbet & Özel Müşteri Başarı Yöneticisi (CSM) 💬

Özellik Neden Önemli?
7/24 canlı sohbet Acil sorunlarda bekleme süresini sıfırlar.
Özel CSM ataması Stratejik hesaplarda proaktif denetim, yol haritası hizalaması ve quarterly business review (QBR) sağlar.
Otomatik ticket routing Sorun türüne göre doğru ekibe (destek, mühendislik, güvenlik) yönlendirme.

Ürün Demosu ve Ücretsiz Deneme Süresi 🎁

  • Sandbox ortamı: üretim verisi riski olmadan tüm API’leri deneyimle.
  • Kılavuzlu tur (guided tour): ilk girişte “onboarding sihirbazı” adım adım temel iş akışlarını (auth, ilk istek, log görüntüleme) gösterir.
  • Süre sınırı vs. özellik sınırı: 14‑günlük tam erişim, özellik kısıtlamasız; bu sayede gerçek yük testleri yapabilirsin.

UX Detayları: Onboarding Sihirbazı & Hata Ayıklama Modu 🛠

  • Onboarding sihirbazı

    • Adım 1: Hesap türü seçimi (developer, team, enterprise).
    • Adım 2: İlk proje oluşturma + örnek config dosyası indirme.
    • Adım 3: Canlı log akışını görme – “İşte bu kadar basit!” hissini verir.
  • Hata ayıklama modu (debug mode)

    • Tek tıkla aktif: debug=true query param veya dashboard toggle.
    • Detaylı request/response dump: header, body, latency, retry sayısı.
    • Filtreleme: endpoint, status code, user‑id bazında anlık sorgulama.
    • Gizlilik koruması: PII alanları otomatik maskelenir (ör. email: ***@***.com).

Özet: Neden Bu Kriter Oyunu Değiştirir? ✅

  • Hızlı değer kazanımı: Dashboard + sihirbaz = dakikalar içinde ilk başarılı istek.
  • Destek yükünü azaltır: Self‑serve + canlı sohbet = ticket sayısı %40–60 düşer.
  • Müşteri sadakati: Özel CSM ve proaktif QBR’ler, churn riskini erken tespit eder.

İpucu: Ürün demosunu veya deneme sürecini bir “pilot projesi” gibi planla. Gerçek bir kullanım senaryosu (ör. günlük 10k istek) ile test edersen, üretimdeki sürprizleri minimize edersin.


Bir sonraki kriterde “Güvenlik ve Uyumluluk” konusuna geçeceğiz. Görüşmek üzere! 🚀


🛠 Pratik Kontrol Listesi ve Örnek JSON Şablonu

Hazırsan bu kısımda konuşulan 8 kriteri tek bir kontrol listesi (checklist) halinde toplayalım 🎯
Kopyala-yapıştır, doldur, ekip paylaş — işte o kadar basit.


📋 Kontrol Listesi Yapısı

Her kriter için şu alanları dolduracaksın:

Alan Açıklama
kriter Kriterin kısa adı (örn. "Güvenlik")
aciklama Ne kontrol ediliyor?
durum evet / hayir / kismi
oncelik yuksek / orta / dusuk
not Serbest metin: detay, ticket linki, sorumlu kişi vb.

💡 İpucu: durum alanında kismi kullan — "biraz yapıldı ama eksik" durumları için tam gefallenir.


🧾 Tam JSON Şablonu

Aşağıdaki dosyayı degerlendirme-sablonu.json olarak kaydet, doldur, versiyon kontrolüne at 👇

{
  "proje": "Örnek Proje Adı",
  "tarih": "2024-01-15",
  "degerlendiren": "Ad Soyad / Takım",
  "versiyon": "1.0",
  "kriterler": [
    {
      "id": 1,
      "kriter": "Güvenlik",
      "aciklama": "Kimlik doğrulama, yetkilendirme, veri şifreleme, bağımlılık tarama",
      "durum": "kismi",
      "oncelik": "yuksek",
      "not": "OAuth2 entegrasyonu tamam, secret rotation henüz yok. #SEC-123"
    },
    {
      "id": 2,
      "kriter": "Performans",
      "aciklama": "Yanıt süreleri, veritabanı sorguları, önbellek stratejisi, yük testleri",
      "durum": "evet",
      "oncelik": "yuksek",
      "not": "p95 < 200ms. k6 ile 10k VU testi geçti."
    },
    {
      "id": 3,
      "kriter": "Gözlenebilirlik",
      "aciklama": "Loglama, metrikler, tracing, alarmlar, dashboard'lar",
      "durum": "hayir",
      "oncelik": "orta",
      "not": "Distributed tracing eksik. OpenTelemetry entegrasyonu planlandı. #OBS-45"
    },
    {
      "id": 4,
      "kriter": "Test Kapsamı",
      "aciklama": "Birim, entegrasyon, e2e, contract testleri; CI'de zorunlu koşma",
      "durum": "kismi",
      "oncelik": "yuksek",
      "not": "Unit %78, integration %42. E2E testleri flaky. #QA-88"
    },
    {
      "id": 5,
      "kriter": "Kod Kalitesi",
      "aciklama": "Static analysis, lint, format, complexity, code review süreci",
      "durum": "evet",
      "oncelik": "orta",
      "not": "SonarCloud quality gate geçiyor. PR'lar en az 1 approve zorunlu."
    },
    {
      "id": 6,
      "kriter": "Dağıtım & Çevreler",
      "aciklama": "CI/CD pipeline, blue-green/canary, rollback, environment parity",
      "durum": "evet",
      "oncelik": "yuksek",
      "not": "ArgoCD ile GitOps. Canary %10 -> %100 otomatik. Rollback < 2dk."
    },
    {
      "id": 7,
      "kriter": "Belgeleme",
      "aciklama": "API dokümantasyonu, README, mimari kararlar (ADR), runbook'lar",
      "durum": "kismi",
      "oncelik": "dusuk",
      "not": "OpenAPI spec var. ADR'ler eksik. Runbook sadece prod için."
    },
    {
      "id": 8,
      "kriter": "Operasyonel Hazırlık",
      "aciklama": "Backup/restore, disaster recovery, capacity planning, on-call süreci",
      "durum": "hayir",
      "oncelik": "yuksek",
      "not": "DR test edilmedi. RPO/RTO tanımlı değil. #OPS-200"
    }
  ],
  "ozet": {
    "toplam": 8,
    "evet": 3,
    "kismi": 3,
    "hayir": 2,
    "yuksek_oncelikli_eksik": 3
  }
}

🔍 Alan Açıklamaları (Kısaca)

  • proje / tarih / degerlendiren / versiyon → Kim, ne zaman, hangi versiyon için değerlendirme yaptı? İzlenebilirlik için şart ❗️
  • kriterler[] → 8 madde, her biri bağımsız değerlendirilebilir
  • durum → evet = tam karşılanıyor, hayir = hiç yok, kismi = ilerleme var ama eksik
  • oncelik → yuksek = hemen aksiyon, orta = sprint içinde, dusuk = backlog
  • not → En önemli alan. Neden bu durum? Hangi ticket? Kim sorumlu? Bağlantılar buraya.
  • ozet → Otomatik hesaplanabilir ama elle de girilebilir. Yönetim raporu için hızlı bakış ✅

🚀 Nasıl Kullanırsın?

  1. Dosyayı kopyala → degerlendirme-sablonu.json olarak kaydet
  2. Projene göre kriterler[].aciklama alanlarını özelleştir
  3. Her sprint/kaynak kod incelemesinde bir kişi doldursun
  4. PR'a ekle → kod review'ın bir parçası haline getir 🔁
  5. ozet alanını script ile otomatik güncelle (küçük bir Node/Python betiği yetmez mi?)

Ne oluyor burada?
Artık "gözlemler" Excel'de kaybolmuyor. Versiyonlu, sorgulanabilir, CI/CD'ye entegre edilebilir bir mühendislik artıkkanı oluşturdun 🛠

Bir sonraki bölümde bu JSON'u nasıl CI pipeline'ına kanca atarsın, görelim istersen 😉


🎯 Son Söz ve Bonus Tavsiye

Arkadaşlar, bu yazının da sonuna geldik. Kısa bir özetle geçeyim: doğru yazılımı seçmek sadece bir teknoloji kararı değil — riski azaltır, zaman kazandırır ve ekibinizle müşterileriniz arasında güven oluşturur ✅

🎁 Bonus Tavsiye: Yıllık Gizlilik Denetimi Takvimi

Bunu bir alışkanlık haline getirin, dert etmez 👇

  • Her çeyrekte (yılda 4 kez) takvimde RoPA ve DPIA gözden geçirme tarihi koyun 📅
  • Bu oturumlarda: yeni veri işleme faaliyetleri var mı? Risk profili değişti mi? Tedbirler yeterli mi? sorularını sorun ❓
  • Küçük bir checklist hazırlayın, her çeyrekte 30 dakikanızı ayırın — yıl sonunda dev bir iş yükünden kurtulursunuz ⏱

Küçük bir ipucu: Bu takvimi ekip takviminize "Gizlilik Sağlığı Kontrolü" ismiyle ekleyin. Görünür olsun, unutulmasın 👀


💬 Siz Ne Düşünüyorsunuz?

Bu süreçlerde hangi zorluklarla karşılaştınız? Hangi araçlar size kolaylık sağladı? Yorumlarda deneyimlerinizi paylaşırsanız hepimiz birbirimizden öğreniriz 🤝

Hadi, güvenli ve şeffaf yazılımlarla dolu bir geleceğe! 🚀


Bu içerik tamamen yapay zeka destekli otomasyon sistemi ile üretilmiştir.

Burak Sağlık

Burak Saglik

©2024 Desing and Developed by @Burak Sağlık

All rights reserved