Come esportare automaticamente i log di audit di AWS RDS nell'istanza del bucket S3?
Pubblicato: 2022-03-05Prima di apprendere come esportare automaticamente i log di audit RDS in S3, sapevi che AWS CloudWatch archivia automaticamente i log di database RDS? Sì, lo fanno, ma archiviano solo i log generali per la tua istanza database. Ora, cosa succede se si desidera trovare una query o dati specifici dal registro? Quale utente ha eseguito una query particolare o da quale indirizzo IP? Chi ha cancellato determinati record dalle tue tabelle DB?
Inoltre, in qualche modo sei riuscito a esportare tutti i log di controllo della tua istanza RDS su CloudWatch, il che è fantastico. Ma, lo sai? CloudWatch conserverà quei log solo per 30 giorni!! Per conservarli per un periodo più lungo, devi esportare i log di CloudWatch nel bucket S3. Puoi farlo manualmente dalla dashboard di CloudWatch. Ma cosa succede se si desidera avere l'automazione per questo?
Questa guida ti guiderà attraverso tutti i passaggi necessari per registrare automaticamente tutti questi eventi!!
Questa guida include:
1) Modifica le impostazioni RDS per inviare i log di controllo a CloudWatch
2) Crea un bucket S3 (per archiviare i log di controllo di CloudWatch)
3) Crea ruolo IAM (lo useremo per l'automazione Lambda)
4) Lambda (Funzione per automatizzare l'esportazione di CloudWatch Logs in S3)
Cominciamo!
Modifica le impostazioni RDS per inviare i log di controllo a CloudWatch
Prima di tutto, dobbiamo modificare l'RDS per inviare log specifici a CloudWatch. Per fare ciò, creeremo un gruppo di opzioni e un gruppo di parametri.
Crea gruppo di opzioni
⇒ Visita la dashboard di Amazon RDS.
⇒ Vai al gruppo di opzioni.
⇒ Fare clic sul pulsante Crea gruppo.
⇒ Immettere il Nome e la Descrizione per questo gruppo.
⇒ Seleziona Motore: mysql e Versione motore: 8.0. Fare clic su Crea.
⇒ Fare clic sul gruppo di opzioni che hai creato.
⇒ Nella sezione Opzioni, fare clic sul pulsante Aggiungi opzione.
⇒ Sotto l'opzione "SERVER_AUDIT_EVENTS*", inserisci i valori che vuoi controllare, ad esempio CONNECT, QUERY, QUERY_DDL, QUERY_DML, QUERY_DCL, QUERY_DML_NO_SELECT. Se vuoi registrare tutte le query eseguite sulle tue tabelle, inserisci QUERY in questo campo.
⇒ Impostare "Sì" per Applicare immediatamente. Fare clic su Aggiungi opzione.
Crea gruppo di parametri
⇒ Apriamo il dashboard di Amazon RDS.
⇒ Fare clic sul gruppo di parametri.
⇒ Fare clic sul pulsante Crea gruppo di parametri.
⇒ Selezionare “Famiglia del gruppo di parametri”: mysql8.0
⇒ Selezionare “Tipo”: Gruppo di parametri DB
⇒ Immettere il nome e la descrizione del gruppo. Fare clic su Crea.
⇒ Adesso clicca sul Gruppo di parametri che hai creato.
⇒ In Parametro, modificheremo determinati parametri e imposteremo i seguenti valori:
⇒ Modifica parametro: “log_output” ⇒ Modifica il suo valore da TABLE a FILE
⇒ Modifica parametro: “slow_query_log” ⇒ Cambia il suo valore da BLANK a 1
⇒ Modifica parametro: “general_log” ⇒ Modifica il suo valore da BLANK a 1
Ora, siamo tutti impostati con il nostro gruppo di opzioni e il gruppo di parametri. Ora assegniamo questi gruppi al nostro RDS.
⇒ Vai al tuo dashboard RDS.
⇒ Fare clic sull'RDS che hai creato.
⇒ Fare clic su Modifica.
⇒ Scorri la pagina verso il basso e vai alla sezione “Opzioni database”.
⇒ In “Gruppo di parametri DB”, selezionare il gruppo di parametri che hai creato.
⇒ In "Gruppo di opzioni", seleziona il gruppo di opzioni che hai creato.
Ora siamo tutti a posto con l'RDS. Una volta completati i passaggi precedenti, attendi 20-30 minuti per popolare i dati in CloudWatch (NOTA: potrebbe volerci più tempo a seconda delle dimensioni dei log).
Una volta che CloudWatch ha raccolto tutti i log, vedrai i log di controllo nel tuo CloudWatch Dashboard. Sembrerà la seguente immagine:
Crea un bucket S3 (per archiviare i log di controllo di CloudWatch)
⇒ Vai al dashboard di Amazon S3.
⇒ Crea un nuovo Bucket.
⇒ Dopo aver creato un bucket, aprilo e vai alla scheda Autorizzazioni.
⇒ Dovremo consentire a CloudWatch di inserire oggetti nel bucket (Write Access)
⇒ Fare clic sul pulsante Modifica per la politica del secchio. Inserisci il seguente codice:
{
“Versione”: “17-10-2012”,
"Dichiarazione": [
{
“Effetto”: “Consenti”,
"Principale": {
“Servizio”: “logs.YOUR-REGION.amazonaws.com” // cioè logs.us-east-1.amazonaws.com
},
"Azione": "s3:GetBucketAcl",
“Risorsa”: “arn:aws:s3:::BUCKET_NAME_HERE”
},
{
“Effetto”: “Consenti”,
"Principale": {
“Servizio”: “logs.YOUR-REGION.amazonaws.com”
},
“Azione”: “s3:PutObject”,
“Risorsa”: “arn:aws:s3:::BUCKET_NAME_HERE/*”,
"Condizione": {
"Stringa uguale": {
“s3:x-amz-acl”: “bucket-owner-full-control”
}
}
}
] }
Crea ruolo IAM (lo useremo per l'automazione Lambda)
Ora creeremo il ruolo IAM che verrà utilizzato nella configurazione della funzione Lambda. Il servizio AWS Lambda richiederà l'autorizzazione per registrare eventi e scrivere nel bucket S3 che abbiamo creato.
Creeremo il ruolo IAM "Export-RDS-CloudWatch-to-S3-Lambda" con i criteri "AmazonS3FullAccess", "CloudWatchLogsFullAccess" e "CloudWatchEventsFullAccess".
⇒ Apri la dashboard di AWS IAM.
⇒ Passa ai ruoli e fai clic sul pulsante Crea ruolo.
⇒ In "Usa caso", selezionare Lambda e fare clic su Avanti.
⇒ Cerca "AmazonS3FullAccess" e selezionalo.
⇒ Cerca "CloudWatchLogsFullAccess" e selezionalo.
⇒ Cerca "CloudWatchEventsFullAccess" e selezionalo.
⇒ Imposta il nome del ruolo: "Esporta-RDS-CloudWatch-to-S3-Lambda" e fai clic su Crea ruolo.
Lambda (Funzione per automatizzare l'esportazione di CloudWatch Logs in S3)
La funzione Lambda ti consente di inserire il tuo codice sotto la funzione ed eseguirlo sui trigger. Non è necessario disporre di alcun server o configurato per questo. Molto facile ed efficiente!
⇒ Passa al dashboard di AWS Lambda.
⇒ Fare clic su Funzioni e quindi fare clic sul pulsante Crea funzione.
⇒ Mantieni selezionato "Autore per Scratch".
⇒ Imposta "Nome funzione": Export-RDS-CloudWatch-Logs-To-S3
⇒ In "Runtime", seleziona Python 3.x.
⇒ In "Autorizzazioni", seleziona "Utilizza un ruolo esistente" e seleziona il ruolo IAM che abbiamo creato nel passaggio precedente.
⇒ Fare clic sulla funzione Crea e passare a Vista codice e immettere il seguente script:
importa boto3
importare os
importa data e oraGROUP_NAME = os.environ['GROUP_NAME'] DESTINATION_BUCKET = os.environ['DESTINATION_BUCKET'] PREFIX = os.environ['PREFIX'] NDAYS = os.environ['NDAYS'] nDays = int(NDAYS)
ora corrente = 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(evento, contesto):
client = boto3.client('logs')
client.create_export_task(
logGroupName=GROUP_NAME,
fromTime=fromDate,
a=ad oggi,
destinazione=DESTINATION_BUCKET,
destinationPrefix=BUCKET_PREFIX
)
⇒ Ora, fai clic su Configurazione ⇒ Variabili d'ambiente.
⇒ Dobbiamo creare 4 variabili:
⇒ DESTINATION_BUCKET: <Nome del tuo bucket S3>
⇒ GROUP_NAME: <Nome del gruppo di log che stai esportando>
⇒ NGIORNI: 1
⇒ PREFISSO: log esportati
⇒ Bene, ora sei a posto. Salva la funzione.
Ora, impostiamo l'automazione per eseguire questa funzione lambda.
⇒ Ora, visita la dashboard di CloudWatch.
⇒ Vai a Eventi ⇒ Regole.
⇒ Fare clic su Crea regola.
⇒ In Origine evento, seleziona Programma.
⇒ Imposta la frequenza fissa o l'espressione cron per eseguire automaticamente la nostra funzione lambda.
⇒ Sotto Destinazione, seleziona Funzione Lambda.
⇒ In Funzione, seleziona la funzione che abbiamo creato nel passaggio precedente.
Questo è tutto. Ora hai impostato un ambiente per esportare automaticamente i log RDS in S3. Puoi conservare i registri per tutto il tempo che desideri. Ma, se riscontri ancora problemi, sentiti libero di pubblicare un commento qui. Ci piacerebbe avere tue notizie!!