Ortam değişkenleri ve secret'lar (şifre, API anahtarı) güvenli şekilde nasıl yönetilir?

Cevap

12-Factor App prensibine göre yapılandırma koddan ayrılmalı ve ortama göre (dev, staging, prod) değişmelidir. Aynı image her ortamda çalışır; yalnızca yapılandırma farklıdır.

Ortam değişkenleri

// config.js: uygulama açılışında doğrula, eksikse hemen çök
import { z } from "zod";

const schema = z.object({
  DATABASE_URL: z.string().url(),
  PORT: z.coerce.number().default(3000),
  JWT_SECRET: z.string().min(32),
});

export const config = schema.parse(process.env);

Yapılandırmayı tek bir modülde toplayıp açılışta doğrulamak, eksik değişken yüzünden saatler sonra ortaya çıkan hataları önler.

Yapılmaması gerekenler

  • Secret'ları git'e commit etmek (.env dosyası .gitignore'da olmalı; repoda yalnızca örnek .env.example bulunur).
  • Dockerfile'da ENV ile veya image'a kopyalayarak secret gömmek.
  • Secret'ları loglamak (hata mesajları, istek dökümleri, console.log(config)).
  • Tüm ortamlarda aynı secret'ı kullanmak.

Doğru yaklaşım

  1. Secret yöneticisi: HashiCorp Vault, AWS Secrets Manager, GCP Secret Manager, Azure Key Vault. Secret'lar merkezi, şifreli, erişim kontrollü ve denetim kaydıyla tutulur.
  2. Kubernetes: Secret nesneleri (varsayılan olarak yalnızca base64 kodludur, etcd şifrelemesi açılmalı) veya External Secrets Operator ile bulut secret yöneticisinden çekme.
  3. CI/CD: platformun şifreli secret deposu (GitHub Actions secrets); mümkünse statik anahtar yerine OIDC ile kısa ömürlü bulut kimlikleri.
  4. En az yetki: her servis yalnızca kendi ihtiyacı olan secret'a erişsin.
  5. Rotasyon: secret'lar düzenli ve sızıntı şüphesinde hemen değiştirilebilmelidir; dinamik, kısa ömürlü veritabanı kimlik bilgileri ideal çözümdür.
  6. Tarama: gitleaks veya GitHub secret scanning ile yanlışlıkla commit edilen secret'ları yakalayın.

Git geçmişine giren bir secret, commit silinse bile sızmış kabul edilir ve hemen rotate edilmelidir.

  1. CI/CD nedir? Tipik bir backend CI/CD pipeline'ının aşamaları nelerdir?OrtaDocker & DevOpsBackend
  2. İyi bir Dockerfile nasıl yazılır? Multi-stage build ne işe yarar?OrtaDocker & DevOpsBackend
  3. Docker Compose ne işe yarar? Basit bir örnekle açıklayın.KolayDocker & DevOpsBackend
  4. Container ile sanal makine (VM) arasındaki fark nedir?KolayDocker & DevOpsBackend

Bu konuda başka bir soru biliyor musun?

Mülakatta karşılaştığın soruları ekle, onaylandıktan sonra yayına alınsın.

Soru ekle