Pazartesi 09:00 — Yönetim raporunu yazmak için artık 1 saat harcamıyoruz
Pazartesi 08:47. IT Müdürü Ahmet'in telefonu çalıyor. CFO Ayşe Hanım, "Geçen hafta güvenlikte neler oldu? Saat 11'de yönetim toplantısı var, hızlıca özetleyebilir misin?" diyor. Ahmet SQL Server Management Studio'yu açar, dbo.events tablosuna bakar, Excel'e aktarır, pivot tablo oluşturur, son bir haftadaki olayları filtreler, kategorilere ayırır, bir de KVKK için dbo.audit_log tablosunu kontrol eder — erişim loglarını sayar. Saat 10:35 olmuştur, toplantıya 25 dakika kalmış, PowerPoint'i henüz açmamıştır.
Bu senaryo Türkiye'deki orta ölçekli firmalarda her hafta yaşanır. Üst yönetim siber güvenlik durumunu takip etmek ister, IT yöneticisi ise olay yönetimiyle meşguldür. Rapor yazma işi 1-2 saat alır, düzenli yapılmaz, soru geldiğinde acele hazırlanır. ShamashAi'nin Pazartesi 09:00 otomatik yönetici raporu bu döngüyü bitirir: haftalık özet e-posta ile PDF ek otomatik olarak belirlenen alıcı listesine gönderilir. Manuel müdahale gerekmez.
ShamashAi Executive Summary nedir?
ShamashAi Reports modülünün içindeki Executive Summary özelliği, her Pazartesi sabahı 09:00'da (Europe/Istanbul saat dilimi) CISO, IT Müdürü, Genel Müdür, CFO gibi yöneticilere otomatik e-posta gönderir. E-postanın içinde:
- Posture skoru: Son 7 günlük güvenlik duruşu puanı (0-100 arası). Skoru oluşturan faktörler: kritik cihazlarda agent durumu, açık güvenlik açıkları, kritik olayların kapatılma süresi, SOAR otomasyonunun aktifliği.
- Top 5 incident: Son 7 günde en yüksek severity'ye sahip, henüz kapatılmamış veya yeni kapatılmış olaylar.
dbo.incident_groupstablosundan severity >= 7 olanlar önce gelir. - KVKK ve ISO 27001 uyumluluk yüzdeleri: KVKK Madde 12 (kişisel verilere erişim izleme) ve ISO 27001:2022 Annex A kontrol noktalarının karşılanma oranları. ShamashAi Compliance Dashboard'dan otomatik çekilir.
- SOAR aksiyonları: Geçen hafta ShamashAi SOAR Engine tarafından tetiklenen otomatik müdahaleler (örn.
POST /soar/block,POST /soar/quarantineendpoint'leri ile). Engellenmiş IP sayısı, karantinaya alınan cihaz, sıfırlanan hesap gibi metrikler. - Görünürlük açıkları: Hangi site'lerde veya cihaz gruplarında agent kurulu değil veya offline, hangi log kaynaklarından 7 gündür veri gelmiyor.
Teknik mimari: cron, timezone, alıcı limiti
ShamashAi backend'de Node.js Fastify üzerinde çalışan bir cron job vardır:
javascript // src/services/scheduler.js const cron = require('node-cron'); const { generateWeeklySummary } = require('./reports/weekly-summary'); const { sendEmail } = require('./email-provider');
// Pazartesi 09:00 Europe/Istanbul cron.schedule('0 9 * * MON', async () => { console.log('[Weekly Summary] Cron triggered at', new Date().toISOString()); try { const pdfBuffer = await generateWeeklySummary(); const recipients = await getNotificationPolicy('WEEKLY_SUMMARY'); if (recipients.length > 25) { console.warn('[Weekly Summary] Recipient count exceeds 25, truncating.'); recipients = recipients.slice(0, 25); } await sendEmail({ to: recipients, subject: [ShamashAi] Haftalık Özet — ${formatDateRange()}, html: generateEmailBody(pdfBuffer), attachments: [{ filename: 'ShamashAi_Haftalik_Ozet.pdf', content: pdfBuffer }] }); console.log('[Weekly Summary] Email sent to', recipients.length, 'recipients.'); } catch (err) { console.error('[Weekly Summary] Failed:', err); } }, { timezone: 'Europe/Istanbul' });
Cron ifadesi 0 9 * * MON her Pazartesi sabahı 09:00'da tetiklenir. timezone: 'Europe/Istanbul' parametresi sayesinde yaz saati uygulaması (DST) otomatik hesaplanır. Şubat'ta veya Kasım'da saat değişikliği olduğunda ShamashAi manuel ayar gerektirmez.
Alıcı listesi notification_policy tablosunda WEEKLY_SUMMARY policy ID'si altında tutulur. Maksimum 25 alıcı tanımlanabilir. Eğer liste 25'i aşarsa sistem ilk 25 kişiye gönderir, fazlası loglanır ama gönderilmez. Bu limit e-posta servis sağlayıcısının rate limit koruması içindir.
Manuel tetikleme ve anlık önizleme
Bazı durumlarda IT yöneticisi Pazartesi'yi beklemek istemez:
- Yönetim toplantısı Çarşamba günü alındı, hemen rapor lazım.
- Pilot sunumunda potansiyel müşteriye canlı gösterim yapılacak.
- Önceki Pazartesi raporu spam klasörüne düştü, tekrar göndermek gerek.
POST /summary/send-now
Anlık rapor oluşturur ve alıcı listesine gönderir.
javascript // src/routes/summary.js fastify.post('/summary/send-now', { preHandler: [fastify.authenticate, fastify.authorize(['admin', 'manager'])], schema: { body: { type: 'object', properties: { date_range_days: { type: 'integer', default: 7 }, custom_recipients: { type: 'array', items: { type: 'string', format: 'email' }, maxItems: 25 } } } } }, async (request, reply) => { const { date_range_days = 7, custom_recipients } = request.body; const pdfBuffer = await generateWeeklySummary(date_range_days); const recipients = custom_recipients || await getNotificationPolicy('WEEKLY_SUMMARY'); await sendEmail({ to: recipients.slice(0, 25), subject: [ShamashAi] Manuel Haftalık Özet — ${new Date().toLocaleDateString('tr-TR')}, html: generateEmailBody(pdfBuffer), attachments: [{ filename: 'ShamashAi_Manuel_Ozet.pdf', content: pdfBuffer }] });
await fastify.sql.query(` INSERT INTO dbo.audit_log (user_id, action, resource_type, resource_id, timestamp) VALUES (@userId, 'MANUAL_SUMMARY_SENT', 'REPORT', 'weekly_summary', GETUTCDATE()) `, { userId: request.user.id });
return { success: true, recipients_count: recipients.length }; });
Bu endpoint admin veya manager rolüne sahip kullanıcılara açıktır. date_range_days parametresi ile son 7, 14 veya 30 günlük rapor üretilebilir. custom_recipients dizisi verilirse notification policy yerine bu liste kullanılır.
GET /summary/preview
PDF'i indirmeden önce rapor içeriğini JSON olarak döner. Web panelinde "Önizleme" butonu bu endpoint'i çağırır.
javascript fastify.get('/summary/preview', { preHandler: [fastify.authenticate] }, async (request, reply) => { const data = await buildSummaryData(7); // son 7 gün return { posture_score: data.postureScore, top_incidents: data.topIncidents.map(i => ({ event_type: i.event_type, severity: i.severity, device_name: i.device_name, created_at: i.created_at })), compliance: { kvkk_percentage: data.kvkkPercentage, iso27001_percentage: data.iso27001Percentage }, soar_actions: { blocked_ips: data.soarActions.blockedIps, quarantined_devices: data.soarActions.quarantinedDevices, password_resets: data.soarActions.passwordResets }, visibility_gaps: data.visibilityGaps }; });
Önizleme endpoint'i PDF render etmez, sadece veri döner. Web panelinde tablo ve grafik olarak gösterilir. IT yöneticisi "Bu rapor uygun mu?" diye kontrol eder, uygunsa manuel gönderim yapar.
Posture skoru nasıl hesaplanır?
Posture skoru ShamashAi'nin genel güvenlik duruşunu 0-100 arası tek sayıda özetler. Formül:
sql -- src/services/reports/posture-calculator.sql DECLARE @AgentCoverage FLOAT; DECLARE @CriticalIncidentAvgClose FLOAT; DECLARE @SoarAutomationRate FLOAT; DECLARE @VulnerabilityCriticalOpen INT;
SELECT @AgentCoverage = (SELECT COUNT(*) FROM dbo.devices WHERE agent_status = 'online' AND is_critical = 1) * 1.0 / NULLIF((SELECT COUNT(*) FROM dbo.devices WHERE is_critical = 1), 0);
SELECT @CriticalIncidentAvgClose = AVG(DATEDIFF(MINUTE, created_at, closed_at)) FROM dbo.incident_groups WHERE severity >= 8 AND closed_at IS NOT NULL AND created_at >= DATEADD(DAY, -7, GETUTCDATE());
SELECT @SoarAutomationRate = (SELECT COUNT(*) FROM dbo.soar_actions WHERE created_at >= DATEADD(DAY, -7, GETUTCDATE())) * 1.0 / NULLIF((SELECT COUNT(*) FROM dbo.events WHERE severity >= 7 AND created_at >= DATEADD(DAY, -7, GETUTCDATE())), 0);
SELECT @VulnerabilityCriticalOpen = COUNT(*) FROM dbo.vulnerabilities WHERE severity = 'critical' AND status = 'open';
DECLARE @PostureScore INT = (@AgentCoverage * 30) + (CASE WHEN @CriticalIncidentAvgClose < 120 THEN 25 WHEN @CriticalIncidentAvgClose < 360 THEN 15 ELSE 5 END) + (@SoarAutomationRate * 25) + (CASE WHEN @VulnerabilityCriticalOpen = 0 THEN 20 WHEN @VulnerabilityCriticalOpen < 5 THEN 10 ELSE 0 END);
SELECT @PostureScore AS posture_score;
Ağırlıklar:
- Agent kapsama (30 puan): Kritik cihazlarda agent online oranı. Eğer tüm kritik cihazlar ShamashAi .NET 8 agent ile izleniyorsa 30 puan.
- Olay kapanış süresi (25 puan): Severity >= 8 olayların ortalama kapanış süresi. 120 dakika altı 25 puan, 120-360 arası 15 puan, üstü 5 puan.
- SOAR otomasyon oranı (25 puan): Son 7 günde severity >= 7 olayların kaçında SOAR aksiyonu tetiklendi. %100 otomasyon 25 puan.
- Kritik zafiyet (20 puan): Açık kritik zafiyet yoksa 20 puan, 1-4 arası varsa 10 puan, 5+ varsa 0 puan.
KVKK ve ISO 27001 uyumluluk yüzdeleri
ShamashAi Compliance Dashboard'dan otomatik olarak çekilir. İki metrik:
KVKK Madde 12 Uyumluluk (%): Kişisel verilere erişim loglarının tutulma oranı. ShamashAi dbo.audit_log tablosunda tüm erişim kayıtlarını saklar. Uyumluluk yüzdesi şu şekilde hesaplanır:
sql SELECT (SELECT COUNT(DISTINCT device_id) FROM dbo.audit_log WHERE action IN ('FILE_ACCESS', 'DB_QUERY', 'RECORD_VIEW') AND created_at >= DATEADD(DAY, -7, GETUTCDATE())) * 100.0 / NULLIF((SELECT COUNT(*) FROM dbo.devices WHERE processes_personal_data = 1), 0) AS kvkk_percentage;
Kişisel veri işleyen tüm cihazlardan log geliyorsa %100. Eksik cihazlar varsa oran düşer.
ISO 27001:2022 Annex A Uyumluluk (%): ShamashAi toplam 93 kontrol noktasından kaçını karşılıyor. Örnek kontrol noktaları:
- A.5.16: Kimlik yönetimi → ShamashAi Active Directory ile entegre,
AUTH_FAIL_USERevent'i üretir. - A.8.16: İzleme aktiviteleri → Tüm olaylar
dbo.eventstablosunda. - A.8.8: Yönetim logging →
dbo.audit_logher admin aksiyonunu kaydeder.
SOAR aksiyonları özeti
Geçen hafta ShamashAi SOAR Engine tarafından otomatik tetiklenen müdahalelerin sayısı raporlanır:
sql SELECT action_type, COUNT(*) AS action_count, COUNT(DISTINCT target_ip) AS unique_targets FROM dbo.soar_actions WHERE created_at >= DATEADD(DAY, -7, GETUTCDATE()) GROUP BY action_type ORDER BY action_count DESC;
Örnek çıktı:
| action_type | action_count | unique_targets | |-------------|--------------|----------------| | BLOCK_IP | 47 | 38 | | QUARANTINE_DEVICE | 3 | 3 | | RESET_PASSWORD | 12 | 12 | | DISABLE_ACCOUNT | 2 | 2 |
Bu tablo PDF'de "SOAR Otomasyonu" başlığı altında bar chart olarak gösterilir. Yönetim bu sayede IT ekibinin manuel müdahale yapmadan kaç tehdidin otomatik engellendiğini görür.
SOAR aksiyonları POST /soar/block ve POST /soar/quarantine endpoint'leri tarafından tetiklenir. Örneğin BRUTE_FORCE_DETECTED event'i geldiğinde kaynak IP otomatik firewall'a eklenir, dbo.soar_actions tablosuna yazılır.
Görünürlük açıkları: hangi cihaz veya site'den log gelmiyor?
Görünürlük açıkları bölümü CISO için kritik bilgidir. Hangi cihazlar offline, hangi log kaynaklarından veri gelmiyor, hangi site'lerde agent kurulu değil? ShamashAi bunu otomatik tespit eder:
sql SELECT d.site_name, d.device_name, d.agent_status, d.last_seen_at FROM dbo.devices d WHERE (d.agent_status = 'offline' OR d.last_seen_at < DATEADD(DAY, -7, GETUTCDATE())) AND d.is_critical = 1 ORDER BY d.last_seen_at ASC;
Bu sorgu kritik cihazlarda 7 günden fazla log gelmeyenleri listeler. Haftalık raporda "Görünürlük Açıkları" tablosu olarak yer alır. IT Müdürü bu listeyi görünce agent sorununu çözmek için harekete geçer.
Ayrıca log source bazında da kontrol yapılır:
sql SELECT log_source_type, COUNT(*) AS offline_count FROM dbo.log_sources WHERE last_received_at < DATEADD(DAY, -7, GETUTCDATE()) GROUP BY log_source_type;
Örneğin 3 firewall, 2 switch'ten 7 gündür log gelmiyorsa bu durum raporda vurgulanır.
Print stylesheet ile temiz PDF
PDF, HTML'den üretilir. ShamashAi Next.js web uygulamasında özel print stylesheet kullanır:
css /* styles/print-summary.css */ @media print { * { -webkit-print-color-adjust: exact; print-color-adjust: exact; } body { font-family: 'Segoe UI', sans-serif; font-size: 10pt; margin: 0; padding: 20mm; } h1 { font-size: 18pt; color: #2563eb; border-bottom: 2px solid #2563eb; padding-bottom: 5mm; } table { width: 100%; border-collapse: collapse; margin-top: 5mm; } th { background-color: #eff6ff; text-align: left; padding: 3mm; border: 1px solid #ddd; } td { padding: 3mm; border: 1px solid #ddd; } .page-break { page-break-before: always; } .no-print { display: none; } }
-webkit-print-color-adjust: exact; sayesinde renkli grafikler ve tablolar PDF'de korunur. Puppeteer veya benzeri headless browser ile HTML render edilir, PDF olarak export edilir.
ShamashAi backend'de PDF üretimi şu şekilde yapılır:
javascript // src/services/reports/pdf-generator.js const puppeteer = require('puppeteer'); const { renderSummaryHTML } = require('./summary-renderer');
async function generateWeeklySummaryPDF(days = 7) { const data = await buildSummaryData(days); const html = renderSummaryHTML(data); const browser = await puppeteer.launch({ headless: true, args: ['--no-sandbox'] }); const page = await browser.newPage(); await page.setContent(html, { waitUntil: 'networkidle0' }); const pdfBuffer = await page.pdf({ format: 'A4', printBackground: true, margin: { top: '10mm', right: '10mm', bottom: '10mm', left: '10mm' } }); await browser.close(); return pdfBuffer; }
PDF boyutu tipik olarak 300-500 KB arasındadır. Büyük logo veya ekran görüntüsü yoksa e-posta eki olarak sorunsuz gönderilir.
Alıcı listesi yönetimi: notification policy
Alıcı listesi ShamashAi web panelinde Ayarlar > Bildirimler > Haftalık Özet bölümünden düzenlenir. notification_policy tablosu:
sql CREATE TABLE dbo.notification_policy ( id INT PRIMARY KEY IDENTITY, policy_type NVARCHAR(50) NOT NULL, -- 'WEEKLY_SUMMARY', 'CRITICAL_ALERT', 'COMPLIANCE_REPORT' recipient_email NVARCHAR(255) NOT NULL, recipient_role NVARCHAR(50), -- 'CISO', 'CFO', 'IT_MANAGER', 'BOARD_MEMBER' enabled BIT DEFAULT 1, created_at DATETIME2 DEFAULT GETUTCDATE() );
Bir şirket CISO, CFO, Genel Müdür ve 2 IT Müdürü'ne haftalık rapor göndermek istiyorsa 5 satır ekler. Maksimum 25 satır eklenebilir. Web panelinde "+ Alıcı Ekle" butonu ile yeni e-posta girilir, rol seçilir.
Eğer bir alıcı artık rapor almak istemiyorsa enabled = 0 yapılır, satır silinmez. Audit log'da kim ne zaman ekledi/çıkardı bilgisi tutulur.
Limitler ve dürüst notlar
ShamashAi haftalık yönetici raporu pratik bir özelliktir, ancak bazı limitler vardır:
- Maksimum 25 alıcı: E-posta servis sağlayıcısının rate limit ve spam koruması nedeniyle. Daha fazla alıcıya ihtiyaç varsa manuel gönderim yapılır veya PDF link paylaşılır.
- Sadece e-posta: Şu an Slack, Teams veya SMS entegrasyonu yok. Sadece e-posta gönderilir. Gelecek roadmap'te Slack webhook desteği var.
- Özelleştirme limiti: Rapor içeriği sabit. Hangi metrik görünecek, sıralama nasıl olacak gibi özelleştirme yok. Tüm müşteriler aynı yapıyı görür. Custom dashboard veya rapor şablonu için ShamashAi dokümantasyonu daha fazla bilgi vermiyor; pilot kapsamında detay paylaşılır.
- Geçmiş raporlara erişim: Gönderilen raporlar arşivlenmez. PDF sadece e-posta ekinde gelir. Web panelinde "Geçmiş Raporlar" sayfası şu an yok. Alıcılar e-postayı saklamalı.
- Grafik detayı: PDF'deki grafikler basit bar/line chart. İnteraktif Grafana dashboard'a benzer detay yok. Önizleme endpoint'i sadece JSON döner, grafik render etmez.
Sonuç: Pazartesi sabahı yönetim zaten bilgilendirilmiş
ShamashAi'nin Pazartesi 09:00 otomatik yönetici raporu, IT Müdürü'nü manuel rapor yazma yükünden kurtarır. Haftalık toplantıya girmeden önce üst yönetim posture skorunu, kritik olayları, KVKK-ISO uyumluluk yüzdelerini, SOAR otomasyonunu ve görünürlük açıklarını görmüş olur. Bu rapor CISO'nun "geçen hafta neler oldu?" sorusuna 1 saat harcamadan cevap verir. CFO güvenlik yatırımının karşılığını (otomasyon oranı, olay kapanış süresi) rakamlarla görür. Genel Müdür tek sayfalık özetle firma siber güvenlik duruşunu takip eder.
Cron job 0 9 * * MON Europe/Istanbul saat diliminde çalışır, manuel müdahale gerekmez. POST /summary/send-now endpoint'i ile acil durumlarda anlık rapor gönderilebilir. GET /summary/preview ile rapor içeriği önizlenebilir. Maksimum 25 alıcı listesi tanımlanır, print stylesheet ile temiz PDF üretilir. Posture skoru, SOAR aksiyonları, uyumluluk yüzdeleri ve görünürlük açıkları tek PDF'de toplanır.
Pilot programı 30 gün ücretsiz: shamashai.com.tr/iletisim
