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

ShamashAi Change Calendar — planlı değişiklik ve rollback kanıtı

ShamashAi Change Calendar modülü, planlı değişiklikleri change_calendar tablosunda izler, risk seviyesini değerlendirir ve rollback kanıtlarını compliance evidence pack'e entegre eder. Slack'te karışan 'ne zaman ne yaptık' zincirine son verin.

Cuma 18:47'de başlayan rollback ve kanıt zincirinin dağılması

Cuma akşamı 18:47'de sistem yöneticisi firewall kuralını günceller. 19:15'te web uygulaması yanıt vermeyi keser. 19:23'te rollback başlar. 19:41'de servis ayağa kalkar. Pazartesi sabahı müşteri temsilcisi sorar: "Cuma akşamı ne oldu, değişiklik onaylı mıydı, rollback ne zaman tamamlandı?" IT yöneticisi Slack'te mesaj arar. Kimin ne zaman ne yaptığı, hangi onayın hangi değişikliğe ait olduğu, rollback'in başlangıç-bitiş saati birbirinden kopuk kanallara dağılmış durumda. ISO 27001 Annex A.8.32 (change management) kontrolü için denetçiye sunulacak "change log" Excel'de tutulmaya çalışılıyor ama değişiklik sırasında kimse Excel'i güncellemedi. ShamashAi Change Calendar modülü bu sorunu çözmek için tasarlandı: her planlı değişiklik change_calendar tablosunda açılır, risk seviyesi atanır, durum geçişleri (planned → in_progress → completed veya rolled_back) audit zincirine otomatik bağlanır ve rollback kanıtı (evidence) compliance evidence pack içine dahil edilir. Böylece "ne zaman ne yapıldı, geri alındı mı, onaylı mıydı" sorusuna tek bir sorgu ile yanıt verebilirsiniz.

ShamashAi Change Calendar tablosu ve risk seviyesi

ShamashAi'de planlı değişiklikler dbo.change_calendar tablosunda saklanır. Tablonun temel alanları:
  • change_id (UUID): değişiklik kaydının benzersiz tanımlayıcısı
  • title (string): "Firewall kural 443/tcp açılması", "SQL Server 2019→2022 yükseltme" gibi açıklama
  • planned_start (datetime2): planlanan başlangıç zamanı
  • planned_end (datetime2): planlanan bitiş zamanı
  • risk_level (enum): low, medium, high
  • status (enum): planned, in_progress, completed, rolled_back
  • owner (string): değişikliği uygulayacak kişi (email veya kullanıcı adı)
  • approver (string): onay veren kişi
  • rollback_evidence (nvarchar(max)): rollback yapıldıysa kanıt metni veya bağlantı
  • created_at, updated_at: kayıt oluşturma ve son güncelleme zamanları
Risk seviyesi (risk_level) üç değer alabilir:
  • low: rutin işlemler (sertifika yenileme, log rotation, küçük config değişikliği)
  • medium: ara etki (database index rebuild, web sunucusu restart, patch uygulaması)
  • high: üretim kritik (firewall kural değişikliği, veri taşıma, sürüm yükseltme)
Risk seviyesi maintenance window ile entegre çalışır. Örneğin risk_level: high olan bir değişiklik sadece tanımlı bakım penceresi içinde (cumartesi 02:00-06:00 gibi) in_progress durumuna geçebilir. Pencere dışında durum geçişi denerseniz API HTTP 409 döndürür ve dbo.audit_log tablosuna "change blocked: outside maintenance window" kaydı düşer.

Değişiklik açma: POST /changes endpoint'i

Yeni bir değişiklik kaydetmek için /changes endpoint'ine POST isteği atarsınız: http POST https://shamashai.local/api/changes Content-Type: application/json Authorization: Bearer <token> { "title": "SQL Server 2019 → 2022 yükseltme (prod-db01)", "planned_start": "2026-08-30T02:00:00Z", "planned_end": "2026-08-30T05:00:00Z", "risk_level": "high", "owner": "ahmet.yilmaz@example.com", "approver": "mehmet.kaya@example.com", "description": "Prod veritabanı sunucusunda SQL Server 2022 CU3'e yükseltme. Rollback planı: snapshot geri yükleme." } Yanıt: { "change_id": "c7a3f891-4b2e-4d6a-9f1c-3e8d7a2b5c9f", "status": "planned", "created_at": "2026-08-24T09:15:59Z" } Bu kayıt dbo.change_calendar tablosuna yazılır ve aynı anda dbo.audit_log içine şu şekilde audit entry düşer: { "event_type": "CHANGE_CREATED", "user": "ahmet.yilmaz@example.com", "change_id": "c7a3f891-4b2e-4d6a-9f1c-3e8d7a2b5c9f", "details": { "title": "SQL Server 2019 → 2022 yükseltme (prod-db01)", "risk_level": "high" }, "timestamp": "2026-08-24T09:15:59Z" }

Durum geçişi: PATCH /changes/:id/status ve audit zinciri

Değişiklik planlanan zamanda başlatıldığında durum plannedin_progress geçer: http PATCH https://shamashai.local/api/changes/c7a3f891-4b2e-4d6a-9f1c-3e8d7a2b5c9f/status Content-Type: application/json Authorization: Bearer <token> { "status": "in_progress", "note": "Snapshot alındı, yükseltme başlatıldı." } API önce maintenance window'u kontrol eder:
  • Eğer planned_start ile planned_end arasındaysanız ve pencere açıksa → durum güncellenir.
  • Eğer pencere dışındaysanız → HTTP 409 Conflict döner, audit_log'a "change blocked" yazılır.
Durum geçişi başarılı olursa dbo.audit_log'a şu entry eklenir: { "event_type": "CHANGE_STATUS_UPDATED", "user": "ahmet.yilmaz@example.com", "change_id": "c7a3f891-4b2e-4d6a-9f1c-3e8d7a2b5c9f", "old_status": "planned", "new_status": "in_progress", "note": "Snapshot alındı, yükseltme başlatıldı.", "timestamp": "2026-08-30T02:03:12Z" } Böylece kim, ne zaman, hangi notu ekleyerek durumu değiştirdi — tüm zincir audit_log içinde kayıtlı kalır.

Rollback senaryosu ve rollback_evidence alanı

Değişiklik sırasında sorun çıkarsa (örneğin SQL Server upgrade sonrası uygulama bağlantı hatası verdi) durum rolled_back olarak işaretlenir: http PATCH https://shamashai.local/api/changes/c7a3f891-4b2e-4d6a-9f1c-3e8d7a2b5c9f/status Content-Type: application/json { "status": "rolled_back", "rollback_evidence": "Snapshot prod-db01-pre-upgrade-2026-08-30 geri yüklendi. Restore log: https://shamashai.local/logs/restore-2026-08-30-0412.txt", "note": "Uygulama TLS 1.3 hatası verdi,eski sürüme geri dönüldü." } rollback_evidence alanı rollback işleminin kanıtını saklar: snapshot adı, geri yükleme log bağlantısı, commit hash (kod değişikliği ise), firewall kural export dosyası gibi. Bu alan compliance evidence pack içine dahil edilir. Denetçi "rollback yapıldığını nasıl kanıtlarsınız?" diye sorduğunda GET /compliance/evidence?change_id=... sorgusuyla bu metni ve bağlantıları sunarsınız. Durum rolled_back olduğunda audit_log'a şu kayıt düşer: { "event_type": "CHANGE_ROLLED_BACK", "user": "ahmet.yilmaz@example.com", "change_id": "c7a3f891-4b2e-4d6a-9f1c-3e8d7a2b5c9f", "old_status": "in_progress", "new_status": "rolled_back", "rollback_evidence": "Snapshot prod-db01-pre-upgrade-2026-08-30 geri yüklendi...", "timestamp": "2026-08-30T04:12:47Z" }

Compliance evidence pack entegrasyonu

ShamashAi compliance modülü GET /compliance/evidence ve GET /reports/evidence-pack endpoint'leri ile denetim kanıtlarını toplar. Change Calendar kayıtları bu pack içine otomatik dahil edilir: http GET https://shamashai.local/api/reports/evidence-pack?start_date=2026-08-01&end_date=2026-08-31&include_changes=true Yanıt ZIP veya JSON formatında döner ve changes bölümünde dbo.change_calendar + dbo.audit_log birleştirilerek şu yapı oluşturulur: { "changes": [ { "change_id": "c7a3f891-4b2e-4d6a-9f1c-3e8d7a2b5c9f", "title": "SQL Server 2019 → 2022 yükseltme (prod-db01)", "risk_level": "high", "status": "rolled_back", "planned_start": "2026-08-30T02:00:00Z", "planned_end": "2026-08-30T05:00:00Z", "owner": "ahmet.yilmaz@example.com", "approver": "mehmet.kaya@example.com", "rollback_evidence": "Snapshot prod-db01-pre-upgrade-2026-08-30 geri yüklendi. Restore log: https://shamashai.local/logs/restore-2026-08-30-0412.txt", "audit_trail": [ { "event_type": "CHANGE_CREATED", "timestamp": "2026-08-24T09:15:59Z", "user": "ahmet.yilmaz@example.com" }, { "event_type": "CHANGE_STATUS_UPDATED", "old_status": "planned", "new_status": "in_progress", "timestamp": "2026-08-30T02:03:12Z" }, { "event_type": "CHANGE_ROLLED_BACK", "old_status": "in_progress", "new_status": "rolled_back", "timestamp": "2026-08-30T04:12:47Z" } ] } ] } Bu pack'i ISO 27001, SOC 2 veya KVKK Madde 12 (veri güvenliği tedbirleri) denetiminde sunarsınız. "Değişiklik yönetimi süreciniz var mı, rollback kanıtlayabiliyor musunuz?" sorusuna tek bir JSON dosyası ile yanıt verirsiniz.

C# .NET 8 kod örneği: change_calendar sorgulama ve durum güncelleme

ShamashAi tech stack .NET 8 agent içerdiği için değişiklik kayıtlarını C# ile sorgulamak yaygındır. Örnek: csharp using System; using System.Net.Http; using System.Net.Http.Json; using System.Threading.Tasks; var client = new HttpClient { BaseAddress = new Uri("https://shamashai.local/api/") }; client.DefaultRequestHeaders.Add("Authorization", "Bearer <token>"); // Yeni change kaydı oluştur var newChange = new { title = "Firewall kural 8443/tcp açılması (prod-fw01)", planned_start = "2026-08-25T22:00:00Z", planned_end = "2026-08-25T22:30:00Z", risk_level = "medium", owner = "ali.celik@example.com", approver = "fatma.demir@example.com", description = "Yeni monitoring port için firewall kuralı." }; var createResponse = await client.PostAsJsonAsync("changes", newChange); var createdChange = await createResponse.Content.ReadFromJsonAsync<ChangeResponse>(); Console.WriteLine($"Change ID: {createdChange.change_id}, Status: {createdChange.status}"); // Değişiklik başlatıldığında durum güncelle await Task.Delay(TimeSpan.FromHours(12)); // simulate wait var statusUpdate = new { status = "in_progress", note = "Firewall kuralı ekleniyor." }; var updateResponse = await client.PatchAsJsonAsync( $"changes/{createdChange.change_id}/status", statusUpdate ); if (updateResponse.IsSuccessStatusCode) { Console.WriteLine("Durum in_progress olarak güncellendi."); } else { Console.WriteLine($"Hata: {updateResponse.StatusCode} - maintenance window dışında olabilir."); } record ChangeResponse(string change_id, string status, DateTime created_at); Bu kod .NET 8 agent içinde zamanlanmış görev (scheduled task) veya manuel tetikleyici ile çalıştırılabilir. Durum geçişi başarısızsa (maintenance window dışında) agent log dosyasına yazar ve IT yöneticisine bildirim gönderir.

Maintenance window entegrasyonu ve pencere dışında engelleme

ShamashAi dbo.maintenance_windows tablosunda bakım pencerelerini tanımlar: sql SELECT window_id, day_of_week, start_time, end_time, risk_level_allowed FROM dbo.maintenance_windows WHERE active = 1; Örnek: | window_id | day_of_week | start_time | end_time | risk_level_allowed | |-----------|-------------|------------|----------|--------------------| | w1 | Saturday | 02:00 | 06:00 | high | | w2 | Sunday | 01:00 | 04:00 | high | | w3 | Weekdays | 12:00 | 13:00 | low, medium | risk_level: high olan bir değişiklik sadece cumartesi 02:00-06:00 veya pazar 01:00-04:00 arasında in_progress yapılabilir. Hafta içi öğle saatinde denerse API HTTP 409 döner: { "error": "change_blocked_outside_window", "message": "risk_level 'high' değişiklik sadece cumartesi 02:00-06:00 veya pazar 01:00-04:00 pencerelerinde başlatılabilir.", "allowed_windows": [ { "day": "Saturday", "start": "02:00", "end": "06:00" }, { "day": "Sunday", "start": "01:00", "end": "04:00" } ] } Bu kontrol sayesinde üretim kritik değişiklikler yanlışlıkla mesai saatinde yapılamaz.

Limitler ve dürüst notlar

  • Otomatik rollback tetikleme yok: ShamashAi bir değişikliğin başarısız olduğunu otomatik algılamaz. Rollback kararı ve rolled_back durumuna geçiş manuel yapılır. SOAR entegrasyonu ile kısmi otomasyon planlanıyor ama şu an dokümantasyon bunu içermiyor.
  • Değişiklik onay akışı (approval workflow) sınırlı: approver alanı sadece metin. Onay butonu veya e-posta onay mekanizması yoktur; onay dış sistemde (Jira, ServiceNow) yapılıp kayıt ShamashAi'a POST edilir.
  • Rollback evidence doğrulama yok: rollback_evidence alanına yazılan metin veya bağlantı ShamashAi tarafından doğrulanmaz. Snapshot gerçekten var mı, log dosyası erişilebilir mi — bu kontroller kullanıcıya bırakılmıştır.
  • Risk seviyesi skorlama otomatik değil: risk_level değerini siz belirlersiniz. ShamashAi "bu değişiklik kaç cihazı etkiler, kaç kullanıcı var" gibi analiz yapıp risk puanı hesaplamaz. Pilot kapsamında detay paylaşılabilir.
  • Değişiklik çakışma tespiti yok: Aynı cihazda aynı saatte iki high riskli değişiklik planlanmışsa ShamashAi sizi uyarmaz. Çakışma kontrolü manuel yapılmalıdır.

Sonuç

ShamashAi Change Calendar modülü, planlı değişiklikleri dbo.change_calendar tablosunda kaydeder, risk seviyesine göre maintenance window ile eşleştirir, durum geçişlerini dbo.audit_log'a zincirler ve rollback kanıtlarını compliance evidence pack içine entegre eder. "Cuma akşamı ne yaptık, rollback ne zaman tamamlandı" sorusuna Slack mesajı araması yerine tek SQL sorgusu veya REST API çağrısı ile yanıt verebilirsiniz. ISO 27001 Annex A.8.32 ve KVKK Madde 12 denetimlerinde değişiklik yönetimi sürecinizi kanıtlamak için GET /reports/evidence-pack endpoint'ini kullanırsınız. 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.