Veritabanı Güvenliği ve KVKK Teknik Tedbirleri

KVKK denetimlerinde talep edilen, veritabanındaki kişisel verilere hukuka aykırı erişimin önlenmesine yönelik teknik önlemleri hayata geçiriyoruz. Verilerin disk üzerinde şifrelenmesi (TDE), erişim ve denetim kayıtlarının oluşturulması (audit logging), üretim içinde ve dışında maskelenmesi (data masking) ve saklama süresi dolan kayıtların imhası süreçlerini üretim sistemlerinize kesintisiz entegre ediyoruz.

$ mysql -e "SHOW VARIABLES LIKE 'default_table_encryption'"
default_table_encryption ON
$ mysql -e "SELECT name, email FROM crm.customers LIMIT 1"
A*** Y***** a***@***.com · maskeleme aktif
$ tail -n1 /var/log/mysql/audit.log
{"user":"app@10.0.1.7","db":"crm","cmd":"select"}
$ goarchive archive -c crm.yaml --job customers_expired
✓ 12.480 satır doğrulandı (SHA256), kaynaktan silindi

KVKK denetimlerinde istenen önlemleri veritabanınızda kuruyoruz

Kişisel verilerin korunmasında veritabanı katmanına düşen teknik güvenlik önlemlerini, sistemin çalışma performansını ve günlük operasyonlarınızı aksatmadan devreye alıyoruz.

Şifreleme (TDE)

TDE (Transparent Data Encryption) ile verilerin disk üzerinde şifrelenmesini sağlıyoruz. MySQL tarafında keyring eklentilerini, PostgreSQL tarafında ise pg_tde bileşenini yapılandırarak şifreleme anahtarlarının desteklenen kurumsal anahtar sunucunuzla entegre biçimde çalışmasını ve yönetilmesini sağlıyoruz.

Denetim kaydı (audit logging)

Veritabanında saklanan kişisel verilere yönelik tüm erişim ve sorguların kayıt altına alınmasını sağlıyoruz. MySQL için Percona Server audit log, PostgreSQL için pgaudit bileşenlerini kurarak sorgu bazlı denetim loglarının veritabanınızda güvenle tutulmasını yapılandırıyoruz.

Veri maskeleme (data masking)

Üretim veritabanlarındaki hassas verilerin dinamik olarak maskelenmesini ve sorgularda açık görüntülenmemesini sağlıyoruz. Test ve geliştirme ortamlarında ise verilerin anonimleştirilmesini kurguluyoruz. MySQL tarafında Percona Server data masking, PostgreSQL tarafında ise PostgreSQL Anonymizer eklentilerini yetkilendirme kurallarınıza göre yapılandırıyoruz.

Saklama ve imha

Yasal saklama süresi dolan verilerin, ilişkili tüm alt kayıtlarıyla birlikte ve doğrulanabilir biçimde veritabanından temizlenmesini sağlıyoruz. MySQL tarafındaki periyodik arşivleme ve imha süreçlerini açık kaynak ürünümüz GoArchive ile güvenli ve denetlenebilir bir yapıya kavuşturuyoruz.

Yasal uyum sürecinin veritabanı boyutuna odaklanıyoruz

6698 sayılı Kişisel Verilerin Korunması Kanunu, veri sorumlularını kişisel verileri korumak amacıyla teknik ve idari tedbirler almakla yükümlü kılıyor. Biz bu kapsamda, veritabanı katmanındaki teknik gereksinimlerin gerçekleştirilmesinde destek ve danışmanlık sunuyoruz.

Bununla birlikte, teknik tedbirlerin devreye alınması tek başına kurumsal uyumu sağlamaz. Veri envanteri, açık rıza yönetimi ve idari süreçlerin de kurumun hukuk danışmanlarıyla birlikte tamamlanması gerekir. Denetimlerde teknik sorular yöneltildiğinde yanıtlar doğrudan veritabanı mimarisinden beklenir. Bu nedenle idari süreçler eksiksiz olsa bile veritabanı katmanında hazırlığı bulunmayan kurumlarda denetim bulgusu oluşabilir.

Dört temel teknik önlemi veritabanında uyguluyoruz

Disk üzerinde şifreleme (TDE)

Standart MySQL Community Edition, kurumsal anahtar yönetim sunucularıyla entegrasyon sağlayan gelişmiş keyring eklentilerini içermiyor. Şifreleme anahtarının veritabanı sunucusu üzerinde yerel bir dosyada saklandığı yapı ise şifrelemenin amacını büyük ölçüde ortadan kaldırıyor. Bu nedenle kurumsal anahtar sunucularıyla (Vault vb.) tam entegre bir TDE mimarisi için açık kaynaklı Percona Server for MySQL sürümüne geçişi öneriyoruz.

PostgreSQL tarafında da benzer bir durum geçerlidir. PostgreSQL çekirdeğinde yerleşik TDE desteği bulunmuyor. Şifreleme yeteneğini pg_tde bileşeniyle sisteme kazandırıyoruz. pg_tde, bağımsız bir eklenti olmak yerine Percona Server for PostgreSQL dağıtımının bir parçası olarak çalışıyor. Dolayısıyla hem MySQL hem de PostgreSQL ortamlarında kurumsal disk şifreleme ihtiyacı kontrollü bir dağıtım geçişi gerektiriyor. Bu geçiş süreçlerini çalışan üretim ortamlarınızda kesinti riskini en aza indirerek titizlikle yürütüyoruz. Sürüm geçişlerini ise MySQL 8.4 migrasyonu sayfasında ayrıca ele alıyoruz.

Denetim kaydı (audit logging)

KVKK denetimlerinde veritabanında saklanan kişisel verilere yönelik tüm erişimlerin sorgu düzeyinde belgelenebilmesi için denetim kaydı (audit logging) altyapısı kuruyoruz. Bu sayede kişisel verilere hangi kullanıcının, ne zaman ve hangi sorguyla eriştiğini ayrıntılı ve filtrelenebilir biçimde kayıt altına alıyoruz.

Standart MySQL Community sürümünde açık kaynaklı denetim eklentisi yer almadığı için MySQL ortamlarında Percona Server audit log bileşenini, PostgreSQL ortamlarında ise pgaudit eklentisini yapılandırıyoruz. Denetim loglarının kendisi de çalıştırılan sorgu parametreleri nedeniyle kişisel veri barındırabildiğinden, kayıtların saklama sürelerini, tutulacağı güvenli alanları ve loglara erişim yetkilerini de aynı güvenlik kapsamında planlıyoruz.

Veri maskeleme (data masking)

Veri maskeleme sürecini hem canlı üretim veritabanlarında hem de test ve geliştirme ortamlarında iki yönlü olarak ele alıyoruz.

Canlı sistemlerde destek, operasyon veya raporlama amacıyla veritabanına bağlanan yetkisi kısıtlı kullanıcıların sorgularında hassas kişisel verilerin açık biçimde görüntülenmesini önlüyoruz. Kullanıcı ve rol tanımlarına uygun maskeleme modelleri kurgulayarak kritik verilerin yalnızca yetkili roller tarafından görülmesini sağlıyoruz.

Aynı zamanda yazılım geliştirme, test ve analiz ortamlarına veri aktarırken gerçek kişisel verilerin bu ortamlara kontrolsüz yayılmasını engelliyoruz. MySQL tarafında Percona Server data masking fonksiyonlarını, PostgreSQL tarafında ise PostgreSQL Anonymizer eklentisini yapılandırıyoruz. Böylece yazılım testlerinin ihtiyaç duyduğu veri tutarlılığını bozmadan, kişisel verilerden arındırılmış güvenli ortamlar oluşturuyoruz.

Saklama ve imha

Kişisel Verilerin Silinmesi, Yok Edilmesi veya Anonim Hale Getirilmesi Hakkında Yönetmelik, saklama süresi tamamlanan kişisel veriler için periyodik imha süreçlerinin işletilmesini öngörüyor. Veritabanı katmanında asıl teknik zorluk basit bir silme komutu çalıştırmak değil, veritabanının ilişkisel veri yapısını ve bütünlüğünü bozmadan bu işlemi gerçekleştirebilmektir.

Özellikle yüksek hacimli üretim veritabanlarında performans nedeniyle foreign key (FK) kısıtlamaları tanımlanmadığında, ana tablodan silinen bir kaydın ilişkili diğer tablolardaki kişisel verileri sistemde kalabiliyor. Bu durumda kurumlar, ilişkili tüm tablolardan verileri tutarlı biçimde temizleyecek özel arşivleme ve imha mekanizmaları geliştirmek zorunda kalıyor.

MySQL ortamlarında saklama süresi dolan verilerin arşivlenmesi ve imhası süreçlerini kendi geliştirdiğimiz açık kaynak ürünümüz GoArchive ile çözüyoruz. GoArchive, tablolar arasındaki ilişkisel bağı takip ederek ilgili kayıtları hedef sisteme eksiksiz taşıyor ve verinin ulaştığını doğruladıktan sonra ana tablolardan güvenle temizliyor. Yönetmeliğin zorunlu kıldığı denetlenebilir imha kaydı, bu doğrulama adımıyla sağlanabilmektedir. PostgreSQL ve MongoDB altyapılarında ise saklama ve imha süreçlerini sistemlerin yerleşik araçları ve planlı bakım senaryolarıyla kurguluyoruz.

MongoDB sistemlerinde teknik önlemleri yapılandırıyoruz

MongoDB altyapılarında da şifreleme, denetim kaydı, erişim yetkilendirmesi ve imha gereksinimleri aynı önemle geçerliliğini koruyor. Ancak standart MongoDB Community sürümünde yerel denetim kaydı ve disk üzerinde şifreleme yetenekleri yer almıyor. Bu güvenlik özelliklerini Percona Server for MongoDB dağıtımı üzerinden açık kaynaklı olarak müşterilerimizin sistemlerine kazandırıyoruz. Dağıtım orijinal MongoDB ile tam uyumlu çalıştığı için geçiş aşamasında uygulama katmanında herhangi bir kod değişikliği gerekmiyor.

Erişim denetimini en az yetki (least privilege) kuralına göre rol tabanlı olarak kuruyoruz. Sahada sıklıkla karşılaştığımız sorunlardan biri, uygulamaların veritabanına yönetici yetkileriyle bağlanmasıdır. Koleksiyon düzeyinde yetkilendirme yapılmadığında, denetim kayıtları da hangi işlemin kim tarafından yapıldığını ayırt edemez duruma geliyor. Ayrıca düğümler arası ve istemci bağlantılarında TLS şifrelemesini yapılandırarak ağ trafiğini koruma altına alıyoruz.

Veri saklama ve imha süreçlerinde ise MongoDB’nin belge (document) modeli belirli operasyonel kolaylıklar sağlıyor. İlişkili verilerin tek bir belge içinde toplandığı (embedded) tasarımlarda belgenin silinmesi ilişkili tüm verileri kapsıyor. Buna karşılık, verilerin referanslarla ayrıştırıldığı modellerde ilişkili kayıtların birlikte ve doğrulanarak silinmesi için ilişkisel sistemlerdeki gibi dikkatli bir imha planı uyguluyoruz.

İlgili hizmetler

TDE ile şifrelenen veritabanlarında yedekleme türüne göre güvenlik ve kurtarma süreçleri farklılık gösterir:

  • Fiziksel yedeklerde (XtraBackup, pgBackRest, pg_basebackup): Veritabanında TDE aktif olduğunda diskteki veri blokları doğrudan kopyalandığı için alınan yedek dosyaları da otomatik olarak şifreli oluşturulur. Ancak bu yedeklerin geri yüklenebilmesi (restore) için şifreleme anahtarlarının (keyring) da kurtarma planına dahil edilmesi ve güvenle saklanması gerekir.
  • Mantıksal yedeklerde (mysqldump, pg_dump, mydumper): Veri SQL istemcisi üzerinden sorgulanarak çekildiği için dump dosyalarına açık metin (şifresiz) olarak yazılır. Bu nedenle alınan mantıksal yedeklerin depolama alanında ayrıca şifrelenmesi ve erişim yetkilerinin sıkı şekilde kurgulanması zorunludur.

Şifreli veritabanlarının yedekleme ve kurtarma planını bu ayrımı gözeterek kurguluyoruz: Veritabanı Yedekleme ve Kurtarma

Şifreleme ve denetim kaydı yapılandırmalarının cluster düğümlerinin tamamına tutarlı biçimde dağıtılması gerekir: Yüksek Erişilebilirlik ve Cluster Çözümleri

Güvenlik eklentilerinin ve denetim kayıtlarının sistem performansına etkisini düzenli ölçümlerle takip ediyoruz: Performans Optimizasyonu ve İzleme

Sık sorulan sorular

Hayır. KVKK uyumu yalnızca veritabanındaki teknik önlemlerden ibaret değildir. Veri envanteri, aydınlatma yükümlülüğü, açık rıza yönetimi, idari tedbirler ve kurumsal iş süreçleri uyumun ayrılmaz parçalarıdır. Biz teknik tedbirlerin veritabanı katmanına düşen bölümünü kuruyor ve işletiyoruz. Uyum değerlendirmesi veri sorumlusunun ve hukuk müşavirinin sorumluluğundadır. Hukuki danışmanlık vermek yerine, teknik altyapının gerektirdiği adımları hukuk biriminizle koordineli olarak yürütüyoruz.

PostgreSQL çekirdeğinde yerleşik TDE (Transparent Data Encryption) desteği bulunmuyor. Bu nedenle şifreleme yeteneğini pg_tde bileşeniyle sağlıyoruz. Bu bileşen mevcut PostgreSQL kurulumuna bağımsız bir eklenti olarak kurulmak yerine Percona Server for PostgreSQL dağıtımının bir parçası olarak geliyor. Kurumsal anahtar yönetim sunucularıyla entegre çalışabilen açık kaynaklı bir TDE mimarisi, hem PostgreSQL tarafında hem de MySQL Community sürümünde planlı bir Percona Server dağıtım geçişi gerektiriyor.

Hayır. Yazılım üreticilerinden tamamen bağımsız olarak çalışıyoruz. Kullandığımız bileşenler ve topluluk eklentileri açık kaynak kodlu özgür lisanslara sahiptir. Bu açık kaynaklı bileşenleri müşterilerimizin çalışan sistemlerine kuruyor, yapılandırıyor ve entegre ediyoruz. Sunduğumuz temel hizmet, entegrasyon mühendisliği ve sonrasındaki operasyonel destektir.

Her önlemin operasyonel gereksinimleri farklılık gösterir. Denetim kaydı ve veri maskeleme süreçlerini genellikle sistem kesintisi yaşanmadan devreye alabiliyoruz. Disk şifreleme ve dağıtım geçişleri ise dikkatli bir planlama gerektirir. Replika sunucular üzerinden aşamalı ilerleyip yük aktarımı sağlayarak olası kesintileri planlı bakım pencerelerine sığdırıyoruz. Veritabanı mimarinizi incelemeden kesin süre sözü vermek yerine, süreci analiz çalışmasının ardından müşterimiz ile birlikte netleştiriyoruz.

Evet. Projelerin önemli bir bölümü tek bir denetim bulgusunun çözümüyle başlıyor. Sahada en sık denetim kaydı eksikliği ve test ortamlarında gerçek verilerin bulunması bulgularıyla karşılaşıyoruz. Dört önlemin tamamının aynı anda devreye alınması zorunlu değildir, kurumunuzun acil ihtiyaç duyduğu başlığı önceliklendirerek ilerleyebiliyoruz.

Denetimde hangi bulguyla karşılaştınız?

Mevcut sisteminizi birlikte inceleyelim. Hangi teknik önlemin ne kapsamda çalışma gerektirdiğini belirleyerek önceliklerinizi net bir yol haritasına dönüştürelim.

İletişime geçin