Tüm yazılar
·7 dk okuma·ShamashAi Ekibi

ShamashAi Operations Preflight — production'a açmadan önce 6 kontrol

ShamashAi'nin validateRuntimeConfig() mekanizması ile production açılışı öncesi kritik yapılandırma hataları, güvenlik açıkları ve operasyonel eksiklikler otomatik tespit edilir. JWT secret, SQL credential, CORS, agent token ve threat intel feed durumu Control Center posture skoruna beslenir.

Pazartesi 08:30'da production açılışı — ve unutulan bir environment değişkeni

Pazartesi sabahı 08:30, ShamashAi production sunucusuna ilk kez gerçek trafik akacak. CTO son commit'i onaylamış, IT yöneticisi firewall kurallarını açmış, sysadmin SQL Server backup'ını almış. Herkes hazır. Servis başlatılıyor — ve 12 saniye sonra process kapanıyor. Log'da tek satır: FATAL: JWT_SECRET length < 32, refusing to boot in production mode. Geliştirme ortamından kopyalanan 16 karakterlik test anahtarı, production'da geçersiz. İlk müşteri girişi 09:00'da olacaktı; şimdi saat 08:32 ve ekip panik modunda environment dosyasını düzeltiyor.

Bu senaryo gerçek bir olay değil, ancak on-premise SIEM kurulumlarında sık tekrarlanan bir anti-pattern. Geliştirme ortamında sorunsuz çalışan yapılandırmalar, production güvenlik seviyesinde sessizce açık bırakır veya servisi tamamen durdurur. ShamashAi Operations modülünün Preflight Check mekanizması, sunucu açılmadan önce altı kritik kontrol noktasını tarayarak bu tür sürprizleri engeller. validateRuntimeConfig() fonksiyonu boot aşamasında devreye girer; yapılandırma hatası tespit edilirse process başlamayı reddeder ve hatayı audit_log'a yazar.

Bu yazıda ShamashAi'nin production readiness kontrollerini, hangi yapılandırma parametrelerinin neden kritik olduğunu ve Control Center posture skoruna nasıl beslendiğini inceleyeceğiz. Yazı boyunca göreceğiniz environment değişkenleri, SQL tablo adları ve endpoint yolları ShamashAi'nin gerçek iç mimarisinden alınmıştır.

validateRuntimeConfig() — boot'ta yapılandırma kontrolü

ShamashAi API servisi (Node.js Fastify) başlatıldığında, src/core/boot/validateRuntimeConfig.ts modülü devreye girer. Bu modül environment değişkenlerini, SQL Server bağlantı dizesini, lisans durumunu ve agent token havuzunu kontrol eder. Eğer NODE_ENV=production ise, geliştirme ortamında kabul edilebilir olan gevşek kurallar sıkılaştırılır.

Kontrol sonuçları dbo.audit_log tablosuna event_type: PREFLIGHT_CHECK olarak kaydedilir ve aynı zamanda /operations/preflight GET endpoint'inden sorgulanabilir hale gelir. Control Center arayüzü bu endpoint'i kullanarak sistem durum skorunu (posture score) günceller. Skor 100 üzerinden hesaplanır; her başarısız kontrol puandan düşer.

1. JWT_SECRET uzunluğu — session token güvenliği

İlk kontrol noktası JWT_SECRET environment değişkeninin uzunluğudur. ShamashAi kullanıcı oturumlarını JWT (JSON Web Token) ile yönetir; bu token'lar HS256 algoritması ile imzalanır. HMAC-SHA256 imzaları için NIST SP 800-131A standardı minimum 112 bit entropi (≈14 byte) önerir, ancak pratik güvenlik için 256 bit (32 byte) tercih edilir.

javascript // src/core/boot/validateRuntimeConfig.ts (Node.js örneği) const jwtSecret = process.env.JWT_SECRET; if (!jwtSecret || jwtSecret.length < 32) { if (process.env.NODE_ENV === 'production') { logger.fatal('JWT_SECRET must be ≥32 characters in production'); process.exit(1); } else { logger.warn('JWT_SECRET shorter than 32 chars — acceptable in dev only'); } }

Development modunda uyarı ile geçilir, production'da servis başlamaz. Bu davranış kasıtlıdır: geliştirme ortamında hızlı prototipleme mümkün olmalı, ancak production ortamında zayıf secret ile oturum açılması kesinlikle engellenmelidir.

2. CREDENTIAL_KEY varlığı — şifrelenmiş kimlik bilgileri

ShamashAi, LDAP, SMTP, SNMP trap hedefleri gibi dış sistemlere erişim için gerekli kimlik bilgilerini dbo.devices ve dbo.integrations tablolarında saklar. Bu alanlar AES-256-GCM ile şifrelenir; şifreleme anahtarı CREDENTIAL_KEY environment değişkeninden okunur.

csharp // Agent .NET 8 örneği: kimlik bilgisi şifreleme using System.Security.Cryptography;

public class CredentialVault { private readonly byte[] _key; public CredentialVault() { var keyHex = Environment.GetEnvironmentVariable("CREDENTIAL_KEY"); if (string.IsNullOrEmpty(keyHex)) { throw new InvalidOperationException("CREDENTIAL_KEY not set"); } _key = Convert.FromHexString(keyHex); } public string Decrypt(string cipherTextBase64) { var cipher = Convert.FromBase64String(cipherTextBase64); using var aes = new AesGcm(_key); var nonce = cipher[..12]; var tag = cipher[^16..]; var cipherText = cipher[12..^16]; var plaintext = new byte[cipherText.Length]; aes.Decrypt(nonce, cipherText, tag, plaintext); return Encoding.UTF8.GetString(plaintext); } }

Eğer CREDENTIAL_KEY set edilmemişse, agent Active Directory'ye bağlanamaz, SMTP notifikasyonları gönderilemez ve SNMP trap'leri alınamaz. Preflight kontrolü bu durumu tespit eder ve dbo.audit_log içine PREFLIGHT_WARN: CREDENTIAL_KEY missing kaydı düşer. Production'da bu eksiklik fatal kabul edilir.

3. SQL_PASSWORD — varsayılan veya dev şifresi kontrolü

Birçok kurulumda SQL Server bağlantı dizesi appsettings.Production.json içine hardcode edilir. ShamashAi bu yaklaşımı desteklemez; bağlantı dizesi environment'tan okunur:

SQL_CONNECTION_STRING=Server=10.10.5.12;Database=ShamashAi;User Id=shamashai_user;Password=${SQL_PASSWORD};TrustServerCertificate=false

Preflight kontrolü SQL_PASSWORD değerini bilinen zayıf şifrelerle karşılaştırır:

  • Password123
  • Admin123
  • shamashai (ürün adı)
  • test, dev, demo
Eğer eşleşme varsa, production modunda servis başlamaz. Development modunda uyarı verilir ama boot devam eder.

4. SHAMASHAI_CORS_ORIGINS — wildcard kontrolü

ShamashAi API'si (Fastify), web arayüzünden (Next.js) gelen istekleri kabul etmek için CORS (Cross-Origin Resource Sharing) ayarlarını kullanır. SHAMASHAI_CORS_ORIGINS environment değişkeni, izin verilen origin'leri virgülle ayrılmış liste olarak içerir:

SHAMASHAI_CORS_ORIGINS=https://shamashai.sirket.local,https://siem.sirket.local

Preflight kontrolü bu liste içinde wildcard (*) veya subdomain wildcard (https://*.sirket.local) olup olmadığını kontrol eder. Production'da wildcard tespit edilirse boot reddedilir:

javascript const origins = process.env.SHAMASHAI_CORS_ORIGINS?.split(',') || []; const hasWildcard = origins.some(o => o.includes('*')); if (hasWildcard && process.env.NODE_ENV === 'production') { logger.fatal('CORS wildcard not allowed in production'); process.exit(1); }

Wildcard CORS, herhangi bir web sitesinin API'ye erişmesine izin verir; bu CSRF (Cross-Site Request Forgery) saldırılarına kapı açar. ISO 27001:2022 Annex A 8.22 (web güvenliği) kapsamında bu yapılandırma açık kabul edilir.

5. ALLOW_UNAUTH_INGEST — authentication bypass flag

Agent'lar (Windows, Linux, network device) event'leri POST /ingest/event endpoint'ine gönderir. Normal akışta her agent, dbo.devices tablosunda kayıtlı bir agent_token ile kimlik doğrulaması yapar. Ancak development ortamında hızlı test için ALLOW_UNAUTH_INGEST=true flag'i açılabilir; bu durumda token kontrolü atlanır.

Production'da bu flag açık olmamalıdır. Preflight kontrolü:

javascript const allowUnauth = process.env.ALLOW_UNAUTH_INGEST === 'true'; if (allowUnauth && process.env.NODE_ENV === 'production') { logger.fatal('ALLOW_UNAUTH_INGEST must be false in production'); process.exit(1); }

Bu flag açık kalırsa, saldırgan ShamashAi API'sine doğrudan sahte event enjekte edebilir. KVKK Madde 12 (veri güvenliği) kapsamında bu durum "teknik önlem eksikliği" olarak değerlendirilebilir.

6. SQL_TRUST_SERVER_CERTIFICATE — TLS doğrulama uyarısı

SQL Server bağlantısı TLS üzerinden şifrelenebilir. Ancak self-signed sertifika kullanıldığında TrustServerCertificate=true parametresi eklenir; bu durumda istemci sertifika zincirini doğrulamaz. Man-in-the-middle saldırılarına karşı savunmasız hale gelir.

Preflight kontrolü SQL_CONNECTION_STRING içinde TrustServerCertificate=true olup olmadığını kontrol eder. Production'da bu durum fatal değil, uyarı olarak işaretlenir:

javascript const connStr = process.env.SQL_CONNECTION_STRING || ''; if (connStr.includes('TrustServerCertificate=true')) { logger.warn('SQL TLS certificate validation disabled — consider proper CA cert'); // Not fatal, but logged and shown in Control Center }

Çoğu on-premise kurulumda iç sertifika otoritesi (CA) yoktur ve self-signed sertifika kullanılır. ShamashAi bu gerçeği kabul eder; uyarı verir ama servisi durdurmaz. Ancak Control Center posture skorundan 5 puan düşer.

Preflight endpoint — GET /operations/preflight

Boot aşamasında yapılan kontroller dbo.audit_log tablosuna kaydedilir. Ancak ShamashAi API'si ayrıca GET /operations/preflight endpoint'ini sunar; bu endpoint mevcut yapılandırmayı real-time kontrol eder ve sonucu JSON formatında döner:

{ "timestamp": "2026-10-21T09:18:09Z", "checks": [ {"id": "jwt_secret", "status": "pass", "score": 20}, {"id": "credential_key", "status": "pass", "score": 15}, {"id": "sql_password", "status": "pass", "score": 15}, {"id": "cors_origins", "status": "pass", "score": 10}, {"id": "allow_unauth_ingest", "status": "pass", "score": 25}, {"id": "sql_trust_cert", "status": "warn", "score": -5, "message": "TrustServerCertificate=true"} ], "total_score": 80, "production_ready": true }

Control Center arayüzü bu endpoint'i her 5 dakikada bir çağırır ve "System Health" panelinde görselleştirir. Skor 70'in altına düşerse kırmızı uyarı gösterilir.

Ek kontroller — license, agent token, threat intel

ShamashAi dokümantasyonu, preflight mekanizmasının yalnızca environment ve yapılandırma kontrolü yapmadığını belirtir. Aşağıdaki operasyonel kontroller de yapılır:

  • License durumu: dbo.license tablosundan son lisans kaydı okunur. Süre dolmuşsa veya cihaz limiti aşılmışsa production_ready: false döner.
  • Agent token sayısı: dbo.devices tablosunda agent_token IS NOT NULL kayıt sayısı, lisans limiti ile karşılaştırılır.
  • Push VAPID hazır mı: Web Push notifikasyonları için VAPID_PUBLIC_KEY ve VAPID_PRIVATE_KEY environment değişkenleri kontrol edilir. Eksikse uyarı verilir (fatal değil).
  • SQL bağlantı testi: SELECT 1 sorgusu çalıştırılır; timeout veya hata durumunda boot reddedilir.
  • Agent heartbeat: Son 10 dakika içinde en az bir agent'tan heartbeat gelip gelmediği kontrol edilir. Eğer hiç agent yoksa uyarı (ilk kurulumda normal).
  • Threat intel feed güncelliği: dbo.threat_intel_feeds tablosunda last_update alanı kontrol edilir. Son güncelleme 48 saatten eskiyse uyarı verilir.
ShamashAi dokümantasyonu bu kontrollerin tam algoritmasını açıklamıyor; pilot kapsamında kurulum ekibi ile detay paylaşılır.

Control Center posture skoruna besleme

Preflight sonuçları yalnızca boot aşamasında değil, runtime'da da kullanılır. Control Center'ın "Operations Dashboard" ekranı, sistem sağlık skorunu (posture score) hesaplarken preflight sonuçlarını dikkate alır.

Skor hesaplama:

  • JWT_SECRET geçerli: +20
  • CREDENTIAL_KEY set: +15
  • SQL_PASSWORD güçlü: +15
  • CORS wildcard yok: +10
  • ALLOW_UNAUTH_INGEST=false: +25
  • SQL_TRUST_SERVER_CERTIFICATE=false: +15 (true ise -5)
  • License geçerli: +10
  • En az 1 agent aktif: +5
  • Threat intel güncel: +5
Maksimum skor: 100. Eğer skor 70'in altındaysa, Control Center üst kısmında kırmızı banner gösterilir: "Production readiness düşük — preflight kontrollerini inceleyin." Banner'a tıklanınca /operations/preflight endpoint sonucu görselleştirilir.

SOAR aksiyonları ve incident group'ları ile entegrasyon

Preflight kontrolleri, SOAR (Security Orchestration, Automation, Response) aksiyonlarını da etkiler. Örneğin, POST /soar/block endpoint'i bir IP adresini firewall'da bloklamak için kullanılır. Ancak bu işlem için CREDENTIAL_KEY gereklidir (firewall API kimlik bilgileri şifrelidir). Eğer preflight kontrolünde CREDENTIAL_KEY eksikse, SOAR aksiyonu başarısız olur ve dbo.soar_actions tablosuna status: FAILED, reason: credential_key_missing kaydı düşer.

Benzer şekilde, POST /ai/investigate-event endpoint'i (AI destekli event analizi) threat intel feed'lere erişir. Eğer feed 48 saatten eski ise, AI analizi uyarı verir: "Threat intel verisi güncel değil; sonuç doğruluğu düşük olabilir." Bu uyarı dbo.incident_groups tablosunda incident açıklamasına eklenir.

Limitler ve dürüst notlar

ShamashAi Operations Preflight mekanizmasının bazı sınırları:

  • Network erişim kontrolü yok: Preflight, firewall kurallarının doğru yapılandırıldığını kontrol etmez. Örneğin agent'ların 443 portuna erişip erişemediğini test etmez.
  • SQL Server performansı ölçülmez: Bağlantı testi yapılır, ancak SQL Server'ın yük altında nasıl performans göstereceği (IOPS, CPU) kontrol edilmez.
  • Disk alanı kontrolü yok: dbo.events tablosu hızla büyür; preflight disk doluluk oranını kontrol etmez. Bu kontrol ayrı bir "Health Check" endpoint'inde (GET /operations/health) yapılır.
  • LDAP/AD entegrasyonu doğrulanmaz: Eğer ShamashAi Active Directory ile entegre edilmişse, LDAP bağlantısı preflight aşamasında test edilmez. İlk kullanıcı girişinde hata alınabilir.
  • Agent sertifikası geçerliliği kontrol edilmez: Agent'lar mutual TLS ile API'ye bağlanabilir; preflight bu sertifikaların süre dolumunu kontrol etmez.
Bu limitler bilinçli tasarım kararlarıdır. Preflight, "servis başlatılamaz" seviyesindeki kritik hataları yakalar; operasyonel izleme (monitoring) ise runtime'da sağlık kontrolü yapar.

Sonuç — production açılışını güvenle planlayın

ShamashAi Operations Preflight mekanizması, on-premise SIEM kurulumlarında sık karşılaşılan "ilk gün açığı" senaryosunu engeller. validateRuntimeConfig() fonksiyonu boot aşamasında altı kritik güvenlik ve yapılandırma noktasını kontrol eder; hata durumunda servisi başlatmayı reddeder. GET /operations/preflight endpoint'i ile runtime'da da yapılandırma durumu sorgulanabilir ve Control Center posture skoruna beslenir.

Eğer kurulumunuzda JWT_SECRET uzunluğu, CORS wildcard, SQL credential veya threat intel feed güncelliği gibi konularda belirsizlik varsa, preflight mekanizması bu boşlukları production'a açılmadan önce gösterir. ISO 27001:2022 Annex A 12.1.4 (sistem kabul testi) ve KVKK Madde 12 (teknik önlemler) uyumluluğu için bu kontroller dokümante edilebilir ve denetim sırasında /operations/preflight endpoint çıktısı kanıt olarak sunulabilir.

Pilot programı 30 gün ücretsiz: shamashai.com.tr/iletisim

Paylaş

Bu konuyu projenize uygulayalım

Pilot programı kapsamında ürünü gerçek altyapınızda 30 gün ücretsiz deneyin.