Bagaimana Mengekspor Log Audit AWS RDS secara Otomatis ke instans Bucket S3?

Diterbitkan: 2022-03-05

Export RDS logs to S3 Bucket

Sebelum kita mempelajari cara Mengekspor log Audit RDS ke S3 secara otomatis, tahukah Anda bahwa AWS CloudWatch secara otomatis menyimpan log DB RDS? Ya, memang, tetapi, mereka hanya menyimpan log umum untuk instans DB Anda. Sekarang, bagaimana jika Anda ingin menemukan kueri atau data tertentu dari log? Pengguna mana yang melakukan kueri tertentu atau dari Alamat IP mana? Siapa yang menghapus catatan tertentu dari tabel DB Anda?

Selain itu, entah bagaimana Anda telah berhasil mengekspor semua log audit instans RDS Anda ke CloudWatch, yang sangat bagus. Tapi, tahukah Anda? CloudWatch akan menyimpan log tersebut hanya selama 30 hari!! Untuk menyimpannya dalam waktu yang lebih lama, Anda perlu mengekspor log CloudWatch ke bucket S3. Anda dapat melakukannya secara manual dari dasbor CloudWatch. Tapi, bagaimana jika Anda ingin memiliki otomatisasi untuk ini?

Panduan ini akan memandu Anda melalui semua langkah yang diperlukan untuk mencatat semua peristiwa tersebut secara otomatis!!

Mencari AHLI AWS? LIHAT DI SINI

Panduan ini mencakup:

1) Tweak pengaturan RDS untuk mengirim log audit ke CloudWatch
2) Buat Bucket S3 (Untuk Menyimpan Log Audit CloudWatch)
3) Buat Peran IAM (Kami akan menggunakan ini untuk otomatisasi Lambda)
4) Lambda (Fungsi untuk mengotomatisasi ekspor CloudWatch Logs ke S3)

Mari kita mulai!

Tweak Pengaturan RDS untuk Mengirim Log Audit ke CloudWatch

Pertama-tama, kita perlu mengubah RDS untuk mengirim log tertentu ke CloudWatch. Untuk melakukan ini, kami akan membuat satu Grup Opsi dan satu Grup Parameter.

Buat Grup Opsi

Kunjungi Dasbor Amazon RDS Anda.
Buka Grup Opsi.
Klik tombol Buat Grup.

Create an Option Group

Masukkan Nama dan Deskripsi untuk grup ini.
Pilih Mesin: mysql dan Versi Mesin: 8.0. Klik Buat.

Create an Option Group

Klik pada Grup Opsi yang telah Anda buat.
Di bawah bagian Opsi, klik tombol Tambahkan opsi.
Di bawah opsi “SERVER_AUDIT_EVENTS*”, masukkan nilai yang ingin Anda audit yaitu CONNECT, QUERY, QUERY_DDL, QUERY_DML, QUERY_DCL, QUERY_DML_NO_SELECT. Jika Anda ingin mencatat semua kueri yang dijalankan di tabel Anda, cukup masukkan QUERY di bidang ini.
Atur "Ya" untuk Segera Melamar. Klik Tambahkan Opsi.

Option Group Settings

Mencari AHLI AWS? LIHAT DI SINI

Buat Grup Parameter

Mari kita buka Dasbor Amazon RDS.
Klik pada Grup Parameter.
Klik tombol Buat Grup Parameter.

Create Parameter Group

Pilih "Keluarga grup parameter": mysql8.0
Pilih "Jenis": Grup Parameter DB
Masukkan Nama dan Deskripsi Grup. Klik Buat.

Create Parameter Group

Sekarang, klik pada parameter Group yang telah Anda buat.
Di bawah Parameter, kami akan mengedit parameter tertentu dan menetapkan nilai berikut:
Edit parameter: “log_output” Ubah nilainya dari TABLE menjadi FILE
Edit parameter: “slow_query_log” Ubah nilainya dari BLANK menjadi 1
Edit parameter: “general_log” Ubah nilainya dari BLANK menjadi 1

Sekarang, kita sudah siap dengan Grup Opsi dan Grup Parameter. Sekarang, mari kita alokasikan grup ini ke RDS kita.

Buka Dasbor RDS Anda.
Klik pada RDS yang telah Anda buat.
Klik Ubah.
Gulir ke bawah halaman dan buka bagian "Opsi basis data".
Di bawah “Grup parameter DB”, pilih grup parameter yang telah Anda buat.
Di bawah “Grup opsi”, pilih grup opsi yang telah Anda buat.

Tweak RDS Settings

Kita sekarang siap dengan RDS. Setelah Anda selesai dengan langkah-langkah di atas, mohon tunggu 20-30 menit untuk mengisi data di CloudWatch (CATATAN: Mungkin perlu lebih banyak waktu tergantung pada ukuran log).

Setelah CloudWatch mengumpulkan semua log, Anda akan melihat log audit di bawah Dasbor CloudWatch Anda. Akan terlihat seperti gambar berikut:

CloudWatch Log Groups

Mencari AHLI AWS? LIHAT DI SINI

Buat Bucket S3 (Untuk Menyimpan Log Audit CloudWatch)

Buka Dasbor Amazon S3.
Buat Bucket baru.
Setelah Anda membuat ember, buka dan navigasikan ke tab Izin.
Kita perlu mengizinkan CloudWatch untuk meletakkan objek ke bucket (Akses Tulis)
Klik tombol Edit untuk kebijakan Bucket. Masukkan kode berikut:

{
“Versi”: “2012-10-17”,
"Penyataan": [
{
"Efek": "Izinkan",
"Kepala sekolah": {
“Layanan”: “logs.YOUR-REGION.amazonaws.com” // yaitu logs.us-east-1.amazonaws.com
},
"Aksi": "s3:GetBucketAcl",
“Sumber Daya”: “arn:aws:s3:::BUCKET_NAME_HERE”
},
{
"Efek": "Izinkan",
"Kepala sekolah": {
“Layanan”: “logs.REGION ANDA.amazonaws.com”
},
"Aksi": "s3:PutObject",
“Sumber Daya”: “arn:aws:s3:::BUCKET_NAME_HERE/*”,
"Kondisi": {
“StringEquals”: ​​{
“s3:x-amz-acl”: “bucket-owner-full-control”
}
}
}
] }

Buat Peran IAM (Kami akan menggunakan ini untuk otomatisasi Lambda)

Sekarang, kita akan membuat peran IAM yang akan digunakan dalam pengaturan fungsi Lambda. Layanan AWS Lambda akan memerlukan izin untuk mencatat peristiwa dan menulis ke bucket S3 yang telah kami buat.

Kami akan membuat Peran IAM “Export-RDS-CloudWatch-to-S3-Lambda” dengan kebijakan “AmazonS3FullAccess”, “CloudWatchLogsFullAccess”, dan “CloudWatchEventsFullAccess”.

Buka Dasbor AWS IAM Anda.
Beralih ke Peran dan klik tombol Buat Peran.
Di bawah “Use case”, pilih Lambda dan klik Next.
Cari "AmazonS3FullAccess" dan pilih.
Cari “CloudWatchLogsFullAccess” dan pilih.
Cari “CloudWatchEventsFullAccess” dan pilih.
Tetapkan Nama Peran: “Ekspor-RDS-CloudWatch-to-S3-Lambda” dan klik Buat peran.

Mencari AHLI AWS? LIHAT DI SINI

Lambda (Fungsi untuk mengotomatiskan ekspor CloudWatch Logs ke S3)

Fungsi Lambda memungkinkan Anda untuk meletakkan kode Anda di bawah fungsi dan menjalankannya di pemicu. Anda tidak perlu memiliki server atau mengatur untuk ini. Sangat mudah dan efisien!

Beralih ke Dasbor AWS Lambda.
Klik pada Fungsi dan kemudian klik tombol Buat fungsi.

Create Lambda Function

Tetap pilih "Author for Scratch".
Setel "Nama fungsi": Ekspor-RDS-CloudWatch-Logs-To-S3
Di bawah “Runtime”, pilih Python 3.x.
Di bawah "Izin", pilih "Gunakan peran yang ada" dan pilih peran IAM yang kita buat di langkah sebelumnya.

Configure Lambda Function

Klik pada fungsi Buat dan arahkan ke tampilan Kode dan masukkan skrip berikut:

impor boto3
impor os
waktu impor

GROUP_NAME = os.environ['GROUP_NAME'] DESTINATION_BUCKET = os.environ['DESTINATION_BUCKET'] PREFIX = os.environ['PREFIX'] NDAYS = os.environ['NDAYS'] nDays = int(NDAYS)

waktu saat ini = datetime.datetime.now()
StartDate = currentTime – datetime.timedelta(hari=nHari)
EndDate = currentTime – datetime.timedelta(hari=nHari – 1)

fromDate = int(TanggalMulai.timestamp() * 1000)
toDate = int(EndDate.timestamp() * 1000)

BUCKET_PREFIX = os.path.join(PREFIX, StartDate.strftime('%Y{0}%m{0}%d').format(os.path.sep))

def lambda_handler(acara, konteks):
klien = boto3.client('log')
klien.buat_ekspor_tugas(
logGroupName=GROUP_NAME,
dariWaktu=dariTanggal,
sampai=sampaiTanggal,
tujuan=DESTINATION_BUCKET,
destinationPrefix=BUCKET_PREFIX
)

Sekarang, klik Konfigurasi Variabel Lingkungan.
Kita perlu membuat 4 variabel:
DESTINATION_BUCKET: <Nama bucket S3 Anda>
GROUP_NAME: <Nama grup log yang Anda ekspor>
NDAYS: 1
PREFIX: diekspor-log

Lambda Environment Variables

Baiklah, Anda sudah siap sekarang. Simpan fungsinya.

Sekarang, mari kita atur otomatisasi untuk menjalankan fungsi lambda ini.

Sekarang, kunjungi dasbor CloudWatch Anda.
Pergi ke Acara Aturan.
Klik Buat Aturan.
Di bawah Sumber Acara, pilih Jadwal.
Atur Tingkat tetap atau ekspresi cron untuk menjalankan fungsi lambda kita secara otomatis.
Di bawah Target, pilih Fungsi Lambda.
Di bawah Fungsi, pilih fungsi yang telah kita buat di langkah sebelumnya.

Cron to Execute Lambda Function

Ini semua. Sekarang, Anda telah menyiapkan lingkungan untuk mengekspor log RDS ke S3 secara otomatis. Anda dapat menyimpan log selama yang Anda inginkan. Tapi, jika Anda masih menghadapi masalah apapun, jangan ragu untuk mengirim komentar di sini. Kami akan senang mendengar dari Anda!!

Mencari AHLI AWS? LIHAT DI SINI