Blog
Mert Özen'in yazılım geliştirme, backend, frontend ve DevOps üzerine blog yazıları.
Kubernetes Güvenliği: ServiceAccount, RBAC, Pod Security Standards, securityContext ve NetworkPolicy
Her uygulamaya kendi ServiceAccount'unu ver, gerekmiyorsa token'ı mount etme, namespace'i restricted Pod Security Standards ile koru ve default deny NetworkPolicy'den sonra yalnız gereken yolları aç. RBAC'i kubectl auth can-i ile test etmeyi, aspnet:10.0 image'ının root çalışmasını, readOnlyRootFilesystem'ın .NET Data Protection'a etkisini, user namespace'leri ve DNS'i unutan default deny'ı gerçek kind çıktılarıyla görüyoruz.
Jenkins Credentials: withCredentials, Credential Binding ve Groovy String Interpolation Tuzağı
Secret'ı credentials() veya withCredentials ile en dar scope'ta açar, sh adımında tek tırnakla shell değişkeni olarak okursun; çift tırnakla Groovy interpolation process'e sızdırır. Credential türleri ve SYSTEM/GLOBAL/folder scope'ları, JCasC'de readFile, masking'in base64'ü yakalayıp parçayı kaçırması, sshagent, folder credential ile ekip izolasyonu ve harici secret store'lar.
Jenkins Kurulumu: Docker ile LTS, Java 21, İlk Admin ve Plugin Seçimi
Jenkins'i Docker'da sürümü sabit bir LTS image'ı, isimli bir JENKINS_HOME volume'ü ve Java 21 ile kurarsın; setup wizard'ı plugins.txt ve JCasC ile atlarsın. Anonim volume tuzağı, initialAdminPassword, Docker-in-Docker'ın TLS sertifika hatası, anonymous erişim, controller'da sıfır executor, CSRF crumb'ı, agent → controller security ve Linux paketiyle kurulum.
Nginx'te HTTPS, Security Header'ları, Rate Limiting ve Load Balancing
Nginx'te TLS termination, http2 on ve listen quic ile HTTP/3, add_header_inherit merge ile kaybolmayan security header'ları, tek yerden HSTS, limit_req ile 429 ve upstream zone'u olmadan round robin'in dengesiz dağıldığı gerçek koşularla. ip_hash, 1.29.6 ile gelen sticky cookie ve max_fails ile passive health check: bir instance ölünce client tek hata görmüyor, ama idempotent olmayan istekler ve sağlıksız ama ayakta process'ler ayrı ele alınmalı.
Reverse Proxy Arkasında ASP.NET Core: Forwarded Headers, KnownIPNetworks ve Doğru Client IP
Proxy arkasındaki uygulama client'ın IP'sini ve HTTPS'i ancak UseForwardedHeaders doğru kurulursa görür: hangi header'ların işleneceğini söylemek ve proxy'nin adresini KnownProxies ya da .NET 10'daki KnownIPNetworks'e eklemek gerekir. HTTPS redirection döngüsünü, ASPDEPR005 uyarısını, ForwardLimit ile sahte X-Forwarded-For'u, X-Forwarded-Prefix ile PathBase'i ve birden fazla instance'ta Data Protection key'lerini gerçek koşularla görüyoruz.
GitHub Actions Güvenliği: SHA Pinning, Lockfile, pull_request_target ve Script Injection'dan Korunmak
Action'ları tam commit SHA'sına pin'le ve Dependabot/lockfile ile güncel tut, untrusted değerleri run: içine değil env: üzerinden ver, pull_request_target'ta PR kodu çalıştırma. tj-actions vakası, zizmor ve actionlint bulguları, gh actions-lock, act ile gerçek script injection çıktısı, checkout@v7 ve 2 Aralık 2026 değişikliği, güvenli workflow_run pattern'i ve read-only cache token'ları.
GitHub Actions'ta Secret, Variable ve GITHUB_TOKEN Permission'ları
Secret'lar organization, repository ve environment seviyesinde tanımlanır, en dar seviye kazanır ve log'da metin eşleştirmesiyle maskelenir; base64 gibi türetilmiş değerler ve JSON içinden okunan alanlar maskelenmez. act ile sahte secret'larla ::add-mask::, if içinde secret kullanımı, variable'lar ve boş GITHUB_TOKEN'ı gösteriyor; permissions ile least privilege'ı, Eylül 2026'da gelen vulnerability-alerts scope'unu ve PAT yerine GitHub App token'ını anlatıyoruz.
Pipeline Güvenliği ve Secret'lar: Least Privilege, Kısa Ömürlü Credential ve Supply Chain
Pipeline production anahtarlarına sahip en güçlü kullanıcıdır; secret'ları store'da tutmak, job başına least privilege, uzun ömürlü cloud key'leri yerine OIDC ile kısa ömürlü token ve action'ları commit SHA'sına pin'lemek riskin büyük kısmını kapatır. Base64'e çevrilen secret'ın maskelemeden kaçtığı gerçek act çıktısı, actionlint'in yakaladığı script injection, fork PR riskleri ve SLSA v1.2 ile SBOM'a kısa bakış.
Log'larda Hassas Veri: Redaction, Data Classification ve KVKK'ya Uygun Logging
Hassas veriyi log'dan uzak tutmanın yolu onu sınıflandırıp logging pipeline'ında otomatik maskelemektir. Microsoft.Extensions.Compliance.Redaction ile taxonomy ve attribute'lar, [LogProperties], ErasingRedactor, kendi redactor'ın ve korelasyonu koruyan HMAC redactor'ı; Serilog'da destructuring ile maskeleme, exception message'ındaki kişisel veri ve bunu yakalayan bir FakeLogger testi gerçek çıktılarla.
ASP.NET Core Web API'de CORS ve Güvenlik: HTTPS, HSTS, Header'lar ve Secret'lar
CORS'un neden güvenlik duvarı olmadığını curl ile görüyor, policy tanımlayıp preflight isteğini okuyoruz. HTTPS redirection, HSTS'in localhost istisnası, güvenlik header'ları ve user secrets da var.
ASP.NET Core Web API'de Authorization: Roller, Policy'ler ve Resource-Based Yetkilendirme
[Authorize] ve FallbackPolicy ile başlayıp rollere, policy'lere, kendi requirement ve handler'ımıza ve resource-based authorization'a geçiyoruz. RoleClaimType tuzağını ve 401 ile 403 farkını curl ile görüyoruz.
ASP.NET Core Web API'de JWT ile Authentication: Token Üretmek ve Doğrulamak
Authentication ile authorization farkından JWT'nin anatomisine, AddJwtBearer kurulumundan JsonWebTokenHandler ile token üretmeye kadar login akışını kuruyoruz. ClockSkew, claim mapping ve refresh token fikri de var.