Cum să exportați automat jurnalele de audit AWS RDS în instanța S3 Bucket?
Publicat: 2022-03-05Înainte să învățăm cum să exportăm automat jurnalele de audit RDS în S3, știați că AWS CloudWatch stochează automat jurnalele RDS DB? Da, o fac, dar stochează doar jurnalele generale pentru instanța dumneavoastră DB. Acum, ce se întâmplă dacă doriți să găsiți o anumită interogare sau date din jurnal? Ce utilizator a efectuat o anumită interogare sau de la ce adresă IP? Cine a șters anumite înregistrări din tabelele dvs. DB?
De asemenea, cumva ați reușit să exportați toate jurnalele de audit ale instanței RDS în CloudWatch, ceea ce este grozav. Dar, știi? CloudWatch va păstra acele jurnale numai timp de 30 de zile!! Pentru a le păstra pentru o perioadă mai lungă, trebuie să exportați jurnalele CloudWatch în compartimentul S3. Puteți face acest lucru manual din tabloul de bord CloudWatch. Dar, ce se întâmplă dacă doriți să aveți automatizare pentru asta?
Acest ghid vă va ghida prin toți pașii necesari pentru a înregistra automat astfel de evenimente!!
Acest ghid include:
1) Modificați setările RDS pentru a trimite jurnalele de audit către CloudWatch
2) Creați o găleată S3 (pentru a stoca jurnalele de audit CloudWatch)
3) Creați un rol IAM (Vom folosi acesta pentru automatizarea Lambda)
4) Lambda (Funcție de automatizare a exportului jurnalelor CloudWatch către S3)
Sa incepem!
Modificați setările RDS pentru a trimite jurnalele de audit către CloudWatch
În primul rând, trebuie să modificăm RDS-ul pentru a trimite jurnalele specifice către CloudWatch. Pentru a face acest lucru, vom crea un grup de opțiuni și un grup de parametri.
Creați grup de opțiuni
⇒ Vizitați tabloul de bord Amazon RDS.
⇒ Accesați Grupul de opțiuni.
⇒ Faceți clic pe butonul Creare grup.
⇒ Introduceți Numele și Descrierea pentru acest grup.
⇒ Selectați Motor: mysql și Versiunea motor: 8.0. Faceți clic pe Creare.
⇒ Faceți clic pe grupul de opțiuni pe care l-ați creat.
⇒ În secțiunea Opțiuni, faceți clic pe butonul Adăugare opțiune.
⇒ Sub opțiunea „SERVER_AUDIT_EVENTS*”, introduceți valorile pe care doriți să le auditați, adică CONNECT, QUERY, QUERY_DDL, QUERY_DML, QUERY_DCL, QUERY_DML_NO_SELECT. Dacă doriți să înregistrați toate interogările rulate pe tabelele dvs., trebuie doar să introduceți QUERY în acest câmp.
⇒ Setați „Da” pentru Aplicare imediat. Faceți clic pe Adăugare opțiune.
Creați un grup de parametri
⇒ Să deschidem tabloul de bord Amazon RDS.
⇒ Faceți clic pe Grupul de parametri.
⇒ Faceți clic pe butonul Creare grup de parametri.
⇒ Selectați „Familie grup de parametri”: mysql8.0
⇒ Selectați „Tip”: Grup de parametri DB
⇒ Introduceți Numele și Descrierea grupului. Faceți clic pe Creare.
⇒ Acum, faceți clic pe parametrul Grup pe care l-ați creat.
⇒ Sub Parametru, vom edita anumiți parametri și vom seta următoarele valori:
⇒ Editați parametrul: „log_output” ⇒ Schimbați-i valoarea din TABLE în FILE
⇒ Editați parametrul: „slow_query_log” ⇒ Schimbați-i valoarea de la BLANK la 1
⇒ Editați parametrul: „general_log” ⇒ Schimbați-i valoarea de la BLANK la 1
Acum, suntem gata cu grupul nostru de opțiuni și grupul de parametri. Acum, să alocăm aceste grupuri RDS-ului nostru.
⇒ Accesați tabloul de bord RDS.
⇒ Faceți clic pe RDS-ul pe care l-ați creat.
⇒ Faceți clic pe Modificare.
⇒ Derulați în jos în pagină și accesați secțiunea „Opțiuni pentru baze de date”.
⇒ Sub „Grup de parametri DB”, selectați grupul de parametri pe care l-ați creat.
⇒ Sub „Grup de opțiuni”, selectați grupul de opțiuni pe care l-ați creat.
Acum suntem gata cu RDS. După ce ați terminat cu pașii de mai sus, vă rugăm să acordați 20-30 de minute pentru a completa datele în CloudWatch (NOTĂ: poate dura mai mult timp în funcție de dimensiunea jurnalelor).
Odată ce CloudWatch a adunat toate jurnalele, veți vedea jurnalele de audit sub tabloul de bord CloudWatch. Va arăta ca următoarea imagine:
Creați o găleată S3 (pentru a stoca jurnalele de audit CloudWatch)
⇒ Accesați Amazon S3 Dashboard.
⇒ Creați o găleată nouă.
⇒ După ce ați creat o găleată, deschideți-o și navigați la fila Permisiuni.
⇒ Va trebui să permitem CloudWatch să pună obiecte în găleată (Acces de scriere)
⇒ Faceți clic pe butonul Editați pentru politica Bucket. Introdu următorul cod:
{
„Versiune”: „2012-10-17”,
"Afirmație": [
{
„Efect”: „Permite”,
„Principal”: {
„Service”: „logs.YOUR-REGION.amazonaws.com” // adică logs.us-east-1.amazonaws.com
},
„Acțiune”: „s3:GetBucketAcl”,
„Resurse”: „arn:aws:s3:::BUCKET_NAME_HERE”
},
{
„Efect”: „Permite”,
„Principal”: {
„Service”: „logs.YOUR-REGION.amazonaws.com”
},
„Acțiune”: „s3:PutObject”,
„Resurse”: „arn:aws:s3:::BUCKET_NAME_HERE/*”,
"Condiție": {
„StringEquals”: {
„s3:x-amz-acl”: „proprietar-găleată-control complet”
}
}
}
] }
Creați rol IAM (Vom folosi acest rol pentru automatizarea Lambda)
Acum, vom crea rolul IAM care va fi utilizat în configurarea funcției Lambda. Serviciul AWS Lambda va necesita permisiunea de a înregistra evenimente și de a scrie în compartimentul S3 pe care l-am creat.
Vom crea rolul IAM „Export-RDS-CloudWatch-to-S3-Lambda” cu politicile „AmazonS3FullAccess”, „CloudWatchLogsFullAccess” și „CloudWatchEventsFullAccess”.
⇒ Deschideți tabloul de bord AWS IAM.
⇒ Comutați la Roluri și faceți clic pe butonul Creare rol.
⇒ Sub „Caz de utilizare”, selectați Lambda și faceți clic pe Următorul.
⇒ Căutați „AmazonS3FullAccess” și selectați-l.
⇒ Căutați „CloudWatchLogsFullAccess” și selectați-l.
⇒ Căutați „CloudWatchEventsFullAccess” și selectați-l.
⇒ Setați numele rolului: „Export-RDS-CloudWatch-to-S3-Lambda” și faceți clic pe Creare rol.
Lambda (Funcție de automatizare a exportului CloudWatch Logs în S3)
Funcția Lambda vă permite să puneți codul sub funcție și să îl rulați pe declanșatoare. Nu trebuie să aveți niciun server sau configurat pentru asta. Foarte usor si eficient!
⇒ Comutați la AWS Lambda Dashboard.
⇒ Faceți clic pe Funcții și apoi pe butonul Creare funcție.
⇒ Țineți selectat „Author for Scratch”.
⇒ Setați „Numele funcției”: Export-RDS-CloudWatch-Logs-To-S3
⇒ Sub „Runtime”, selectați Python 3.x.
⇒ Sub „Permisiuni”, selectați „Utilizați un rol existent” și selectați rolul IAM pe care l-am creat la pasul anterior.
⇒ Faceți clic pe funcția Creare și navigați la vizualizarea Cod și introduceți următorul script:
import boto3
import os
import datetimeGROUP_NAME = os.environ['GROUP_NAME'] DESTINATION_BUCKET = os.environ['DESTINATION_BUCKET'] PREFIX = os.environ['PREFIX'] NDAYS = os.environ['NDAYS'] nDays = int(NDAYS)
currentTime = datetime.datetime.now()
StartDate = currentTime – datetime.timedelta(zile=nZile)
EndDate = currentTime – datetime.timedelta(zile=nZile – 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(eveniment, context):
client = boto3.client('logs')
client.create_export_task(
logGroupName=GROUP_NAME,
fromTime=fromDate,
to=toDate,
destinație=DESTINATION_BUCKET,
destinationPrefix=BUCKET_PREFIX
)
⇒ Acum, faceți clic pe Configurare ⇒ Variabile de mediu.
⇒ Trebuie să creăm 4 variabile:
⇒ DESTINATION_BUCKET: <Numele găleții dvs. S3>
⇒ GROUP_NAME: <Numele grupului de jurnal pe care îl exportați>
⇒ ZILELE: 1
⇒ PREFIX: jurnalele-exportate
⇒ Bine, sunteți pregătit acum. Salvați funcția.
Acum, să setăm automatizarea pentru a rula această funcție lambda.
⇒ Acum, vizitați tabloul de bord CloudWatch.
⇒ Accesați Evenimente ⇒ Reguli.
⇒ Faceți clic pe Creare regulă.
⇒ Sub Sursa evenimentului, selectați Programare.
⇒ Setați rata fixă sau expresia cron pentru a rula automat funcția noastră lambda.
⇒ Sub Țintă, selectați Funcție Lambda.
⇒ Sub Funcție, selectați funcția pe care am creat-o la pasul anterior.
Asta este tot. Acum, ați configurat un mediu pentru a exporta automat jurnalele RDS în S3. Puteți păstra jurnalele atât timp cât doriți. Dar, dacă încă vă confruntați cu vreo problemă, nu ezitați să postați un comentariu aici. Ne-ar plăcea să auzim de la tine!!