Her Laravel uygulaması gizli bilgilere sahiptir. Veritabanı parolaları, API anahtarları, şifreleme anahtarları, üçüncü taraf hizmet kimlik bilgileri, ödeme geçidi belirteçleri. Bu gizli bilgiler, krallığınızın anahtarlarıdır ve bunları yanlış yönetmek, web geliştirmedeki en yaygın güvenlik hatalarından biridir.
Her şeyi bir .env dosyasında saklamanın varsayılan yaklaşımı geliştirme sırasında iyi çalışır. Ancak uygulamanız büyüdükçe, ekibiniz genişledikçe ve dağıtım hattınız daha karmaşık hale geldikçe, mütevazı .env dosyası sınırlamalarını göstermeye başlar. Bu makale, .env dosyasının neden tek başına yeterli olmadığını, hangi alternatiflerin olduğunu ve Deploynix’in kimlik bilgisi yönetiminin olgun bir gizli bilgi yönetimi stratejisine nasıl uyradığını keşfedecektir.
.env Dosyası: Basit ama Sınırlı
.env Dosyası: Basit ama Sınırlı
Laravel’in .env dosyası, basitliğiyle şıktır. Proje kökünde yer alan düz bir anahtar-değer çiftleri dosyasıdır, sürüm kontrolü tarafından görmezden gelinir ve vlucas/phpdotenv paketi aracılığıyla PHP’nin ortamına yüklenir.
Ne iş yapar:
- Yapılandırmayı koddan ayırır.
- Her ortam için (yerel, sahneleme, üretim) farklı değerler kullanır.
- Anlaşılması ve düzenlenmesi kolaydır.
- Pratikte hemen hemen her barındırma ortamı tarafından desteklenir.
Sınırlamaları:
- Veri üzerinde şifreleme yok.
.envdosyası diskte düz metin olarak bulunmaktadır. Dosya sistemi erişimine sahip olan herhangi biri her gizli bilgiyi okuyabilir. - Erişim kontrolü yoktur. Bir geliştiriciye bazı gizli bilgilere erişim veremezsiniz; hepsi ya vardır ya da yoktur.
- Audit izleme yok. Birisi bir değeri değiştirdiğinde, kimin neyi, ne zaman ve neden değiştirdiği hakkında bir kayıt yoktur.
- Sürüm kontrolü yok. Birisi bir anahtarı yanlışlıkla silerse veya bir yazım hatası yaparsa, önceki bir sürüme geri dönmenin bir yolu yoktur.
- Dağıtım zorlukları. Doğru
.envdosyasını doğru sunucuya almak, manuel kopyalama, SSH erişimi veya bir dağıtım aracı gerektirir. Hatalar kolayca yapılabilir. - İstenmeyen ifşalar.
.gitignoredosyasına rağmen,.envdosyaları sık sık havuzlara eklenir, halka açık S3 klasörlerine yüklenir ve Docker görüntülerine dahil edilir.
Bu sınırlamalar, .env dosyalarını kullanmayı bırakmanız gerektiği anlamına gelmez. Onları ek uygulamalar ve araçlarla desteklemeniz gerektiği anlamına gelir.
Laravel’in Şifrelenmiş Ortam Dosyaları
Laravel’in Şifrelenmiş Ortam Dosyaları
Laravel 9 ile birlikte, şifreli ortam dosyalarına yerleşik destek sunmaya başladı. Bu özellik, şifrelenmiş .env dosyalarını sürüm kontrolüne tabi tutmanıza imkân tanır; böylece dağıtım sorununu çözerken gizli bilgileri de güvende tutarsınız.
Nasıl çalışır:
Şifrelenmiş bir ortam dosyası oluşturun:
php artisan env:encrypt --env=production
Bu, proje kökünüzde .env.production.encrypted dosyasını oluşturur ve bir anahtar terminale çıkartılır. Orijinal .env.production dosyası daha sonra silinmeli (veya yalnızca güvenli bir kasada tutulmalıdır).
Dağıtım sırasında açmak için:
php artisan env:decrypt --env=production --key=your-encryption-key
Ya da LARAVEL_ENV_ENCRYPTION_KEY ortam değişkenini ayarlayarak Laravel’ın otomatik olarak şifreyi çözmesini sağlayabilirsiniz.
Avantajları:
- Şifrelenmiş dosyalar güvenle sürüm kontrolüne eklenebilir.
- Her ortamın kendine ait şifreli dosyası ve kendi anahtarı vardır.
- Yalnızca bir gizli bilgi (şifreleme anahtarı) dosya dışında yönetilmelidir.
- Ortama ait değişiklikler Git geçmişinizde izlenir.
Sınırlamaları:
- Şifreleme anahtarını güvenli bir şekilde yönetmeye devam etmelisiniz.
- Deşifre edilmiş dosya çalıştırma sırasında yine de düz metin olarak diskte bulunmaktadır.
- Ayrıcalıklı erişim kontrolü yok; anahtara sahip olan herkes her şeyi deşifre edebilir.
- Şifrelerin döndürülmesi, dosyayı yeniden şifreleyip dağıtmayı gerektirir.
Şifreli env dosyaları ile en iyi uygulamalar:
- Şifreleme anahtarını güvenli bir kasada veya CI/CD sisteminizin gizli depolama alanında saklayın.
- Her ortam için farklı şifreleme anahtarları kullanın.
- Dağıtım hattınızda şifre çözme adımını otomatikleştirin.
- Şifreleme anahtarını periyodik olarak döndürün ve yeni anahtar ile yeniden şifreleyerek değiştirin.
Ortama Göre Gizli Bilgi Stratejisi
Ortama Göre Gizli Bilgi Stratejisi
Uygulamanız ortamlar arasında (yerel geliştirme, CI/CD, sahneleme, üretim) ilerledikçe, her ortamın uygun erişim kontrolü ile kendi izole gizli bilgi setine sahip olması gerekir.
Yerel geliştirme:
Sadece geliştirme için geçerli kimlik bilgileriyle boş bir .env dosyası kullanın. Bunlar, üretimde geçerli olmayan, kullanılabilir olmayan kimlik bilgileridir. Veritabanları, önbellekler ve e-posta yakalayıcılar için yerel hizmetler veya Docker konteynerleri kullanın.
CI/CD:
Gizli bilgileri CI/CD platformunuzun yerel gizli bilgi yönetiminde (GitHub Actions gizli bilgileri, GitLab CI değişkenleri vb.) saklayın. Bunlar, yerde şifrelenir, erişim kontrolü vardır ve günlüklerde gizlenir. Test çalıştırıldığı sırada ortam değişkenleri olarak enjekte edin.
Sahneleme:
Üretim yapısına benzeyen ancak sahneleme kaynaklarına işaret eden özel bir kimlik bilgileri seti kullanın. Sahneleme için Laravel’in şifreli çevre dosyalarını kullanmayı düşünün; şifreleme anahtarı dağıtım platformunuzda tutulmalıdır.
Üretim:
Bu, güvenliğin en çok önemli olduğu yerdir. Olasılıklar arasında:
- Şifrelenmiş ortam dosyaları, anahtar dağıtım platformunuzda saklanır.
- Gizli bilgiler dağıtım sırasında enjekte eden bir gizli bilgi yöneticisi (AWS Secrets Manager, HashiCorp Vault vb.) kullanın.
- Dağıtım platformunuzun yerleşik kimlik bilgisi yönetimi (Deploynix’in ortam değişkeni yönetimi gibi).
Yaygın Gizli Bilgi Yönetim Hataları
Yaygın Gizli Bilgi Yönetim Hataları
Ne olacağını anlamak, aynı hatalara düşmemenize yardımcı olur.
Gizli bilgileri kaynağa sabitlemek. Bu bir zaman tuzağı gibi görünse de, sürekli olarak olmaktadır. JavaScript dosyalarına gömülen API anahtarları, yapılandırma dosyalarındaki veritabanı parolaları, migrasyon scriptlerinde bulunan işaretleyiciler. Her şey için ortam değişkenleri kullanın.
Aynı gizli bilgileri farklı ortamlarda kullanmak. Eğer sahneleme ve üretim veritabanları aynı kimlik bilgilerini paylaşıyorsa, sahnelemedeki bir ihlal, üretimde de bir ihlal anlamına gelir. Her ortam için ayrı kimlik bilgileri kullanın.
Üretim gizli bilgilerine aşırı geniş erişim. Her geliştiriciye üretim veritabanı kimlik bilgilerine erişim vermeye ihtiyacı yoktur. En az ayrıcalık ilkesini uygulayın. Ön yüz üzerinde çalışan genç geliştiricilerin Stripe gizli anahtarına sahip olmaları gerekmiyor.
Takım değişikliklerinden sonra gizli bilgileri döndürmemek. Bir takım üyesi ayrıldığında, erişim sağladığı her gizli bilgiyi döndürmelisiniz. Bu sıkıcı ama kritik. Mümkünse otomatikleştirin.
Gizli bilgileri kazara kayıt etmek. Laravel’in günlüğü, API anahtarlarını veya belirteçlerini içeren istek verilerini istemeden yakalayabilir. Günlüğünüzü hassas alanları gizleyecek şekilde yapılandırın. Modellerde $hidden kullanarak ve ara yazılımlarda $except kullanarak hassas verilerin günlüklerde görünmesini engelleyin.
Gizli bilgileri Docker görüntülerinde saklamak. Gizli bilgileri bir Docker görüntüsüne yerleştirmek, görüntü kayıt defterine erişimi olan herkesin bunları çıkarması anlamına gelir. Bunun yerine Docker gizli bilgileri, ortam değişkenleri veya eklenmiş hacimleri kullanın.
Deploynix Gizli Bilgi Korumasını Nasıl Yönetir
Deploynix Gizli Bilgi Korumasını Nasıl Yönetir
Deploynix, düz .env dosyalarının birçok sınırlamasını gideren üretim gizliliğini yönetmek için yerleşik bir çözüm sunar.
Panel tabanlı yönetim:
Ortam değişkenlerini doğrudan Deploynix panelinden görüntüleyebilir ve düzenleyebilirsiniz. Bu, sunuculara SSH ile bağlanmayı ve .env dosyalarını değiştirmeyi gereksiz kılar, böylece hassas verilerin terminal geçmişinde kalma riski azalır.
Güvenli depolama:
Ortam değişkenleri, Deploynix içinde güvenli bir şekilde depolanır ve dağıtım sırasında sunucunuza itilir. Böylece gizli bilgileriniz Git havuzunuzda (hatta şifreli olarak) yaşamaz, platform üzerinden yönetmeyi tercih ederseniz.
Dağıtım entegrasyonu:
Deploynix üzerinden dağıtım yaptığınızda, ortam dosyası sunucunuza uygun dosya izinleriyle yazılır (yalnızca uygulama kullanıcısı tarafından okunabilir). Nginx yapılandırması, doğrudan web erişimini .env ve diğer nokta dosyalarına engelleyerek yanlış yapılandırılmış web kökleri aracılığıyla istenmeyen ifşaları önler.
Takım erişim kontrolü:
Deploynix organizasyonel rolleri destekler: Sahip, Yönetici, Müdür, Geliştirici ve Görüntüleyici. Hangi takım üyelerinin sunucu yönetim özelliklerine erişebileceğini kontrol edebilirsiniz. Görüntüleyiciler yalnızca okuma erişimine sahiptir ve ortam değişkenlerini göremez veya değiştiremez. Daha katı kimlik bilgisi izolasyonu sağlamak için üretim sunucusuna erişimi yalnızca Sahipler ve Yöneticiler ile sınırlayın.
Dış gizli bilgi yöneticileri ile karşılaştırma:
Çoğu Laravel uygulaması için, Deploynix’in yerleşik kimlik bilgisi yönetimi yeterli güvenlik sağlar. HashiCorp Vault veya AWS Secrets Manager’ın karmaşıklığına gerek yoktur; yalnızca uyum gereksinimleriniz veya organizasyonel ölçeğiniz sıfır civarında ise.
Ancak, uygulamanız onlarca üçüncü taraf hizmetle entegre ediliyorsa ve otomatik gizli bilgi döndürme, dinamik veritabanı kimlik bilgileri veya PKI sertifika yönetimi gibi özelliklere ihtiyacınız varsa, özel bir gizli bilgi yöneticisi ek karmaşıklığa değebilir.
Pratik Bir Gizli Bilgi Yönetim İş Akışı
Pratik Bir Gizli Bilgi Yönetim İş Akışı
Deploynix üzerinde dağıtılan tipik bir Laravel uygulaması için güvenlik ile pratikliği dengeleyen bir iş akışı:
1. Yerel geliştirme: Sadece geliştirme için geçerli kimlik bilgileri olan boş bir .env dosyası kullanın. Asla üretim değerlerini yerel olarak kullanmayın.
2. Sürüm kontrolü: Her gerekli değişkeni belgelendiren yer tutucu değerlerle .env.example dosyasını ekleyin. Bu, yeni takım üyeleri için belge görevi görür.
3. CI/CD: Test kimlik bilgilerini CI platformunuzun gizli bilgi yönetiminde saklayın. Gerçek veritabanı kimlik bilgileri gerektirmemek için mümkünse testlerde SQLite kullanın.
4. Sahneleme: Ortam değişkenlerini Deploynix üzerinden yönetin. Tüm hizmetler için sahnelemeye özgü kimlik bilgilerini kullanın.
5. Üretim: Ortam değişkenlerini Deploynix üzerinden yönetin. Panel erişimini yalnızca Sahipler ve Yöneticilerle kısıtlayın.
6. Gizli bilgi döndürme: Tüm üretim kimlik bilgilerini gözden geçirmek için üç ayda bir incelemeler planlayın. API anahtarları ve veritabanı parolalarını döndürün. Deploynix panelinden güncelleyerek yeniden dağıtım yapın.
7. Olay yanıtı: Bir kimliğin tehlikeye girdiğinden şüpheleniyorsanız, hemen Deploynix panosundan döndürün ve yeniden dağıtım yapın. Tehditlerin kapsamını anlamak için erişim günlüklerini gözden geçirin.
İleri: Ortam Değişkeni Doğrulama
İleri: Ortam Değişkeni Doğrulama
Laravel, başlatma sırasında ortam değişkenlerini doğrulamak için bir mekanizma sağlar, böylece yapılandırma hatalarını çalıştırma hatalarından önce yakalarsınız:
// bootstrap/app.php veya bir hizmet sağlayıcı
use Illuminate\Support\Env;
if (app()->isProduction()) {
$required = [
'APP_KEY',
'DB_HOST',
'DB_DATABASE',
'DB_USERNAME',
'DB_PASSWORD',
'MAIL_MAILER',
'AWS_ACCESS_KEY_ID',
'AWS_SECRET_ACCESS_KEY',
];
foreach ($required as $key) {
if (empty(env($key))) {
throw new RuntimeException("Missing required environment variable: {$key}");
}
}
}
Bu, gereken bir değişkenin eksik veya boş olduğu dağıtım hatalarını yakalar. Bir kullanıcının ödeme yapmaya çalıştığında eksik bir API anahtarını keşfetmektense, başlangıçta gürültülü bir şekilde başarısız olmak çok daha iyidir.
APP_KEY Yönetimi
APP_KEY Yönetimi
APP_KEY özel dikkat gerektirir. Bu, çerezleri, oturum verilerini ve Laravel’in Crypt yüzdesi veya encrypt() yardımcı fonksiyonu ile şifrelediğiniz her şeyi şifrelemek için kullanılır.
APP_KEY için kritik kurallar:
- Üretim
APP_KEYdeğerini ihtiyaç duymayan kimseyle paylaşmayın. - Farklı ortamlar arasında aynı
APP_KEYkullanmayın. APP_KEYdöndürdüğünüzde, tüm mevcut şifrelenmiş veriler okunamaz hale gelir. Buna göre plan yapın.APP_KEY‘yi sunucunuzun dışında güvenli bir yerde yedekleyin. Eğer kaybederseniz, tüm şifreli verilere erişimi kaybedersiniz.
Sonuç
Sonuç
.env dosyası iyi bir başlangıçtır, ancak üretim gizli bilgi yönetimi daha fazla düşünce gerektirir. Sürüm kontrollü gizli bilgi dağıtımı için şifreli ortam dosyalarını kullanın. Ortam başına izole olmayı sağlamak için benzersiz kimlik bilgileri ile uygulama geliştirin. Erişimi rol ve ihtiyaç bazında kısıtlayın.
Deploynix, gizli bilgi yönetiminin operasyonel yönlerini basitleştirerek, panel tabanlı kimlik bilgisi düzenleme, güvenli depolama, rol tabanlı erişim kontrolü ve dağıtım sırasında otomatik dosya izin yönetimi sunar. Çoğu Laravel ekibi için, bu, elle .env dosyası yönetiminden viktimelerini ortadan kaldırırken anlamlı güvenlik iyileştirmeleri sağlar.
En iyi gizli bilgi yönetimi stratejisi, ekibinizin düzenli olarak uyduğu bir stratejidir. Mevcut ölçeğinize uygun uygulamalar ile başlayın ve yalnızca güvenlik gereksinimleriniz artırıldığında karmaşıklık ekleyin.
Kaynak: Orijinal Makale


