İçeriğe atla
0 XP 0
13 dkderinleşmeyle 15 dk55 XP7 etkinlik

Bulut günlükleri: CloudTrail ve eşdeğerleri

Bu derste
  • CloudTrail kaydını alan alan okumayı, yönetim ve veri olayı farkını, günlük bütünlüğünü, VPC akış günlüklerini ve Azure ile GCP karşılıklarını öğren.
  • Bulutta her eylem bir API çağrısıdır, yani her eylemin bir kaydı olabilir.
  • Yönetim olayları varsayılan gelir, veri olayları ayrıca açılmazsa hiç kaydedilmez.
  • Kanıtın, izlediği hesabın kontrolü dışında durması gerekir.

Puan bütün etkinlikleri cevaplayınca hesaba yazılır. Bu dersi tamamlayınca +55 XP alacaksın. Giriş yapmadan ilerlersen puan yalnız bu tarayıcıda durur.

Bir sızıntı şüphesi var ve soru net: veri gerçekten indirildi mi? Yanıtı verecek tek şey günlüktür. Kayıt yoksa yanıt da yoktur ve rapora bilinmiyor yazarsın.

Bulut bu konuda klasik sistemlerden cömerttir, çünkü her eylem bir API çağrısıdır ve her çağrı kaydedilebilir. Ama bu cömertliğin sınırları var.

Bazı kayıtlar varsayılan gelmez, bazıları doksan gün sonra silinir. Bu derste bir CloudTrail kaydını alan alan okumayı, kanıtı korumayı ve ağ akış günlüklerini göreceksin. Azure ve Google Cloud'daki karşılıklarını da tanıyacaksın.

Her eylem bir API çağrısı

Konsolda bir düğmeye bastığında da, bir betik komut çalıştırdığında da arkada aynı şey olur: imzalı bir API çağrısı. CloudTrail bu çağrıları kaydeder ve her hesapta varsayılan olarak açıktır. Hazır gelen olay geçmişi (event history), bir bölgedeki son doksan günün yönetim olaylarını ücretsiz tutar ve kayıtlar değiştirilemez. Ama sınırları dardır.

Yalnız yönetim olaylarını gösterir, tek hesaba ve tek bölgeye bakar, aynı anda tek bir özniteliğe göre arar. Daha uzun ve kapsamlı kayıt için bir iz (trail) kurarsın. İz, olayları senin seçtiğin bir S3 kovasına yazar.

Kaynaklarsunucu, uçToplayıcıagentSIEMnormalleştirmeKuraltespitAlarmanalist
Olay üretilir, iz kovaya yazılır, sorgu motoru okur, uyarı kuralı tetiklenir.

Şemadaki dört adım birbirini besler: olay üretilir, iz onu bir kovaya yazar, sorgu aracı kovayı okur ve tanımladığın kural eşleşen olayda uyarı üretir. CloudTrail bir olayı genelde çağrıdan ortalama beş dakika içinde teslim eder, ama bu süre garanti değildir. Olay geçmişini komut satırından da arayabilirsin.

lookup-events komutu belirli bir olay adını, kullanıcı adını ya da kaynak adını o bölgede arar. Aşağıda son iki konsol girişini soruyorsun.

$ aws cloudtrail lookup-events \
    --lookup-attributes AttributeKey=EventName,AttributeValue=ConsoleLogin \
    --max-results 2 --query 'Events[].[EventTime,Username]' --output text
2026-09-28T07:41:12+00:00    denetci
2026-09-28T02:13:55+00:00    eski-yedekleme
Olay geçmişinden son iki konsol girişi.

Çıktı iki girişi zaman sırasıyla verir. İlki denetçinin sabah girişidir ve beklenir. İkincisi soru işaretidir: eski-yedekleme adlı kullanıcı gece ikide konsola girmiş. Kimlik merkezli güvenlik dersinde bu kullanıcının anahtarının yirmi aydır kullanılmadığını görmüştün; şimdi aynı kullanıcı parolayla girmiş.

Girişin ayrıntısı her olayın CloudTrailEvent alanındaki tam JSON'da durur. ConsoleLogin kaydında responseElements alanı girişin başarılı mı başarısız mı olduğunu söyler. additionalEventData alanındaki MFAUsed değeri ise çok adımlı doğrulamanın kullanılıp kullanılmadığını gösterir.

Etkinlik 1 / 7

Bu sorgu hangi olayları çıkarır?

Önce kodu oku, sonra çıktıyı seç.

$ aws cloudtrail lookup-events \
    --lookup-attributes AttributeKey=EventName,AttributeValue=ConsoleLogin \
    --max-results 5

Yönetim, veri ve Insights olayları

Kritik ayrım yönetim olayı ile veri olayı arasındadır. Yönetim olayları kaynakların kendisini yöneten, kontrol düzlemi denen işlemlerdir. Bir role politika bağlamak, alt ağ açmak, iz kurmak ve konsola girmek bu gruptadır.

İzler yönetim olaylarını varsayılan olarak kaydeder. Bu olaylar okuma ve yazma diye ikiye ayrılır. DescribeSubnets gibi çağrılar okumadır, RunInstances gibi çağrılar yazmadır.

KMS'nin şifreleme ve çözme çağrıları da okuma olayı sayılır. Hacmi çok yüksek olduğu için bazı ekipler bunları ayrı süzer.

Veri olayları kaynağın içindeki işlemlerdir: bir S3 nesnesinin okunması ya da yazılması, bir Lambda fonksiyonunun çağrılması. Veri olayları varsayılan olarak kaydedilmez ve açıldığında ek ücret doğar. Yani kovanın açıldığını görürsün, içinden ne indirildiğini göremezsin.

Sızıntı soruşturmalarında en çok bu boşluk canını yakar. Çözüm her şeyi açmak değil, hassas kovalar için veri olaylarını seçerek açmaktır.

Üçüncü tür Insights olaylarıdır. CloudTrail API çağrı hızını ve hata oranını bir temel çizgiyle karşılaştırır, olağandışı bir sıçramada kayıt üretir. Bu tür de ek ücretlidir.

Aynı desen öbür bulutlarda da vardır. Google Cloud'da yönetici etkinliği denetim kayıtları her zaman yazılır; kapatılamaz ve 400 gün saklanır. Veri erişimi denetim kayıtları ise BigQuery dışında varsayılan olarak kapalıdır ve varsayılan saklama 30 gündür. Azure'daki etkinlik günlüğü (Activity Log) kontrol düzlemi işlemlerini kaydeder ve 90 gün tutar.

Bir anahtar kasasından sır okumak gibi veri düzlemi işlemleri ise kaynak günlüklerine düşer. Onlar da bir tanılama ayarı kurulmadan toplanmaz. Kısacası kontrol düzlemi varsayılan gelir, veri düzlemi senin kararındır.

Etkinlik 2 / 7

Her günlük kaydını üreten katmanı seç.

Önce bir seçeneğe, sonra aşağıdaki uygun kutuya bas. İstersen seçeneği kutuya sürükleyip bırak. Yerini değiştirmek için aynı işlemi tekrarla.

0/5 seçenek yerleşti.

Bir kaydı alan alan okumak

Bir CloudTrail kaydını okurken sabit bir sıra izlersin: önce kim, sonra ne, en son sonuç. Bu sıra seni ayrıntıda kaybolmaktan korur. Aşağıdaki kayıt laboratuvar hesabında gece yapılmış bir çağrıya aittir. Kayıt kısaltıldı, ama soruşturmada en çok bakılan alanların hepsi yerinde.

Önce kaydı kendin oku ve kimin, neyi, nereden istediğini çıkarmaya çalış. Sonra aşağıdaki açıklamayla karşılaştır. Gerçek bir kayıtta bundan çok daha fazla alan bulunur; eventID, requestParameters ve tlsDetails bunlardan birkaçıdır.

{
  "eventTime": "2026-09-28T02:21:07Z",
  "eventSource": "s3.amazonaws.com",
  "eventName": "GetBucketPolicy",
  "awsRegion": "eu-central-1",
  "sourceIPAddress": "203.0.113.77",
  "userAgent": "aws-cli/2.17.0 Python/3.12.4 Linux/6.8.0",
  "userIdentity": {
    "type": "AssumedRole",
    "arn": "arn:aws:sts::111122223333:assumed-role/lab-okuma-rolu/gece-oturumu",
    "sessionContext": {
      "sessionIssuer": { "type": "Role", "userName": "lab-okuma-rolu" },
      "attributes": { "mfaAuthenticated": "false" }
    }
  },
  "errorCode": "AccessDenied",
  "readOnly": true,
  "eventCategory": "Management"
}
Kısaltılmış bir CloudTrail kaydı. Gece yapılmış, reddedilmiş bir okuma çağrısı.

Kimlik bölümünden başla. type alanı AssumedRole, yani çağrı üstlenilmiş bir rolden geldi. ARN'nin sonundaki gece-oturumu oturum adıdır, sessionIssuer ise asıl rolü verir: lab-okuma-rolu.

Kimlik türü Root, IAMUser, AWSService ya da IdentityCenterUser da olabilir. Sonra eyleme bak. eventSource ve eventName, S3'e kova politikasını okuma isteği atıldığını söyler.

sourceIPAddress kurumun bilinen bir adresi değil, userAgent ise komut satırı aracı. En son sonuç: errorCode alanı AccessDenied, yani istek reddedildi. Kısa sürede art arda gelen List, Get ve Describe retleri keşif yapan birini ele verir. Tek kaydı okumak soruşturmanın başıdır; asıl iş binlerce kaydı süzmektir.

İzden indirdiğin JSON dosyalarında Records adlı bir dizi durur. jq aracıyla bu diziyi süzer, istediğin alanı yazdırırsın. Hesap büyüdükçe dosya indirmek yetmez.

Amazon Athena kovadaki izleri doğrudan SQL ile sorgular ve tabloyu CloudTrail konsolundan kurabilirsin. AWS'nin kendi SQL deposu CloudTrail Lake ise 31 Mayıs 2026'dan beri yeni müşteri kabul etmiyor; önceden kaydolanlar kullanmaya devam ediyor. AWS benzer iş için CloudWatch'u öneriyor. Aşağıdaki sorgu kök hesabın çağırdığı olay adlarını tekrarsız listeler.

SELECT DISTINCT eventname
FROM cloudtrail_logs
WHERE useridentity.type = 'Root'
  AND eventtime > '2026-09-01'
ORDER BY eventname;
Athena'da kök hesabın eylemleri. Konsolun kurduğu tablonun adı kova adını içerir; sorguda kendi tablonun adını yazarsın.

Sorgu, jq borusunun SQL karşılığıdır. useridentity iç içe bir yapıdır ve alanlarına nokta ile ulaşırsın. DISTINCT tekrarları atar, yani sort -u komutunun işini görür.

Tarih süzgeci sonucu daraltır, ama taranan veriyi azaltmaz. CloudTrail konsolunun kurduğu tablo bölümlenmemiştir ve Athena yine bütün dosyaları okur. Athena taradığın veri kadar ücret aldığı için bu fark maliyete yansır.

Hesap büyüdükçe tabloyu bölüm projeksiyonuyla (partition projection) güne göre bölersin ve süzgeci bölüm sütununa yazarsın. Aynı kalıpla reddedilen çağrıları da sayarsın. errorcode alanı AccessDenied olan kayıtları kimliğe göre gruplar, en çok ret alan kimlikleri sıralarsın. MITRE ATT&CK bu keşif davranışını T1580 (Cloud Infrastructure Discovery) olarak kaydeder.

Etkinlik 3 / 7

Gece yapılmış bir listeleme kaydı görüyorsun. Olayı en yüksek önceliğe taşıyan satırı bul.

Zafiyetli satıra tıkla.

Etkinlik 4 / 7

İndirilmiş CloudTrail JSON dosyasından yalnız root hesabının kullandığı olay adlarını tekrarsız listeleyen boruyu kur.

Parçalara tıklayarak komutu soldan sağa kur.

$

Kanıtın bütünlüğü

Hesaba giren bir saldırgan çoğu zaman önce seni kör etmeye çalışır. İzi durdurur, siler ya da olay seçicilerini değiştirip bazı olayları kayıttan düşürür. Günlük dosyalarının durduğu kovayı boşaltmayı da dener. MITRE ATT&CK bu davranışı T1562.008 (Disable or Modify Cloud Logs) olarak kaydeder.

İlk savunma bu olayları uyarıya bağlamaktır. StopLogging, DeleteTrail ve PutEventSelectors çağrıları nadiren meşrudur. Kök hesabın kullanılması, çok adımlı doğrulamanın kapatılması ve yeni bir yönetici politikasının bağlanması da aynı listeye girer.

İkinci savunma mimaridir. İz, izlediği hesaptaki bir kovaya yazılırsa, hesabı ele geçiren kişi kanıtı da siler. Doğru kurulumda günlükler ayrı bir günlük arşivi hesabında durur.

AWS Organizations kullanıyorsan yönetim hesabından bir kuruluş izi kurarsın. Bu iz bütün üye hesapların olaylarını tek kovaya yazar. Üye hesaplardaki kullanıcılar izi görür ama silemez, durduramaz ve değiştiremez.

Kovada S3 nesne kilidini (Object Lock) uyumluluk modunda açarsın. Bu modda saklama süresi dolana kadar kök kullanıcı dahil hiç kimse nesneyi silemez ya da üstüne yazamaz. Nesne kilidi, kovada sürüm tutmanın açık olmasını gerektirir.

Üçüncü savunma doğrulamadır. İzde günlük dosyası bütünlük doğrulamasını açtığında CloudTrail her dosyanın SHA-256 özetini alır. Her saat bir özet dosyası üretir ve bu dosyayı RSA ile imzalar. Böylece bir dosyanın sonradan değiştirilip değiştirilmediğini ya da silinip silinmediğini kanıtlayabilirsin.

Kapsamı da düzenli sınarsın. get-trail-status komutu iz kaydının şu an çalışıp çalışmadığını ve son teslim zamanını gösterir. validate-logs ise belirli bir aralıktaki dosyaları özet zincirine göre denetler.

$ aws cloudtrail get-trail-status --name kurumsal-iz \
    --query '[IsLogging,LatestDeliveryTime]' --output text
True    2026-09-28T07:45:03+00:00

$ aws cloudtrail validate-logs \
    --trail-arn arn:aws:cloudtrail:eu-central-1:111122223333:trail/kurumsal-iz \
    --start-time 2026-09-27T00:00:00Z
Results requested for 2026-09-27T00:00:00Z to 2026-09-28T08:00:00Z
Results found for 2026-09-27T00:17:28Z to 2026-09-28T08:17:28Z:

32/32 digest files valid
412/412 log files valid
İz kaydının durumu ve bütünlük denetimi. Çıktı kısaltıldı.
Derinleş:Özet dosyası zinciri

Bütünlük doğrulaması bir zincir mantığıyla çalışır. CloudTrail teslim ettiği her günlük dosyası için bir SHA-256 özeti hesaplar.

Her saat, son bir saatte teslim edilen dosyaları ve özetlerini listeleyen bir özet dosyası üretir. Bu özet dosyasını bir anahtar çiftinin gizli anahtarıyla imzalar. İmza, S3 nesnesinin üstverisinde durur.

Her özet dosyası bir öncekinin imzasını da taşır. Bu yüzden aradan bir özet dosyası silinirse zincir kopar ve validate-logs kopukluğun zaman aralığını raporlar. CloudTrail her bölge için ayrı anahtar çifti kullanır. Doğrulama açık anahtarla yapılır, bu yüzden denetçinin gizli bir bilgiye ihtiyacı yoktur.

Özet dosyaları günlüklerden ayrı bir klasöre yazılır. Böylece iki klasöre farklı erişim politikası uygulayabilirsin. Bir sınır var: komut satırı aracı yalnız dosyaları teslim edildikleri yerde doğrular. Dosyaları başka bir yere taşıdıysan kendi doğrulama aracını yazman gerekir.

Etkinlik 5 / 7

CloudTrail izini kendi hesabındaki bir kovaya yazmak neden tek başına yetmez?

Ağ akışı, çok bulut ve saklama

Ağ tarafında ayrı bir günlük kaynağı durur: VPC akış günlükleri (VPC Flow Logs). Akış günlüğü paket içeriğini tutmaz. Her ağ arayüzü için belirli bir toplama aralığında görülen akışları tek satırda özetler.

Varsayılan en uzun aralık on dakikadır, bir dakikaya da indirebilirsin. Satırlar CloudWatch Logs'a ya da S3'e yazılır. Varsayılan biçimde alanlar sabit bir sıradadır: sürüm, hesap, arayüz, kaynak adres, hedef adres, kaynak port, hedef port, protokol, paket, bayt, başlangıç, bitiş, eylem ve kayıt durumu.

2 111122223333 eni-0a1b2c3d 10.0.2.15 203.0.113.50 49152 443 6 5210 7340032 1790561400 1790561460 ACCEPT OK
2 111122223333 eni-0f9e8d7c 198.51.100.23 10.0.1.20 51514 22 6 1 60 1790561405 1790561465 REJECT OK
Varsayılan biçimde iki akış kaydı.

İlk satırda iç ağdaki 10.0.2.15 adresi, dışarıdaki 203.0.113.50 adresine 443 portundan bağlanmış. Protokol 6, yani TCP. Bir dakikada 5210 paket ve yaklaşık 7 MB veri gitmiş, eylem ACCEPT. Tek başına suç değildir, ama bu makine normalde dışarıya bu kadar veri göndermiyorsa veri çıkışı şüphesi doğar.

İkinci satırda dışarıdaki bir adres 22 numaralı porta tek paket göndermiş ve REJECT almış. Güvenlik grubu ya da erişim listesi isteği durdurmuş; bu tipik bir tarama izidir. Veri çıkışı şüphesinde ilk bakılan yer bu yüzden akış günlüğüdür.

Kayıtları birleştirmek de gerekir. Bulut denetim günlüğü, uygulama günlüğü ve akış günlüğü aynı olayı farklı açıdan yazar. Hepsini UTC saatine çevirip ortak bir zaman çizelgesine dizdiğinde olay anlatısı çıkar. Saklama süresi de yazılı bir karardır.

Olaylar çoğu zaman aylar sonra fark edilir ve o noktada kayıt yoksa soruşturma başlamadan biter. Süreyi düzenleyici gereklilikler ve olay geçmişin birlikte belirler. Gerçek hayattan bir örnek: devlet destekli bir grubun çalınmış oturum jetonlarıyla parolasız erişim sağladığı bir kampanya sonrasında resmî uyarı, oturum ömürlerini olabildiğince kısa tutmayı önerdi.

Derinleş:Bir tehdit grubunun bulut taktikleri

ABD siber güvenlik ajansı CISA ve ortakları, 26 Şubat 2024'te bir devlet destekli tehdit grubunun buluta erişim yöntemlerini anlatan bir uyarı yayımladı. Grup, buluta geçen kurumlara karşı yöntemini değiştirdi ve doğrudan kimliklere yöneldi. Parola püskürtme ve kaba kuvvetle hesap denedi. Ayrılmış çalışanlara ait ama kapatılmamış hesapları hedef aldı.

Çalınmış erişim jetonlarıyla parolaya gerek duymadan oturum açtı. Çok adımlı doğrulama bildirimlerini, kullanıcı yorulup onaylayana kadar tekrar tekrar gönderdi. Girdiği ortamda kendi cihazını kaydettirdi. Trafiğini ev internetine ait adres aralıklarındaki açık vekil sunuculardan geçirerek beklenen adreslerin arasına karıştı.

Uyarının önerileri bu derste gördüğün günlük disiplinine bağlanır. Oturum ömürleri olabildiğince kısa tutulmalı, kullanılmayan hesaplar düzenli gözden geçirilip kapatılmalıdır. Yalnız yetkili cihazların kaydına izin veren politikalar ve farklı kaynaklardan beslenen günlük ve tespit düzeni de öneriler arasındadır.

Etkinlik 6 / 7

AWS'de VPC içindeki ağ trafiğinin kaynak, hedef ve karar bilgisini kaydeden günlük türü: ____

Etkinlik 7 / 7

Doğru mu, yanlış mı?

Bir kaynağın silinmesi, o kaynakla ilgili CloudTrail kayıtlarını da siler.

Bu derste bir hata mı gördün? Bildir