Hassas finansal veriyi şifrelerken anahtarı .env'de tutmak neden riskli — KMS/Vault ne sağlar?
Soru
Kullanıcıların DB'deki T.C. Kimlik No veya kredi kartı token'larını KVKK/GDPR gereği şifreli tutmalıyız; DB'yi ele geçiren saldırgan bu veriyi okuyamamalı. Uygulama katmanında simetrik şifreleme (AES-256) kullanırken şifreleme anahtarını uygulama sunucusunda bir `.env` dosyasında tutmanın riskleri neler? AWS KMS veya HashiCorp Vault entegrasyonu mimariyi nasıl güvenli kılar?
Cevap
Kısa cevap: Alanı AES-256 ile şifrelemek doğru, ama anahtar uygulamanın yanındaki .env’de duruyorsa sunucuya ulaşan saldırgan hem veriyi hem anahtarı alır — şifreleme sana neredeyse hiçbir şey kazandırmaz. KMS/Vault’un olayı anahtarı veriden ayırmaktır.
Sorunun özü şu: şifreli veri ve onu açan anahtar aynı yerde duruyorsa, o ikisi pratikte tek bir sırdır. Güvenlik, anahtarı veriden fiziksel/yetkisel olarak koparmaktan gelir.
.env’deki anahtar tek noktada toplanmış risktir. Sunucuyu ele geçiren (ya da bir backup/.envsızıntısı yaşatan) saldırgan, şifreli DB ile anahtarı aynı anda eline geçirir. Ayrıca anahtar dosyada düz metin durur, rotasyonu zor ve kimin ne zaman çözdüğüne dair hiçbir iz yoktur.- KMS/Vault ham anahtarı uygulamaya hiç vermez. Uygulama şifreleme/çözme için KMS’i çağırır ya da envelope encryption kullanır: master anahtar KMS’te durur, her kayıt için ayrı bir data key’i o şifreler. Böylece DB’yi hatta uygulama sunucusunu ele geçirmek bile düz metni teslim etmez — çünkü master anahtar hiç orada değildir.
- Merkezi rotasyon, audit ve IAM erişimi kazanırsın. KMS/Vault anahtarı merkezî olarak rotate eder, her çözme işlemini audit loguna yazar ve erişimi IAM/policy ile sınırlar. “Hangi servis, ne zaman, hangi veriyi çözdü” sorusu artık cevaplanabilir; uyumluluk (KVKK/GDPR) denetiminde bu kritik.
- TC kimlik/kart için tokenization’ı tercih et. Mümkünse hassas değeri hiç tutma: gerçek değeri bir vault/sağlayıcıda sakla, sistemde yalnızca bir token dolaş. Böylece sistemin büyük çoğunluğu hassas veriyi hiç görmez — sızsa bile ele geçen şey anlamsız bir token olur.
Sonuç: KMS ya da Vault ile envelope encryption; anahtar asla .env’de değil, rotate + audit edilen bir yerde. Mümkün olan her yerde tokenize et. Ek not: full-disk şifreleme ya da tek başına pgcrypto yeterli değildir — canlı bir DB bağlantısı düz metni yine de okur. Asıl koruma, anahtarı veriden ayırmaktan ve uygulamaya ham anahtarı hiç vermemekten gelir.
Yorumlar
Yorum yapmak için GitHub hesabınızla giriş yapmanız yeterli. Yorumlar GitHub Discussions üzerinde saklanır.