Optimasi Query Log AWS CloudTrail dengan Partisi di Amazon Athena

Banyak organisasi menggunakan AWS CloudTrail untuk mencatat semua aktivitas API di akun AWS mereka. Tantangannya, semakin besar infrastruktur AWS yang digunakan, semakin besar pula volume data CloudTrail yang dihasilkan. Dalam organisasi dengan banyak akun, jutaan panggilan API per hari bisa dengan cepat menumpuk menjadi terabyte data log.

Saat tim keamanan melakukan investigasi insiden atau audit aktivitas akun, menjalankan query di Amazon Athena bisa memakan waktu dan biaya tinggi. Hal ini karena Athena biasanya harus memindai seluruh tabel untuk setiap query, sehingga proses menjadi lambat dan mahal.

Sebenarnya AWS sudah menyediakan panduan untuk melakukan partisi manual pada CloudTrail logs, namun proses manual ini tidak efisien jika jumlah akun dan log terus berkembang. Oleh karena itu, dalam artikel ini kita akan membahas solusi otomatis untuk membuat dan mengelola tabel Athena yang terpartisi, sehingga query menjadi lebih cepat dan biaya jauh lebih rendah.


Kenapa Perlu Optimasi?

  • CloudTrail berfungsi sebagai catatan lengkap aktivitas API di AWS.
  • Athena adalah layanan query interaktif berbasis SQL tanpa perlu mengelola server. Model harganya adalah pay-per-query, artinya biaya ditentukan berdasarkan banyaknya data yang dipindai setiap query.

Dengan memanfaatkan tabel terpartisi, kita hanya akan memindai data yang relevan, bukan seluruh dataset. Misalnya, jika kita ingin mencari aktivitas mencurigakan dari satu akun selama seminggu terakhir, Athena cukup membaca partisi akun dan tanggal tersebut saja, bukan semua data.


Gambaran Solusi

Solusi ini menggunakan dua fungsi AWS Lambda untuk mengelola partisi CloudTrail di Athena:

  1. CloudTrailLogsPartitionedByAccount
    • Membuat tabel Athena khusus untuk setiap akun AWS yang ditemukan (misalnya trail_123456789012).
    • Tabel otomatis dipartisi berdasarkan Region dan tanggal.
    • Memudahkan tim untuk fokus menganalisis log di akun tertentu.
  2. CloudTrailLogsPartitionedAllAccounts
    • Membuat tabel gabungan (all_accounts_trail) yang berisi log dari seluruh akun dalam organisasi.
    • Dipartisi berdasarkan Account ID, Region, dan tanggal.
    • Cocok untuk investigasi lintas akun atau analisis organisasi secara menyeluruh.

Kedua fungsi Lambda ini menggunakan partition projection dan melakukan update tabel setiap hari agar selalu sinkron dengan perubahan organisasi. Dengan begitu, tidak ada lagi kebutuhan untuk mengelola partisi secara manual.


Persiapan

Sebelum mulai, pastikan:

  • Memiliki izin untuk membuat stack CloudFormation.
  • CloudTrail sudah dikonfigurasi dan menyimpan log ke bucket S3.
  • Athena sudah memiliki lokasi hasil query (query result location).
  • Punya akses ke bucket S3 untuk CloudTrail logs dan hasil query Athena.

Prefix bucket CloudTrail berbeda tergantung jenis trail:

  • Untuk organizational trail: ORG_ID/AWSLogs/ORG_ID
  • Untuk account-level trail: AWSLogs/

Untuk mengecek prefix, gunakan perintah berikut:

aws cloudtrail describe-trails --trail-name-list NAMA_TRAIL

Jika tidak ada field S3KeyPrefix, berarti menggunakan prefix default.


Langkah-Langkah

1. Deploy CloudFormation Template

  • Unduh template CloudFormation yang sudah disediakan.
  • Buka AWS CloudFormation Console, buat stack baru, pilih Upload a template file, lalu unggah file template.
  • Isi detail:
    • Nama stack (misalnya: cloudtrail-athena-partitioner).
    • Nama bucket CloudTrail (misalnya: aws-controltower-logs-123456789012-us-east-1).
    • Prefix yang sesuai (AWSLogs/ atau ORG_ID/AWSLogs/ORG_ID).
    • Nama bucket untuk hasil query Athena.
  • Pilih Next, centang izin pembuatan IAM, lalu submit.
  • Setelah stack selesai dibuat, Lambda akan otomatis mengatur tabel Athena terpartisi.

2. Query CloudTrail di Athena

  • Buka Athena Console.
  • Pilih database yang sudah dibuat (default: ct-central).
  • Pergi ke Saved Queries untuk mencoba query bawaan.
  • Contoh query: Find most frequent console users, yang akan menampilkan frekuensi login AWS Console berdasarkan user ARN.
  • Jalankan query dan perhatikan hasilnya lebih cepat dan biaya lebih rendah dibanding query di tabel tanpa partisi.

Pertimbangan Biaya

  • Solusi ini membuat 2 fungsi Lambda yang dijalankan sekali per hari. Biaya tergantung durasi runtime Lambda di lingkungan Anda.
  • Biaya tambahan akan timbul dari Athena sesuai volume data yang dipindai.
  • Detail harga bisa dicek di halaman resmi Lambda pricing dan Athena pricing.

Membersihkan (Cleaning Up)

Jika sudah selesai atau tidak lagi digunakan, hapus CloudFormation stack untuk menghindari biaya berkelanjutan.


Kesimpulan

Dengan mengoptimasi query CloudTrail menggunakan tabel Athena yang terpartisi:

  • Biaya query lebih rendah, karena Athena hanya membaca partisi yang diperlukan.
  • Investigasi keamanan lebih cepat, baik untuk per akun maupun lintas organisasi.
  • Administrasi lebih mudah, karena partisi dikelola otomatis oleh Lambda.

Solusi ini juga menyertakan query bawaan yang bisa langsung digunakan untuk skenario umum, dan bisa menjadi dasar membuat query khusus sesuai kebutuhan tim.

Jika organisasi Anda menggunakan AWS dalam skala besar, mulailah menerapkan solusi ini untuk meningkatkan efisiensi dan kecepatan analisis CloudTrail logs di Athena.


Infrastruktur IT yang kuat adalah kunci produktivitas perusahaan. Dengan awscloud indonesia, Anda bisa mendapatkan solusi IT lengkap yang sesuai dengan kebutuhan Anda. iLogo Indonesia sebagai mitra terpercaya siap mengintegrasikan semuanya agar bisnis Anda tetap berjalan lancar dan aman.
Hubungi kami sekarang atau kunjungi awscloud.ilogoindonesia.id untuk informasi lebih lanjut!