İzin listesi bir güvenlik duvarı değil, erişim sözleşmesidir
IP izin listesi yalnızca “kim bağlanabilir?” sorusuna cevap verir. Asıl değer, bu cevabın okunabilir ve sürdürülebilir olmasındadır. Kural açıklaması boşsa, üç ay sonra o IP’nin ofis mi, eski ajans mı, CI runner mı olduğunu kimse hatırlamaz.
Bu yüzden izin listesi kuralını eklerken açıklama yazmak küçük bir nezaket değil, operasyonel hafızadır. Hele geçici erişimlerde açıklamaya tarih veya amaç eklemek ileride temizlik yapmayı kolaylaştırır.
Anlamlı izin listesi kuralları
turkdb cluster allowlist add app-pg 203.0.113.0/24 --desc "Ofis ağı - İstanbul" turkdb cluster allowlist add app-pg 198.51.100.42 --desc "GitHub Actions runner - production deploy" turkdb cluster allowlist list app-pg
0.0.0.0/0 neden rahatlatıcı ama tehlikelidir?
Herkes bağlansın diye tüm interneti açmak kısa vadede sorunu çözer gibi görünür. Ama o andan itibaren güvenlik yalnızca parola gücüne ve uygulama davranışına kalır. Üretim veritabanında bu, gereksiz bir risk transferidir.
Daha iyi yaklaşım, erişim kaynaklarını sınıflandırmaktır: uygulama runtime, ofis ağı, VPN/WireGuard, CI/CD runner, geçici destek erişimi. Her birinin farklı ömrü ve açıklaması olmalıdır.
- Kalıcı uygulama erişimi mümkünse private ağ veya tünel üzerinden yapılmalı.
- CI/CD IP adresleri ayrı kural olarak tutulmalı.
- Geçici destek erişimleri süreli açılmalı ve iş bitince kaldırılmalı.
- Boş izin listesi durumunun dış erişimi kapattığını ekip bilmeli.
TLS parametresi motorlara göre değişir
TLS konusu kafa karıştırır çünkü her istemci aynı kelimeyi kullanmaz. PostgreSQL sslmode=require der, MySQL tls=true veya ssl-mode ister, MongoDB tls=true kullanır, Redis tarafında rediss:// şeması beklenir. Asıl amaç aynıdır: parola ve veri düz metin taşınmasın.
Sertifika doğrulama seviyesi arttıkça güven artar ama istemci tarafında CA ve host adı doğrulama ayarları doğru yapılmalıdır. Bu yüzden bağlantı dizesindeki TLS parametresini kopyalayıp geçmek yerine, uygulama kütüphanesinin onu gerçekten nasıl yorumladığını kontrol etmek gerekir.
Motorlara göre TLS bağlantı örnekleri
POSTGRES_DSN="postgresql://app:***@app.pg.ist1.turkdb.io:5432/app?sslmode=require" MYSQL_DSN="app:***@tcp(app.mysql.ist1.turkdb.io:3306)/app?tls=true" MONGODB_URI="mongodb://app:***@app.mongo.ist1.turkdb.io:27017/app?tls=true&authSource=admin" REDIS_URL="rediss://default:***@app.redis.ist1.turkdb.io:6379" CLICKHOUSE_DSN="clickhouse://app:***@app.ch.ist1.turkdb.io:9440?secure=true"
Erişim sorununu çözerken güvenliği sökmeyin
Bir bağlantı hatasını çözerken “TLS’i kapat, izin listesini aç, sonra bakarız” demek çok insani ama tehlikeli bir refleks. Daha güvenli yaklaşım, hangi katmanın engel olduğunu tek tek anlamaktır.
TürkDB’de cluster olayları, bağlantı bilgisi ve izin listesi aynı yerde olduğu için bu ayrımı yapmak daha kolaydır. Önce doğru IP mi geliyor, sonra TLS parametresi doğru mu, sonra kullanıcı/parola doğru mu diye ilerleyin.
Güvenliği bozmadan erişim teşhisi
turkdb cluster get app-pg turkdb cluster allowlist list app-pg turkdb connect app-pg --no-tunnel turkdb cluster events app-pg --limit 20