AYS | Audit Log Alt Yapısı

AYS | Audit Log Alt Yapısı


Sistem Genel Bakış

Daha önce DynamoDB tabanlı olarak planlanan audit log sistemi, AWS servislerini kullanan stream tabanlı bir mimari olarak yeniden tasarlanmıştır. Bu tasarım daha iyi ölçeklenebilirlik, gerçek zamanlı işleme ve audit logların uzun süreli depolanmasını sağlar.

audit-log-aws-infrastucture-now.gif
Back-End’in sadece yazma yaptığı ve aktif olarak kullanılan Audit Log alt yapısı
audit-log-aws-infrastructure.gif
Back-End’in hem yazma, hem okuma yaptığı ve ileride kullanılabilecek Audit Log alt yapısı

 

Powered by @Sinan ARTUN


Mimari Bileşenler

Back-End Uygulaması

  • Her API isteği/yanıtı için audit log üretir

  • İstek/yanıt verilerini yakalamak için HTTP filter implementasyonu

  • HttpServletRequest içinde requestedAt ve auditLogId değerlerinin set edilmesi

  • Log kaydı öncesi hassas verilerin maskelenmesi

  • İstek ve yanıtların Kinesis'e gönderilmesi

AWS Kinesis

  • Birincil veri streaming servisi olarak görev yapar

  • Birden fazla uygulama instance'ından gelen verilerin gerçek zamanlı alımını sağlar

  • Audit loglar için geçici depolama ve sıralı teslimat sağlar

  • Trafik hacmine göre uygun sharding yapılandırması

Amazon Kinesis Data Firehose

  • Kinesis'ten S3'e veri aktarımını yönetir

  • Gerektiğinde veri dönüşüm yetenekleri sunar

  • Veri sıkıştırma ve batch işleme yapılandırması

  • Yedek hedef depolama desteği

Amazon S3

  • Audit logların uzun süreli depolanması

  • Verilerin partition'lanması ve yaşam döngüsü yönetimi

  • Maliyet optimizasyonu için sınıf tabanlı depolama (S3 Standard, S3 IA, Glacier)

  • Veri yedekliliği ve güvenlik

Amazon Athena

  • S3'te depolanan loglar üzerinde SQL sorguları çalıştırma

  • Ad-hoc analizler ve raporlama

  • Performans analizi ve sorun giderme

  • Uyumluluk denetimi ve güvenlik analizi


Veri Akışı

  1. Back-end uygulaması her istek için bir audit log kaydı oluşturur

  2. HTTP filter ile istek ve yanıt bilgileri yakalanır

  3. Hassas veriler maskelenir

  4. Log kaydı Kinesis stream'e gönderilir

  5. Kinesis Data Firehose verileri toplu olarak S3'e aktarır

  6. Athena ile S3'teki veriler sorgulanabilir


Teknik Detaylar

Performans Optimizasyonu

  • Kinesis shard sayısı trafik hacmine göre ayarlanmalı

  • Firehose buffer ayarları optimize edilmeli

  • S3 partition stratejisi belirlenmeli

  • Athena sorgu performansı için partitioning ve indexing kullanılmalı

Güvenlik Önlemleri

  • Tüm AWS servisler arası iletişim şifrelenmiş olmalı

  • IAM rolleri en az yetki prensibiyle yapılandırılmalı

  • S3 bucket encryption aktif olmalı

  • Hassas veri maskeleme kuralları belirlenmeli

Maliyet Optimizasyonu

  • S3 yaşam döngüsü kuralları tanımlanmalı

  • Kinesis kapasitesi optimize edilmeli

  • Athena sorgu maliyetleri izlenmeli

  • Gereksiz veri tekrarından kaçınılmalı


Görüntüleme ve Bildirim

  • CloudWatch metrikleri takip edilmeli

  • Kinesis ve Firehose hata durumları izlenmeli

  • S3 depolama kullanımı takip edilmeli

  • Athena sorgu performansı izlenmeli


Felaket Senaryosu

  • Bölgesel yedeklilik planı

  • Veri kurtarma prosedürleri

  • Yedekleme stratejisi

  • Failover senaryoları


Bakım ve Operasyon

  • Log retention politikaları

  • Arşivleme stratejisi

  • Performans optimizasyonu

  • Kapasite planlama


Saklanacak Veriler

  • IP Address : İstek atan ip adresi

    • 192.168.0.1

  • User ID : Kullanıcıya ait ID bilgisi

    • 1c911d7d-dd0c-4b11-a067-d49c963e3a5e

  • Referer: isteğin geldiği web sitesi adresi

    • https://example-ui.com

  • Http Method : Http method’u tutacak alandır

    • GET | POST | PUT | PATCH | DELETE

  • Path : Path’i tutacak alandır

    • /user/login

  • Request Header : İstekle ilgili başlık bilgilerini tutan bir alandır

    { "host": "localhost:8080", "user-agent": "PostmanRuntime/7.26.10", "accept": "/", "cache-control": "no-cache", "postman-token": "1234abcd", "accept-encoding": "gzip, deflate, br", "connection": "keep-alive" }
  • Request Body : İstekle ilgili başlık bilgilerini tutan bir alandır

    { "name": "John", "age": 30, "email": "john@example.com" }
  • Response Code : Her isteğin döndürdüğü unique code

    • 123e4567-e89b-12d3-a456-426614174000

  • Response Status Code : HTTP durum kodu

    • 200, 500

  • Response Body : API'nin döndüğü yanıt eğer varsa

    { "time": "2024-07-01T21:21:21.879518571", "code": "123e4567-e89b-12d3-a456-426614174000", "isSuccess": true, "response": { "createdUser": "agitrubard", "createdAt": "2024-06-24T13:32:49", "updatedUser": "AYS", "updatedAt": "2024-07-01T21:20:41", "id": "4eb44207-b6a8-4d9c-82c2-292840e4f897", "reason": "Mo Alam için oluşturuldu.", "rejectReason": null, "status": "COMPLETED", "institution": { "id": "d95b59c7-9ac1-4be3-a981-33af1d3f8386", "name": "Disaster Foundation" }, "user": { "id": "828198fd-70b7-4037-9ece-b94274e72524", "firstName": "Buğra", "lastName": "Ercan", "city": "İstanbul", "emailAddress": "bugra.ercan@afetyonetimsistemi.org", "phoneNumber": { "countryCode": "90", "lineNumber": "5051237891" } } } }
  • Requested At: istek tarihi

    • 2024-10-06T12:30:45

  • Responded At : istek cevap tarihi

    • 2024-10-06T12:30:45

Buradan ilgili veri modeli analizine gidebilirsiniz.

Maskeleme Standardı

Audit loglarında yer alacak bilgiler arasında bulunan telefon numarası, isim-soy isim, açık adres gibi kişisel ve hassas bilgiler kesinlikle maskeleme veya anonimleştirme işlemine tabi tutulmalıdır. Örneğin, telefon numarası +90 532 123 45 67 yerine +90 532 *** ** ** formatında, isim Ahmet Yılmaz yerine A*** Y**** şeklinde, açık adres ise 1234 Cadde No:56 İstanbul yerine 1234 C*** No:** I******* olarak kayıt edilmelidir. Bu işlemler, veri güvenliği ve yasal mevzuata uygunluğu sağlamak adına zorunludur.

  • password

    • 1234567890123456******

  • emailAddress

    • j@gj@g

    • james.william@afetyonetimsistemi.orgjam******org

  • lineNumber

    • 12341234

    • 5012345678******5678

  • firstName, lastName, applicantFirstName, applicantLastName

    • Do → D******

    • Joe → J******

    • James → J******

    • Diana → D******

  • address

    • Springfield StreetSpr******eet

    • 123 Main Street, Springfield123 M******field

  • Authorization

    • Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6Ikp.eyJqBearer eyJhbGciOiJIUzI1NiIs******

  • accessToken, refreshToken

    • eyJhbGciOiJIUzI1NiIsInR5cCI6Ikp.eyJqeyJhbGciOiJIUzI1NiIs******


Kaynaklar