Konteynerlarda Environment Variables ve Gizli Veri (Secret) Yönetimi

müfettiş

Moderatör
Katılım
20 Ocak 2024
Mesajlar
325
Tepkime puanı
1
Puanları
18

kubernetes-configmap-secret-2-1.png

Konteynerlarda Environment Variables ve Gizli Veri (Secret) Yönetimi​


Giriş: Şifreleri Kodun İçine Gömme Hatası​

Yazılım geliştirmenin en büyük günahlarından biri Hardcoding'dir. Yani veritabanı şifresini, API anahtarını kodun içine yazmak.const dbPassword = "superSecretPassword123";Bu kodu GitHub'a attığınız anda şifreniz çalınmış demektir.

Konteyner dünyasında (Docker/K8s), "12-Factor App" metodolojisi gereği, konfigürasyon koddan ayrılmalıdır. Bunun için iki temel yöntem kullanılır: Environment Variables (Ortam Değişkenleri) ve Secrets (Sırlar).

1. Environment Variables (ENV)​

Değişkenleri, konteyner çalışırken dışarıdan enjekte etme yöntemidir.
  • Kullanım: Dockerfile'da değil, docker run komutunda verilir.docker run -e DB_HOST=192.168.1.50 my-app
  • Avantajı: Aynı imajı (Image), hem Test hem Prod ortamında farklı ayarlarla çalıştırabilirsiniz.
  • Tehlikesi: Şifreler için ENV kullanmak risklidir. Çünkü docker inspect komutunu yazan veya sunucuda ps komutunu çalıştıran herkes bu değişkenleri açık metin (plaintext) olarak görebilir.

2. Docker Secrets ve Kubernetes Secrets​

Hassas veriler (Şifreler, SSH anahtarları) için özel nesneler kullanılmalıdır.

Kubernetes Secrets​

K8s, hassas verileri Secret objesi olarak saklar.
  • Nasıl Çalışır?: Secret oluşturursunuz (kubectl create secret...). Pod'u başlatırken "Bu Secret'ı şu klasöre dosya olarak bağla (Mount)" dersiniz.
  • Güvenlik: Secret'lar etcd veritabanında saklanır. (Dikkat: Varsayılan olarak sadece Base64 ile kodlanmıştır, şifreli değildir. Etcd şifrelemesi (Encryption at Rest) mutlaka açılmalıdır).
  • Uygulama: Uygulamanız şifreyi /etc/secrets/password.txt dosyasından okur. Konteyner silinince dosya da hafızadan silinir.

3. İleri Seviye: HashiCorp Vault​

Kurumsal dünyada K8s Secrets bile bazen yetersiz kalır. Şifrelerin düzenli olarak değişmesi (Rotation) gerekir.HashiCorp Vault, merkezi bir kasa yönetimidir.
  • Dinamik Sırlar: Uygulama Vault'a başvurur. Vault, veritabanına gider, o anlık "geçici bir kullanıcı adı ve şifre" oluşturur, uygulamaya verir. 1 saat sonra bu şifreyi iptal eder.
  • Avantaj: Şifre çalınsa bile ömrü kısadır. Veritabanı root şifresini kimse bilmez.

.env Dosyaları ve Docker Compose​

Geliştirme ortamında (Localhost) genellikle .env dosyaları kullanılır.docker-compose.yml dosyası, aynı klasördeki .env dosyasını okur.Önemli: .env dosyasını mutlaka .gitignore listesine ekleyin. Asla Git reposuna göndermeyin!

Sonuç​

Güvenli bir konteyner mimarisi için kural basittir:
  1. Config (URL, Port): Environment Variable kullan.
  2. Sensitive (Şifre, Key): Secret Management kullan.
  3. Kod: Asla, hiçbir koşulda konfigürasyon içermemeli.
 

Ekli dosyalar

  • SDN-8-2.png
    SDN-8-2.png
    29.4 KB · Görüntüleme: 56
Geri
Üst