Wie exportiere ich AWS RDS-Audit-Protokolle automatisch in eine S3-Bucket-Instance?

Veröffentlicht: 2022-03-05

Export RDS logs to S3 Bucket

Bevor wir lernen, wie RDS-Audit-Protokolle automatisch nach S3 exportiert werden, wussten Sie, dass AWS CloudWatch automatisch RDS-DB-Protokolle speichert? Ja, aber sie speichern nur die allgemeinen Protokolle für Ihre DB-Instance. Was ist nun, wenn Sie eine bestimmte Abfrage oder Daten aus dem Protokoll finden möchten? Welcher Benutzer hat eine bestimmte Anfrage ausgeführt oder von welcher IP-Adresse? Wer hat bestimmte Datensätze aus Ihren DB-Tabellen gelöscht?

Außerdem haben Sie es irgendwie geschafft, alle Audit-Protokolle Ihrer RDS-Instanz nach CloudWatch zu exportieren, was großartig ist. Aber wissen Sie? CloudWatch bewahrt diese Protokolle nur 30 Tage lang auf!! Um sie für einen längeren Zeitraum aufzubewahren, müssen Sie CloudWatch-Protokolle in den S3-Bucket exportieren. Sie können dies manuell über das CloudWatch-Dashboard tun. Aber was ist, wenn Sie dafür eine Automatisierung haben möchten?

Dieser Leitfaden führt Sie durch alle Schritte, die erforderlich sind, um alle derartigen Ereignisse automatisch zu protokollieren!!

Auf der Suche nach AWS-EXPERTEN? HIER ZUR KASSE

Dieser Leitfaden enthält:

1) Optimieren Sie die RDS-Einstellungen, um Überwachungsprotokolle an CloudWatch zu senden
2) Erstellen Sie einen S3-Bucket (zum Speichern von CloudWatch-Audit-Protokollen)
3) IAM-Rolle erstellen (Wir werden diese für die Lambda-Automatisierung verwenden)
4) Lambda (Funktion zum Automatisieren des Exports von CloudWatch Logs nach S3)

Lass uns anfangen!

Optimieren Sie die RDS-Einstellungen, um Überwachungsprotokolle an CloudWatch zu senden

Zunächst müssen wir den RDS optimieren, um bestimmte Protokolle an CloudWatch zu senden. Dazu erstellen wir eine Optionsgruppe und eine Parametergruppe.

Optionsgruppe erstellen

⇒ Besuchen Sie Ihr Amazon RDS-Dashboard.
⇒ Gehen Sie zur Optionsgruppe.
⇒ Klicken Sie auf die Schaltfläche Gruppe erstellen.

Create an Option Group

⇒ Geben Sie den Namen und die Beschreibung für diese Gruppe ein.
⇒ Wählen Sie Engine: mysql und Engine-Version: 8.0. Klicken Sie auf Erstellen.

Create an Option Group

⇒ Klicken Sie auf die von Ihnen erstellte Optionsgruppe.
⇒ Klicken Sie im Abschnitt Optionen auf die Schaltfläche Option hinzufügen.
⇒ Geben Sie unter der Option „SERVER_AUDIT_EVENTS*“ die Werte ein, die Sie prüfen möchten, dh CONNECT, QUERY, QUERY_DDL, QUERY_DML, QUERY_DCL, QUERY_DML_NO_SELECT. Wenn Sie alle auf Ihren Tabellen ausgeführten Abfragen protokollieren möchten, geben Sie einfach QUERY in dieses Feld ein.
⇒ Stellen Sie „Ja“ für „Sofort anwenden“ ein. Klicken Sie auf Option hinzufügen.

Option Group Settings

Auf der Suche nach AWS-EXPERTEN? HIER ZUR KASSE

Parametergruppe erstellen

⇒ Öffnen wir das Amazon RDS Dashboard.
⇒ Klicken Sie auf die Parametergruppe.
⇒ Klicken Sie auf die Schaltfläche Parametergruppe erstellen.

Create Parameter Group

⇒ „Parametergruppenfamilie“ auswählen: mysql8.0
⇒ Wählen Sie „Typ“: DB-Parametergruppe
⇒ Gruppenname und Beschreibung eingeben. Klicken Sie auf Erstellen.

Create Parameter Group

⇒ Klicken Sie nun auf die von Ihnen erstellte Parametergruppe.
⇒ Unter Parameter bearbeiten wir bestimmte Parameter und stellen folgende Werte ein:
⇒ Parameter bearbeiten: „log_output“ ⇒ Wert von TABLE auf FILE ändern
⇒ Parameter bearbeiten: „slow_query_log“ ⇒ Ändern Sie dessen Wert von BLANK auf 1
⇒ Parameter bearbeiten: „general_log“ ⇒ Ändern Sie dessen Wert von BLANK auf 1

Jetzt sind wir mit unserer Optionsgruppe und Parametergruppe fertig. Lassen Sie uns nun diese Gruppen unserem RDS zuweisen.

⇒ Gehen Sie zu Ihrem RDS-Dashboard.
⇒ Klicken Sie auf den von Ihnen erstellten RDS.
⇒ Klicken Sie auf Ändern.
⇒ Scrollen Sie auf der Seite nach unten und gehen Sie zum Abschnitt „Datenbankoptionen“.
⇒ Wählen Sie unter „DB-Parametergruppe“ die von Ihnen erstellte Parametergruppe aus.
⇒ Wählen Sie unter „Optionsgruppe“ die von Ihnen erstellte Optionsgruppe aus.

Tweak RDS Settings

Wir sind jetzt mit dem RDS fertig. Wenn Sie mit den obigen Schritten fertig sind, warten Sie bitte 20 bis 30 Minuten, um die Daten in CloudWatch zu füllen (HINWEIS: Je nach Größe der Protokolle kann es länger dauern).

Sobald CloudWatch alle Protokolle gesammelt hat, sehen Sie die Audit-Protokolle unter Ihrem CloudWatch-Dashboard. Es wird wie im folgenden Bild aussehen:

CloudWatch Log Groups

Auf der Suche nach AWS-EXPERTEN? HIER ZUR KASSE

Erstellen Sie einen S3-Bucket (zum Speichern von CloudWatch-Audit-Protokollen)

⇒ Gehen Sie zum Amazon S3-Dashboard.
⇒ Neuen Bucket erstellen.
⇒ Nachdem Sie einen Bucket erstellt haben, öffnen Sie ihn und navigieren Sie zur Registerkarte Berechtigungen.
⇒ Wir müssen CloudWatch erlauben, Objekte in den Bucket zu legen (Schreibzugriff)
⇒ Klicken Sie auf die Schaltfläche Bearbeiten für die Bucket-Richtlinie. Geben Sie den folgenden Code ein:

{
„Fassung“: „2012-10-17“,
"Aussage": [
{
„Effekt“: „Zulassen“,
"Rektor": {
„Dienst“: „logs.YOUR-REGION.amazonaws.com“ // dh logs.us-east-1.amazonaws.com
},
„Aktion“: „s3:GetBucketAcl“,
„Ressource“: „arn:aws:s3:::BUCKET_NAME_HERE“
},
{
„Effekt“: „Zulassen“,
"Rektor": {
„Dienst“: „logs.IHRE-REGION.amazonaws.com“
},
„Aktion“: „s3:PutObject“,
„Ressource“: „arn:aws:s3:::BUCKET_NAME_HERE/*“,
"Bedingung": {
„StringEquals“: {
„s3:x-amz-acl“: „Bucket-Eigentümer-Vollkontrolle“
}
}
}
] }

IAM-Rolle erstellen (Wir werden diese für die Lambda-Automatisierung verwenden)

Jetzt erstellen wir die IAM-Rolle, die bei der Einrichtung der Lambda-Funktion verwendet wird. Der AWS Lambda-Service benötigt die Berechtigung, Ereignisse zu protokollieren und in den von uns erstellten S3-Bucket zu schreiben.

Wir erstellen die IAM-Rolle „Export-RDS-CloudWatch-to-S3-Lambda“ mit den Richtlinien „AmazonS3FullAccess“, „CloudWatchLogsFullAccess“ und „CloudWatchEventsFullAccess“.

⇒ Öffnen Sie Ihr AWS IAM-Dashboard.
⇒ Wechseln Sie zu den Rollen und klicken Sie auf die Schaltfläche Rolle erstellen.
⇒ Unter „Anwendungsfall“ Lambda auswählen und auf Weiter klicken.
⇒ Suchen Sie nach „AmazonS3FullAccess“ und wählen Sie es aus.
⇒ Suchen Sie nach „CloudWatchLogsFullAccess“ und wählen Sie es aus.
⇒ Suchen Sie nach „CloudWatchEventsFullAccess“ und wählen Sie es aus.
⇒ Legen Sie den Rollennamen fest: „Export-RDS-CloudWatch-to-S3-Lambda“ und klicken Sie auf Rolle erstellen.

Auf der Suche nach AWS-EXPERTEN? HIER ZUR KASSE

Lambda (Funktion zum Automatisieren des CloudWatch Logs-Exports nach S3)

Mit der Lambda-Funktion können Sie Ihren Code unter die Funktion stellen und auf Triggern ausführen. Sie müssen dafür keinen Server haben oder einrichten. Sehr einfach und effizient!

⇒ Wechseln Sie zum AWS Lambda Dashboard.
⇒ Klicken Sie auf die Funktionen und dann auf die Schaltfläche Funktion erstellen.

Create Lambda Function

⇒ Lassen Sie „Author for Scratch“ ausgewählt.
⇒ Stellen Sie „Funktionsname“ ein: Export-RDS-CloudWatch-Logs-To-S3
⇒ Wählen Sie unter „Laufzeit“ Python 3.x aus.
⇒ Wählen Sie unter „Berechtigungen“ „Vorhandene Rolle verwenden“ und wählen Sie die IAM-Rolle aus, die wir im vorherigen Schritt erstellt haben.

Configure Lambda Function

⇒ Klicken Sie auf die Funktion Erstellen und navigieren Sie zur Codeansicht und geben Sie das folgende Skript ein:

boto3 importieren
Betriebssystem importieren
datetime importieren

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

aktuelleZeit = datetime.datetime.now()
Startdatum = aktuelleZeit – datetime.timedelta(days=nDays)
EndDate = aktuelleZeit – 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(Ereignis, Kontext):
client = boto3.client('Protokolle')
client.create_export_task(
logGroupName=GROUP_NAME,
fromTime=fromDate,
bis=bisDatum,
destination=DESTINATION_BUCKET,
destinationPrefix=BUCKET_PREFIX
)

⇒ Klicken Sie nun auf Configuration ⇒ Environment Variables.
⇒ Wir müssen 4 Variablen erstellen:
⇒ DESTINATION_BUCKET: <Name Ihres S3-Buckets>
⇒ GROUP_NAME: <Gruppenname des Protokolls, das Sie exportieren>
⇒ NTAGE: 1
⇒ PRÄFIX: exportierte Protokolle

Lambda Environment Variables

⇒ In Ordnung, Sie sind jetzt eingestellt. Speichern Sie die Funktion.

Lassen Sie uns nun die Automatisierung so einstellen, dass diese Lambda-Funktion ausgeführt wird.

⇒ Besuchen Sie jetzt Ihr CloudWatch-Dashboard.
⇒ Gehen Sie zu Events ⇒ Rules.
⇒ Klicken Sie auf Regel erstellen.
⇒ Unter Ereignisquelle wählen Sie Zeitplan.
⇒ Feste Rate oder Cron-Ausdruck festlegen, um unsere Lambda-Funktion automatisch auszuführen.
⇒ Wählen Sie unter Ziel Lambda-Funktion aus.
⇒ Wählen Sie unter Funktion die Funktion aus, die wir im vorherigen Schritt erstellt haben.

Cron to Execute Lambda Function

Das ist alles. Jetzt haben Sie eine Umgebung zum automatischen Exportieren von RDS-Protokollen nach S3 eingerichtet. Sie können die Protokolle so lange aufbewahren, wie Sie möchten. Wenn Sie jedoch immer noch auf ein Problem stoßen, können Sie hier einen Kommentar hinterlassen. Wir würden uns freuen, von Ihnen zu hören!!

Auf der Suche nach AWS-EXPERTEN? HIER ZUR KASSE