Comment exporter automatiquement les journaux d'audit AWS RDS vers une instance de compartiment S3 ?

Publié: 2022-03-05

Export RDS logs to S3 Bucket

Avant d'apprendre à exporter automatiquement les journaux d'audit RDS vers S3, saviez-vous qu'AWS CloudWatch stocke automatiquement les journaux de base de données RDS ? Oui, ils le font, mais ils ne stockent que les journaux généraux de votre instance de base de données. Maintenant, que se passe-t-il si vous souhaitez rechercher une requête ou des données spécifiques dans le journal ? Quel utilisateur a effectué une requête particulière ou à partir de quelle adresse IP ? Qui a supprimé certains enregistrements de vos tables DB ?

De plus, vous avez réussi à exporter tous les journaux d'audit de votre instance RDS vers CloudWatch, ce qui est formidable. Mais, savez-vous? CloudWatch conservera ces journaux pendant 30 jours seulement !! Pour les conserver plus longtemps, vous devez exporter les journaux CloudWatch vers le compartiment S3. Vous pouvez le faire manuellement à partir du tableau de bord CloudWatch. Mais, que se passe-t-il si vous voulez avoir une automatisation pour cela ?

Ce guide vous guidera à travers toutes les étapes nécessaires pour enregistrer automatiquement tous ces événements !!

Vous recherchez des EXPERTS AWS ? CAISSE ICI

Ce guide comprend :

1) Ajustez les paramètres RDS pour envoyer les journaux d'audit à CloudWatch
2) Créer un compartiment S3 (pour stocker les journaux d'audit CloudWatch)
3) Créer un rôle IAM (nous l'utiliserons pour l'automatisation Lambda)
4) Lambda (Fonction pour automatiser l'exportation de CloudWatch Logs vers S3)

Commençons!

Ajuster les paramètres RDS pour envoyer les journaux d'audit à CloudWatch

Tout d'abord, nous devons modifier le RDS pour envoyer des journaux spécifiques à CloudWatch. Pour ce faire, nous allons créer un groupe d'options et un groupe de paramètres.

Créer un groupe d'options

⇒ Visitez votre tableau de bord Amazon RDS.
⇒ Allez dans le groupe d'options.
⇒ Cliquez sur le bouton Créer un groupe.

Create an Option Group

⇒ Saisissez le nom et la description de ce groupe.
⇒ Sélectionnez Moteur : mysql et Version du moteur : 8.0. Cliquez sur Créer.

Create an Option Group

⇒ Cliquez sur le groupe d'options que vous avez créé.
⇒ Dans la section Options, cliquez sur le bouton Ajouter une option.
⇒ Sous l'option "SERVER_AUDIT_EVENTS*", entrez les valeurs que vous souhaitez auditer, c'est-à-dire CONNECT, QUERY, QUERY_DDL, QUERY_DML, QUERY_DCL, QUERY_DML_NO_SELECT. Si vous souhaitez enregistrer toutes les requêtes exécutées sur vos tables, entrez simplement QUERY dans ce champ.
⇒ Définissez "Oui" pour Appliquer immédiatement. Cliquez sur Ajouter une option.

Option Group Settings

Vous recherchez des EXPERTS AWS ? CAISSE ICI

Créer un groupe de paramètres

⇒ Ouvrons le tableau de bord Amazon RDS.
⇒ Cliquez sur le groupe de paramètres.
⇒ Cliquez sur le bouton Créer un groupe de paramètres.

Create Parameter Group

⇒ Sélectionnez « Famille de groupe de paramètres » : mysql8.0
⇒ Sélectionnez "Type": Groupe de paramètres DB
⇒ Saisissez le nom et la description du groupe. Cliquez sur Créer.

Create Parameter Group

⇒ Maintenant, cliquez sur le groupe de paramètres que vous avez créé.
⇒ Sous Paramètre, nous allons modifier certains paramètres et définir les valeurs suivantes :
⇒ Modifier le paramètre : "log_output" ⇒ Changer sa valeur de TABLE à FILE
⇒ Modifier le paramètre : "slow_query_log" ⇒ Changer sa valeur de BLANK à 1
⇒ Modifier le paramètre : "general_log" ⇒ Changer sa valeur de BLANK à 1

Maintenant, nous sommes tous prêts avec notre groupe d'options et notre groupe de paramètres. Allouons maintenant ces groupes à notre RDS.

⇒ Accédez à votre tableau de bord RDS.
⇒ Cliquez sur le RDS que vous avez créé.
⇒ Cliquez sur Modifier.
⇒ Faites défiler la page vers le bas et allez dans la section "Options de la base de données".
⇒ Sous "Groupe de paramètres DB", sélectionnez le groupe de paramètres que vous avez créé.
⇒ Sous "Groupe d'options", sélectionnez le groupe d'options que vous avez créé.

Tweak RDS Settings

Nous sommes maintenant tous ensemble avec le RDS. Une fois que vous avez terminé les étapes ci-dessus, veuillez prévoir 20 à 30 minutes pour remplir les données dans CloudWatch (REMARQUE : cela peut prendre plus de temps en fonction de la taille des journaux).

Une fois que CloudWatch a rassemblé tous les journaux, vous verrez les journaux d'audit sous votre tableau de bord CloudWatch. Cela ressemblera à l'image suivante :

CloudWatch Log Groups

Vous recherchez des EXPERTS AWS ? CAISSE ICI

Créer un compartiment S3 (pour stocker les journaux d'audit CloudWatch)

⇒ Accédez au tableau de bord Amazon S3.
⇒ Créez un nouveau compartiment.
⇒ Une fois que vous avez créé un bucket, ouvrez-le et accédez à l'onglet Permissions.
⇒ Nous devrons autoriser CloudWatch à mettre des objets dans le bucket (accès en écriture)
⇒ Cliquez sur le bouton Modifier pour la politique de compartiment. Entrez le code suivant :

{
"Version": "2012-10-17",
"Déclaration": [
{
"Effet": "Autoriser",
"Directeur": {
"Service": "logs.YOUR-REGION.amazonaws.com" // c'est-à-dire logs.us-east-1.amazonaws.com
},
"Action": "s3:GetBucketAcl",
"Ressource": "arn:aws:s3:::BUCKET_NAME_HERE"
},
{
"Effet": "Autoriser",
"Directeur": {
"Service": "logs.VOTRE-REGION.amazonaws.com"
},
"Action": "s3:PutObject",
"Ressource": "arn:aws:s3:::BUCKET_NAME_HERE/*",
"Condition": {
« ChaîneÉgal » : {
« s3:x-amz-acl » : « propriétaire du compartiment-contrôle total »
}
}
}
] }

Créer un rôle IAM (nous l'utiliserons pour l'automatisation Lambda)

Nous allons maintenant créer le rôle IAM qui sera utilisé dans la configuration de la fonction Lambda. Le service AWS Lambda nécessitera une autorisation pour consigner les événements et écrire dans le compartiment S3 que nous avons créé.

Nous allons créer le rôle IAM « Export-RDS-CloudWatch-to-S3-Lambda » avec les politiques « AmazonS3FullAccess », « CloudWatchLogsFullAccess » et « CloudWatchEventsFullAccess ».

⇒ Ouvrez votre tableau de bord AWS IAM.
⇒ Basculez vers les rôles et cliquez sur le bouton Créer un rôle.
⇒ Sous « Cas d'utilisation », sélectionnez Lambda et cliquez sur Suivant.
⇒ Recherchez "AmazonS3FullAccess" et sélectionnez-le.
⇒ Recherchez "CloudWatchLogsFullAccess" et sélectionnez-le.
⇒ Recherchez "CloudWatchEventsFullAccess" et sélectionnez-le.
⇒ Définissez le nom du rôle : "Export-RDS-CloudWatch-to-S3-Lambda" et cliquez sur Créer un rôle.

Vous recherchez des EXPERTS AWS ? CAISSE ICI

Lambda (Fonction pour automatiser l'export CloudWatch Logs vers S3)

La fonction Lambda vous permet de placer votre code sous la fonction et de l'exécuter sur des déclencheurs. Vous n'avez pas besoin d'avoir un serveur ou d'être configuré pour cela. Très facile et efficace !

⇒ Passez au tableau de bord AWS Lambda.
⇒ Cliquez sur les Fonctions puis cliquez sur le bouton Créer une fonction.

Create Lambda Function

⇒ Gardez « Auteur pour Scratch » sélectionné.
⇒ Définir "Nom de la fonction": Export-RDS-CloudWatch-Logs-To-S3
⇒ Sous "Runtime", sélectionnez Python 3.x.
⇒ Sous "Autorisations", sélectionnez "Utiliser un rôle existant" et sélectionnez le rôle IAM que nous avons créé à l'étape précédente.

Configure Lambda Function

⇒ Cliquez sur la fonction Créer et accédez à la vue Code et saisissez le script suivant :

importer boto3
importer le système d'exploitation
date et heure d'importation

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

heureactuelle = dateheure.dateheure.maintenant()
StartDate = heureactuelle – dateheure.timedelta(jours=njours)
DateFin = heureactuelle – dateheure.timedelta(jours=njours – 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(event, context):
client = boto3.client('logs')
client.create_export_task(
logGroupName=GROUP_NAME,
deHeure=deDate,
à=àDate,
destination=DESTINATION_BUCKET,
destinationPrefix=BUCKET_PREFIX
)

⇒ Maintenant, cliquez sur Configuration ⇒ Variables d'environnement.
⇒ Nous devons créer 4 variables :
⇒ DESTINATION_BUCKET : <Nom de votre compartiment S3>
⇒ GROUP_NAME : <Nom du groupe de journaux que vous exportez>
⇒ NJOURS : 1
⇒ PREFIX : journaux exportés

Lambda Environment Variables

⇒ Très bien, vous êtes prêt maintenant. Enregistrez la fonction.

Maintenant, définissons l'automatisation pour exécuter cette fonction lambda.

⇒ Maintenant, visitez votre tableau de bord CloudWatch.
⇒ Allez dans Événements ⇒ Règles.
⇒ Cliquez sur Créer une règle.
⇒ Sous Source de l'événement, sélectionnez Planification.
⇒ Définissez un taux fixe ou une expression cron pour exécuter automatiquement notre fonction lambda.
⇒ Sous Cible, sélectionnez Fonction Lambda.
⇒ Sous Fonction, sélectionnez la fonction que nous avons créée à l'étape précédente.

Cron to Execute Lambda Function

C'est tout. Maintenant, vous avez configuré un environnement pour exporter automatiquement les journaux RDS vers S3. Vous pouvez conserver les journaux aussi longtemps que vous le souhaitez. Mais si vous rencontrez toujours un problème, n'hésitez pas à poster un commentaire ici. Nous serions ravis d'avoir de vos nouvelles !!

Vous recherchez des EXPERTS AWS ? CAISSE ICI