AWS RDS Denetim Günlüklerini S3 Bucket örneğine Otomatik Olarak Nasıl Dışa Aktarırım?

Yayınlanan: 2022-03-05

Export RDS logs to S3 Bucket

RDS Denetim günlüklerini otomatik olarak S3'e nasıl aktaracağımızı öğrenmeden önce, AWS CloudWatch'ın RDS DB günlüklerini otomatik olarak depoladığını biliyor muydunuz? Evet, yaparlar, ancak yalnızca DB bulut sunucunuz için genel günlükleri depolarlar. Şimdi, günlükten belirli bir sorgu veya veri bulmak isterseniz ne olur? Hangi kullanıcı belirli bir sorguyu gerçekleştirdi veya hangi IP Adresinden? DB tablolarınızdan belirli kayıtları kim sildi?

Ayrıca, bir şekilde RDS örneğinizin tüm denetim günlüklerini CloudWatch'a aktarmayı başardınız, bu harika. Ama biliyor musun? CloudWatch bu günlükleri yalnızca 30 gün boyunca saklayacaktır!! Bunları daha uzun süre saklamak için CloudWatch günlüklerini S3 klasörüne aktarmanız gerekir. Bunu CloudWatch panosundan manuel olarak yapabilirsiniz. Peki ya bunun için otomasyona sahip olmak istiyorsanız?

Bu kılavuz, tüm bu tür olayları otomatik olarak kaydetmek için gereken tüm adımlarda size yol gösterecektir!

AWS UZMANLARI mı arıyorsunuz? BURADAN KONTROL EDİN

Bu kılavuz şunları içerir:

1) Denetim günlüklerini CloudWatch'a göndermek için RDS ayarlarını değiştirin
2) Bir S3 Paketi Oluşturun (CloudWatch Denetim Günlüklerini Saklamak İçin)
3) IAM Rolü Oluşturun (Bunu Lambda otomasyonu için kullanacağız)
4) Lambda (CloudWatch Logs'un S3'e dışa aktarılmasını otomatikleştirme işlevi)

Hadi başlayalım!

Denetim Günlüklerini CloudWatch'a Göndermek için RDS Ayarlarını Değiştirin

Her şeyden önce, belirli günlükleri CloudWatch'a göndermek için RDS'de ince ayar yapmamız gerekiyor. Bunu yapmak için bir Seçenek Grubu ve bir Parametre Grubu oluşturacağız.

Seçenek Grubu Oluştur

⇒ Amazon RDS Kontrol Panelinizi ziyaret edin.
⇒ Seçenek Grubuna gidin.
⇒ Grup Oluştur düğmesine tıklayın.

Create an Option Group

⇒ Bu grup için Ad ve Açıklama girin.
⇒ Motor: mysql ve Motor Sürümü: 8.0'ı seçin. Oluştur'a tıklayın.

Create an Option Group

⇒ Oluşturduğunuz Seçenek Grubuna tıklayın.
⇒ Seçenekler bölümünde, Seçenek ekle düğmesine tıklayın.
⇒ “SERVER_AUDIT_EVENTS*” seçeneği altında, denetlemek istediğiniz değerleri girin, yani CONNECT, QUERY, QUERY_DDL, QUERY_DML, QUERY_DCL, QUERY_DML_NO_SELECT. Tablolarınızda çalışan tüm sorguları günlüğe kaydetmek istiyorsanız, bu alana QUERY yazmanız yeterlidir.
⇒ Hemen Uygula için “Evet”i ayarlayın. Seçenek Ekle'ye tıklayın.

Option Group Settings

AWS UZMANLARI mı arıyorsunuz? BURADAN KONTROL EDİN

Parametre Grubu Oluştur

⇒ Amazon RDS Dashboard'u açalım.
⇒ Parametre Grubuna tıklayın.
⇒ Parametre Grubu Oluştur düğmesine tıklayın.

Create Parameter Group

⇒ "Parametre grubu ailesi"ni seçin: mysql8.0
⇒ “Tür”ü seçin: DB Parametre Grubu
⇒ Grup Adını ve Açıklamasını girin. Oluştur'a tıklayın.

Create Parameter Group

⇒ Şimdi oluşturduğunuz parametre Grubuna tıklayın.
⇒ Parametre altında belirli parametreleri düzenleyeceğiz ve aşağıdaki değerleri ayarlayacağız:
⇒ Parametreyi düzenle: “log_output” ⇒ Değerini TABLO'dan DOSYA'ya değiştirin
⇒ Parametreyi düzenle: “slow_query_log” ⇒ Değerini BLANK'tan 1'e değiştirin
⇒ Parametreyi düzenle: “general_log” ⇒ Değerini BLANK'tan 1'e değiştirin

Şimdi, Seçenek Grubumuz ve Parametre Grubumuzla hazırız. Şimdi bu grupları RDS'mize ayıralım.

⇒ RDS Panonuza gidin.
⇒ Oluşturduğunuz RDS'ye tıklayın.
⇒ Değiştir'e tıklayın.
⇒ Sayfayı aşağı kaydırın ve “Veritabanı seçenekleri” bölümüne gidin.
⇒ “DB parametre grubu” altında, oluşturduğunuz parametre grubunu seçin.
⇒ Seçenek grubu altında, oluşturduğunuz seçenek grubunu seçin.

Tweak RDS Settings

Artık hepimiz RDS ile hazırız. Yukarıdaki adımları tamamladığınızda, lütfen verileri CloudWatch'ta doldurmak için 20-30 dakika bekleyin (NOT: Günlüklerin boyutuna bağlı olarak daha fazla zaman alabilir).

CloudWatch tüm günlükleri topladıktan sonra, CloudWatch Panonuz altında denetim günlüklerini göreceksiniz. Aşağıdaki görüntü gibi görünecek:

CloudWatch Log Groups

AWS UZMANLARI mı arıyorsunuz? BURADAN KONTROL EDİN

Bir S3 Paketi Oluşturun (CloudWatch Denetim Günlüklerini Depolamak İçin)

⇒ Amazon S3 Dashboard'a gidin.
⇒ Yeni bir Kova oluşturun.
⇒ Bir kova oluşturduktan sonra açın ve İzinler sekmesine gidin.
⇒ CloudWatch'in nesneleri kovaya koymasına izin vermemiz gerekecek (Yazma Erişimi)
⇒ Kova politikası için Düzenle düğmesine tıklayın. Aşağıdaki kodu girin:

{
“Sürüm”: “2012-10-17”,
"Beyan": [
{
“Efekt”: “İzin Ver”,
"Müdür": {
"Hizmet": "logs.BÖLGEİNİZ.amazonaws.com" // yani logs.us-east-1.amazonaws.com
},
"Eylem": "s3:GetBucketAcl",
"Kaynak": "arn:aws:s3:::BUCKET_NAME_HERE"
},
{
“Efekt”: “İzin Ver”,
"Müdür": {
"Hizmet": "logs.BÖLGEİNİZ.amazonaws.com"
},
“Eylem”: “s3:PutObject”,
“Kaynak”: “arn:aws:s3:::BUCKET_NAME_HERE/*”,
"Şart": {
"StringEquals": {
"s3:x-amz-acl": "kova sahibi-tam kontrol"
}
}
}
] }

IAM Rolü Oluştur (Bunu Lambda otomasyonu için kullanacağız)

Şimdi Lambda fonksiyon kurulumunda kullanılacak olan IAM rolünü oluşturacağız. AWS Lambda hizmeti, olayları günlüğe kaydetmek ve oluşturduğumuz S3 kovasına yazmak için izin gerektirecektir.

“AmazonS3FullAccess”, “CloudWatchLogsFullAccess” ve “CloudWatchEventsFullAccess” politikalarıyla “Export-RDS-CloudWatch-to-S3-Lambda” IAM Rolünü oluşturacağız.

⇒ AWS IAM Dashboard'unuzu açın.
⇒ Rollere geçin ve Rol Oluştur düğmesine tıklayın.
⇒ "Kullanım senaryosu" altında, Lambda'yı seçin ve İleri'ye tıklayın.
⇒ “AmazonS3FullAccess”i arayın ve seçin.
⇒ “CloudWatchLogsFullAccess”i arayın ve seçin.
⇒ “CloudWatchEventsFullAccess”i arayın ve seçin.
⇒ Rol Adını Ayarlayın: “RDS-CloudWatch-to-S3-Lambda” ve Rol oluştur'a tıklayın.

AWS UZMANLARI mı arıyorsunuz? BURADAN KONTROL EDİN

Lambda (CloudWatch Logs'u S3'e aktarmayı otomatikleştirme işlevi)

Lambda işlevi, kodunuzu işlevin altına koymanıza ve tetikleyicilerde çalıştırmanıza olanak tanır. Bunun için herhangi bir sunucunuz veya kurulumunuz olması gerekmez. Çok kolay ve verimli!

⇒ AWS Lambda Dashboard'a geçin.
⇒ İşlevler'e tıklayın ve ardından İşlev oluştur düğmesine tıklayın.

Create Lambda Function

⇒ "Scratch için Yazar"ı seçili tutun.
⇒ “İşlev adı”nı ayarlayın: Dışa Aktar-RDS-CloudWatch-Günlükleri-S3'e
⇒ “Çalışma Zamanı” altında Python 3.x'i seçin.
⇒ "İzinler" altında, "Mevcut bir rolü kullan"ı seçin ve bir önceki adımda oluşturduğumuz IAM rolünü seçin.

Configure Lambda Function

⇒ Oluştur işlevine tıklayın ve Kod görünümüne gidin ve aşağıdaki komut dosyasını girin:

boto3'ü içe aktar
işletim sistemini içe aktar
tarih saatini içe aktar

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

currentTime = datetime.datetime.now()
StartDate = currentTime – datetime.timedelta(days=nDays)
EndDate = currentTime – datetime.timedelta(days=nDays – 1)

fromDate = int(StartDate.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(olay, bağlam):
istemci = boto3.client('günlükler')
client.create_export_task(
logGroupName=GROUP_NAME,
fromTime=fromDate,
to=toDate,
hedef=HEDEF_BUCKET,
hedefÖnek=BUCKET_PREFIX
)

⇒ Şimdi, Yapılandırma ⇒ Ortam Değişkenleri'ne tıklayın.
⇒ 4 değişken oluşturmamız gerekiyor:
⇒ HEDEF_BUCKET: <S3 paketinizin adı>
⇒ GROUP_NAME: <Dışa aktardığınız Günlüğün grup adı>
⇒ GÜNLER: 1
⇒ ÖNEK: dışa aktarılan günlükler

Lambda Environment Variables

⇒ Pekala, şimdi hazırsınız. Fonksiyonu kaydedin.

Şimdi bu lambda işlevini çalıştırmak için otomasyonu ayarlayalım.

⇒ Şimdi, CloudWatch kontrol panelinizi ziyaret edin.
⇒ Etkinliklere gidin ⇒ Kurallar.
⇒ Kural Oluştur'a tıklayın.
⇒ Olay Kaynağı altında, Planla'yı seçin.
⇒ Lambda işlevimizi otomatik olarak çalıştırmak için Sabit oran veya cron ifadesini ayarlayın.
⇒ Hedef altında, Lambda İşlevi'ni seçin.
⇒ Function altında bir önceki adımda oluşturduğumuz fonksiyonu seçiniz.

Cron to Execute Lambda Function

Hepsi bu. Artık, RDS günlüklerini otomatik olarak S3'e aktarmak için bir ortam ayarladınız. Günlükleri istediğiniz kadar tutabilirsiniz. Ancak yine de herhangi bir sorunla karşılaşırsanız, buraya yorum yazmaktan çekinmeyin. Sizden haber almak isteriz!!

AWS UZMANLARI mı arıyorsunuz? BURADAN KONTROL EDİN