Secret Scanning ve Push Protection
Secret Scanning & Push Protection
Bu derste neler öğreneceksin
- Secret scanning'in nasıl çalıştığını açıklamak
- Push protection ile secret'ların commit'e girmesini önlemeyi anlamak
- Custom pattern tanımlama ve alert yönetimini bilmek
Secret scanning, GitHub Advanced Security (GHAS) özelliğidir ve commitlere sızan API anahtarları, token’lar ve parolaları tespit eder. Push protection ise bu tespiti commit öncesinde yapar.
Secret Scanning Nasıl Çalışır?
GitHub, 200’den fazla partner ile anlaşma yaparak token formatlarını tanır (Google API key, AWS Access Key, GitHub PAT, vb.):
- Bir commit veya push yapıldığında içerik taranır
- Bilinen token deseniyle eşleşme varsa alert oluşturulur
- Partner token’ları için otomatik revocation başlatılır (örn. GitHub PAT)
- Repo admin ve güvenlik ekibi bilgilendirilir
Push Protection
Push protection, secret içeren commit’in repo’ya ulaşmadan önce engellenmesini sağlar:
Geliştirici git push yapar
→ GitHub push içeriğini tarar
→ Secret tespit edilirse push BLOKLANIR
→ Geliştirici uyarı alır ve seçenekler sunulur:
- Secret'ı kaldır ve yeniden push yap
- Bypass et (gerekçe gir — audit log'a yazılır)
Push protection etkinleştirme:
Repository → Settings → Security & analysis → Push protection → Enable
Org veya enterprise düzeyinde toplu etkinleştirme:
Organization → Settings → Code security and analysis → Push protection
Custom Pattern
GitHub’ın tanımadığı dahili token formatları için custom pattern eklenebilir:
Organization → Settings → Code security → Custom patterns
→ New pattern → Regex tanımla
Örnek: Dahili servis anahtarı formatı MYAPP-[A-Z0-9]{32} için custom pattern.
Secret Scanning Alertleri
Alert geldiğinde yapılacaklar:
- Token’ı hemen revoke et (gecikme ciddi risk)
- Yeni token oluştur ve uygulamaya dağıt
- Commit geçmişini temizle (
git filter-repoile — bu önemli!) - Commit geçmişi temizlenmezse token’ı bilen biri geçmişten alabilir
“Secret revoke ettim, yeterli mi?” — Yanıt: Hayır. Git geçmişinde kalmaya devam eder.
git filter-repoveyagit-filter-branchile tarihten silinmeli, sonra force push yapılmalı.