AWS RDS Denetim Günlüklerini S3 Bucket örneğine Otomatik Olarak Nasıl Dışa Aktarırım?
Yayınlanan: 2022-03-05RDS 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!
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.
⇒ 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.
⇒ 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.
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.
⇒ "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.
⇒ Ş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.
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:
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.
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.
⇒ "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.
⇒ 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 aktarGROUP_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
⇒ 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.
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!!