Sırlar — Parola Git'e Girerse Ne Olur?
Önce şunu oku: Docker Katman Cache ve İmaj Boyutu
30 saniyede özet
Bir API anahtarı ya da veritabanı parolası Git'e, imaja ya da loga girerse oradan kolay kolay çıkmaz. Sırlar çalışma anında, bir sır deposundan verilmeli; sızan bir sır silinmez, değiştirilir.
Evin yedek anahtarını paspasın altına koyuyorsun, çünkü kolay. Paspası kaldıran herkes kapıyı açabilir. Anahtarı sonra oradan alsan bile, o arada kopyasını çıkaran olmuş olabilir.
-
Bayt: Kart ağının API anahtarını application-prod.yml'e yazdım. Her şey tek yerde, ne güzel!
-
Sen: Bu depo dış ekiple de paylaşılıyor. Anahtarı onlar da görüyor.
-
Bayt: Hemen siliyorum... tamam, sildim ve commit'ledim.
-
Bayt: Ama Git geçmişi hatırlıyor. Silmek yetmez; anahtarın kendisini değiştirmek gerek.
Sır nerede yaşamamalı?
Bir sır kodun yanındaki bir ayar dosyasına yazılınca Git’e girer. Git her değişikliği saklar; dosyayı silmek yalnızca son hâli değiştirir, geçmişteki kopya yerinde kalır.
Docker imajı da benzerdir. Build sırasında verilen bir sır imajın katmanlarında kalır ve imajı çeken herkes onu okuyabilir.
Kafam karıştı, daha basit anlat
Git geçmişi ve imaj katmanları unutmaz. Sır oraya bir kez girdiyse, artık sızmıştır.
Bir parolayı application-prod.yml'e yazıp Git'e commit'lemenin sorunu nedir?
Parolayı içeren dosyayı silip yeniden commit'ledin. Parola artık güvende mi?
Çalışırken, bir depodan
Anahtar bir ortam değişkeni olarak veriliyor. Bir geliştirici hata ayıklamak için açılışta bütün ortam değişkenlerini loga yazdırdı. Anahtar nereye gider? Cevabı göster
Log toplayıcıya, düz metin olarak. Ortam değişkenleri süreç içinde herkese açıktır; loglara, hata raporlarına ve alt süreçlere kolayca sızar.
Adım adım oku
- Paspasın altındaki anahtar: kaldıran alır.
- Her plan kopyasına yapıştırılmış anahtar.
- Kapıdaki anahtar kutusu: doğru kişiye, o an.
- Sır, kullanılacağı anda verilir.
En sağlam yol bir sır deposuParola, anahtar ve token gibi sırları saklayan ve uygulamaya çalışırken veren sistem; örneğin Vault ya da Kubernetes sırları.Sözlükte gör →dur: Vault ya da Kubernetes’in sırları gibi. Uygulama sırrı çalışırken, örneğin bağlanmış bir dosyadan okur; sır ne kodda ne imajda ne de ortam değişkenlerinde durur.
Bir sır sızarsa yapılacak tek doğru şey sır rotasyonuBir sırrı yenisiyle değiştirip eskisini geçersiz kılmak. Sızan bir sırrı güvenli hâle getirmenin tek yolu.Sözlükte gör →dur: yeni bir sır üretip eskisini geçersiz kılmak. Sır depodaysa bu, yeniden deploy etmeden yapılabilir.
Kafam karıştı, daha basit anlat
Sırrı çalışırken bir depodan ver. Sızarsa silme, değiştir.
Sır deposu (Vault, Kubernetes sırları) neden daha güvenlidir?
Sır rotasyonu nedir?
Kendin gör
Anahtar nerede, kim görebilir?
Tohum 350283Oynat ya da adımla: her adımda sıradan bir olay yaşanır.
Şu an ne oldu?
application-prod.yml içinde, Git’te
Dört sıradan olay yaşanacak. Anahtar kaç yerde görünecek?
Görevler0/3
Anahtarı Git geçmişine kaçıraçık
İpucu
Varsayılan ayarlar yeter.
Anahtarı imaj katmanlarına gömaçık
İpucu
Build sırasında ver.
Hiçbir yerde görünmesin ve kolayca değişsinaçık
İpucu
Çalışırken, bir depodan.
Olay günlüğü (0)
Henüz olay yok. Oynat veya adımla.
- Varsayılanla oynat. Anahtar Git’te: dış ekip depoyu kopyalayınca anahtar da gitti; değiştirmek zahmetliydi.
- “Commit öncesi sır tarayıcı”yı aç. Anahtar depoya hiç girmedi.
- “Docker imajında” seç. İmajı çeken herkes anahtarı katmanlardan okuyabildi.
- “Ortam değişkeni” seç. Açılış logu anahtarı düz metin olarak yazdı.
- “Sır deposu” seç. Anahtar hiçbir yerde görünmedi ve yeniden deploy etmeden değişti.
Bir token Docker build argümanı olarak verildi. Ne olur?
Bir ortam değişkenindeki anahtar loglara nasıl sızabilir?
Tuzaklar
Commit’i silmek yeterli sanmak: sır bir kez Git’e girdiyse, kopyalanmış her depoda ve önbellekte yaşamaya devam edebilir. Geçmişi temizlemek iyidir, ama sırrı değiştirmek şarttır.
Build sırasında sır vermek. İmajın içinde bir parola ya da token gerekiyorsa, onu katmana yazan bir build argümanı yerine BuildKit’in sır bağlamasını kullan; sır yalnızca o adımda görünür.
Her yerde aynı sırrı kullanmak. Test ve canlı aynı anahtarı paylaşırsa, test ortamındaki bir sızıntı canlıyı da açar. Her ortamın kendi sırrı olsun.
Kafam karıştı, daha basit anlat
Sızan sırrı değiştir, build’de katmana yazma, her ortama ayrı sır ver.
Commit öncesi sır tarayıcının işi nedir?
Derinleş · Ödeme servisi: anahtar çalışırken, bir dosyadan 4 dosya · ~31 satır · ilk okumada atlayabilirsin
Kendini sına
Parolayı içeren dosyayı silip commit'lemek, parolayı Git geçmişinden de siler.
Test ve canlı ortam aynı veritabanı parolasını kullanıyor. Risk nedir?
Aklında kalacak üç şey
- 1 Git geçmişi ve imaj katmanları kalıcıdır. Bir sırrı içeren dosyayı silmek, onu geçmişten ya da eski imajlardan silmez.
- 2 Sırlar uygulamaya çalışma anında, bir sır deposundan verilmelidir; ne kodda ne imajda ne de loglanabilecek bir ortam değişkeninde durmalıdır.
- 3 Sızan bir sır silinmez, değiştirilir. Değiştirmesi kolay bir düzen, sızıntıyı bir felaketten sıradan bir işe çevirir.
4 kart sonraki derste seni bekliyor