GitOps yaklaşımı (Argo CD, Flux) Kubernetes deployment’larının baskın standardı haline geldi. CNCF 2026 Annual Survey’e göre üretim K8s ortamlarının %73’ü GitOps mimarisi ile yönetiliyor. Buna karşın secret yönetimi GitOps’un en sancılı tarafı: API anahtarı, DB şifresi, certificate hiçbir zaman düz metinle Git’e gönderilmemeli, ama yine de declaratively yönetilmeli. 2026 itibarıyla orta-büyük şirketlerin %41’i hâlâ “manuel kubectl create secret” akışını kullanıyor — bu çelişki güvenlik açığına ve dağıtım gecikmelerine yol açıyor. Aynı zamanda supply chain saldırıları (xz-utils 2024 olayı, npm package’ları) sonrası secret rotation otomasyonu artık zorunlu bir gereksinim haline geldi.
Bu rehberde modern GitOps secret yönetimi pratiklerini (Sealed Secrets, SOPS+Age, External Secrets Operator, Vault Agent) somut sayılarla aktarıyoruz. Hedef kitle: Platform engineering ekipleri, DevSecOps mühendisleri ve K8s ortamında secret rotation/audit gereksinimi olan kurumlar.
Üç Ana Yaklaşım
1. Sealed Secrets (Bitnami)
- Public key ile encrypt edilmiş Secret YAML’ı Git’e commit edebilir.
- Cluster’da private key ile decrypt → standart Kubernetes Secret.
- Avantaj: basit, klaster-ye sıkı bağlı (private key sadece klaster’de).
- Dezavantaj: secret rotation manuel, multi-cluster zor.
- Backup zorunlu: master key kaybolursa tüm sealed secret’lar geri alınamaz.
2. SOPS + Age / KMS
- Mozilla SOPS — YAML/JSON içinde belirli alanları encrypt eder.
- Anahtar yönetimi: Age (modern), GPG, AWS KMS, GCP KMS, Azure Key Vault.
- Avantaj: GitOps friendly, multi-developer flow.
- Dezavantaj: anahtar yönetimi karmaşık olabilir.
- Pratik: Age + GitHub team key rotation, KMS audit log.
3. External Secrets Operator (ESO)
- Vault / AWS Secrets / GCP Secret Manager / Azure Key Vault’tan secret çek.
- Git’te sadece “reference” (SecretStore + ExternalSecret CRD).
- Otomatik sync (periodic refresh), rotation otomatik.
- Avantaj: enterprise grade, audit log, RBAC.
- Dezavantaj: external dependency (Vault down → cluster Pod restart fail).
Karşılaştırma Tablosu
| Yöntem | Best for | Rotation | Multi-cluster |
|---|---|---|---|
| Sealed Secrets | Tek cluster, basit setup | Manuel | Zor |
| SOPS + Age | Multi-developer, mid-scale | Manuel/scripted | İyi |
| SOPS + KMS | Cloud-native, audit log | Manual | İyi |
| External Secrets Operator | Enterprise, dynamic secrets | Otomatik | Mükemmel |
| Vault Agent Sidecar | Hassas workload, JWT auth | Otomatik | İyi |

Üretim Pattern: ESO + Vault
- Vault’a secret yazılır (manual veya CI).
- Kubernetes ServiceAccount ile Vault auth (Kubernetes Auth Method).
- ExternalSecret CRD: “Vault’taki app-prod/db-password’u my-secret olarak sync et”.
- ESO periyodik (default 1h) Vault’tan çeker, Secret CRD’yi günceller.
- Pod normal Secret mount edip kullanır.
- Rotation: Vault’ta yenilenir → ESO sync eder → Pod restart (opsiyonel).
Dynamic Secrets (Vault)
- Vault DB connection için on-demand kısa-ömürlü user üretir.
- Application başlarken Vault’tan user/pass alır.
- TTL bitince Vault otomatik siler.
- “Sızdırılmış password” gibi bir kavram kalmıyor (1 saat sonra ölü).
- Supported: PostgreSQL, MySQL, Cassandra, MongoDB, AWS IAM, vb.
Dynamic secrets, PAM ve JIT access mimarisi ile birleştirildiğinde “zero standing privilege” hedefine en yakın yapıyı kurar. Bu kombinasyon BDDK ve SOC 2 audit’lerinde “kalıcı admin credential yok” kontrolünü direkt karşılar.

Cloud Native Workload Identity
- AWS IRSA (IAM Roles for Service Accounts): EKS pod’ları IAM role assume eder.
- GCP Workload Identity: GKE pod → GCP service account.
- Azure AD Workload Identity: AKS pod → Azure AD.
- Avantaj: Cloud SDK içinde “sıfır secret” — credential dosyası yok.
- Best for: cloud-native uygulama, AWS/GCP/Azure SDK kullanımı.
Performans ve Operasyon
- Sealed Secrets sync: < 5 saniye.
- SOPS decryption: < 1 saniye.
- ESO refresh interval: default 1h (ayarlanabilir).
- Vault availability: SLO %99,99 hedefli (kendi cluster).
- Rotation cadence: API key 30 gün, DB password 90 gün, certificate 1 yıl.

Yaygın Hatalar
- Vault tek node — DR yok.
- SealedSecret backup yapılmamış (yeniden encrypt edemezsin).
- ESO refresh fail durumunda alarm yok.
- Secret rotation policy tanımsız.
- Pod restart yok → eski secret’la çalışmaya devam.
- SOPS Age key’i .ssh klasöründe paylaşılmamış backup ile — laptop kaybı = secret kaybı.
- “Plaintext secret değer yorum satırı olarak Git history’de” anti-pattern (rebase ile silinmediyse hâlâ orada).










Ömer ÖNAL
Mayıs 17, 2026Türkiye’de GitOps secret yönetimi danışmanlığı verdiğim projelerde en sık karşılaştığım hata, Sealed Secrets’a sımsıkı bağlanmak ve master key backup’ını “yarın yaparız” diye ertelemek. 6 ay sonra master key kaybolduğunda tüm sealed secret’lar resetlenmek zorunda kalıyor — production downtime demek. Doğru sıralama önce master key immutable backup, sonra ESO + Vault geçiş planı. Dynamic secrets bence en az anlaşılan ama en güçlü pratik — production DB’ye kalıcı user vermek 2026’da artık kabul edilmemeli, her uygulama 1-2 saatlik kullan-at credential ile çalışmalı. Bir diğer kritik nokta: Argo CD ile ESO entegrasyonunda generated Secret’in diff’te görünmemesi için `compare-options: IgnoreExtraneous` annotation şart, yoksa sync sürekli “out of sync” gösterir. Multi-cluster büyüdüğünüzde Sealed Secrets sürdürülemez hale gelir, 3-4 aylık migration project planlamak gerekir. Sizin cluster’ınızda şu an secret rotation cadence nasıl — manuel mi semi-automated mi, yoksa 1+ yıllık dokunulmamış API key’ler var mı?