Technique

Comment obtenir les logs AWS depuis S3 grâce à Filebeat et à la Suite Elastic

Les logs provenant d'un éventail de services AWS peuvent être stockés dans des compartiments S3, comme les logs d'accès au serveur S3, les logs d'accès ELB, les logs CloudWatch et les logs de flux VPC. Par exemple, les logs d'accès au serveur S3 fournissent des enregistrements détaillés pour les requêtes envoyées à un compartiment. Ces informations sont très utiles. Malheureusement, AWS crée de multiples fichiers .txt pour plusieurs opérations, ce qui ne permet pas de voir exactement les opérations enregistrées dans les logs sans ouvrir chaque fichier .txt séparément. En outre, les logs d'accès au serveur S3 sont enregistrés dans un format complexe. Il est donc très difficile pour les utilisateurs d'ouvrir simplement le fichier .txt et de trouver les informations dont ils ont besoin.

Heureusement, tous vos logs AWS peuvent être facilement indexés, analysés et visualisés avec la Suite Elastic. Ainsi, vous pouvez utiliser toutes les données importantes qu'ils contiennent. Dans cet article, je vais vous montrer combien ce processus est facile.

Introduction

Dans Filebeat 7.4, l'entrée s3 est devenue une option pour les utilisateurs. Ainsi, ils peuvent récupérer des événements à partir de fichiers dans un compartiment S3. Chaque ligne de chaque fichier devient un événement distinct. Outre l'entrée s3, nous avons transféré deux nouveaux ensembles de fichiers pour le module AWS de Filebeat, à savoir s3access et elb (une nouveauté de la version 7.5). Grâce à eux, les utilisateurs peuvent collecter des logs dans différents compartiments S3, puis les visualiser et les analyser dans un emplacement centralisé sans télécharger ni ouvrir manuellement chaque fichier.

Pour éviter tout retard important lors de l'interrogation de l'ensemble des fichiers de logs provenant de chaque compartiment S3, nous avons décidé d'associer la notification à l'interrogation en utilisant Amazon Simple Queue Service (SQS) pour la notification Amazon S3 lors de la création d'un nouvel objet S3. L'entrée s3 de Filebeat vérifie dans SQS l'arrivée de nouveaux messages concernant le nouvel objet créé dans S3 et utilise les informations de ces messages pour récupérer les logs dans les compartiments S3. Grâce à cette configuration, il est inutile d'interroger régulièrement chaque compartiment S3. En effet, l'entrée s3 de Filebeat garantit une collecte des données des compartiments S3 rapide, fiable et en temps quasi réel.

Configuration des notifications des événements S3 à l'aide de SQS

En suivant les quatre étapes ci-dessous, les utilisateurs peuvent ajouter une configuration de notification à un compartiment nécessitant AWS S3 pour publier des événements de type s3:ObjectCreated:* dans une file d'attente AWS SQS. Pour en savoir plus, consultez la présentation d'un exemple de configuration d'une notification pour un compartiment.

1ère étape : création d'une file d'attente SQS et d'un compartiment S3

Créez une file d'attente SQS et un compartiment S3 dans la même région AWS à l'aide de la console Amazon SQS.

2étape : configuration d'une file d'attente SQS

Remplacez la règle d'accès liée à la file d'attente par la règle suivante.

{
 "Version": "2012-10-17",
 "Id": "example-ID",
 "Statement": [
  {
   "Sid": "example-statement-ID",
   "Effect": "Allow",
   "Principal": {
    "AWS":"*"  
   },
   "Action": [
    "SQS:SendMessage"
   ],
   "Resource": "<SQS-queue-ARN>",
   "Condition": {
      "ArnLike": { "aws:SourceArn": "arn:aws:s3:*:*:<bucket-name>" }
   }
  }
 ]
}

Assurez-vous de modifier les variables <sqs-queue-arn> et <bucket-name> afin qu'elles correspondent à l'arn de votre file d'attente SQS et au nom de votre compartiment S3.

3étape : configuration du compartiment S3

Via la console Amazon S3, ajoutez une configuration de notification demandant à Amazon S3 de publier des événements du type s3:ObjectCreated:* dans votre file d'attente Amazon SQS.

Configuration du compartiment S3

4étape : test de la configuration S3-SQS

Chargez un objet dans le compartiment S3 et vérifiez la notification de l'événement dans la console Amazon SQS.

Utilisation de l'entrée s3 de Filebeat

En activant Filebeat avec l'entrée s3, les utilisateurs peuvent collecter les logs des compartiments AWS S3. Chaque ligne de chaque fichier de log devient un événement distinct et est stockée dans la sortie Filebeat configurée, comme Elasticsearch. En utilisant seulement l'entrée s3, les messages des logs sont stockés dans le champ message de chaque événement sans analyse.

Lors du traitement d'un objet S3 référencé par un message de SQS, si la moitié du délai de visibilité configuré s'écoule sans interruption du processus, le délai de ce message SQS est réinitialisé pour s'assurer que le message ne retourne pas dans la file d'attente pendant le traitement. En cas d'erreurs au cours du traitement de l'objet S3, le processus s'arrête et le message de SQS retourne dans la file d'attente.

Étape 0 : Création d'une politique IAM

Une politique IAM est une entité qui définit les permissions envers un objet au sein de votre environnement AWS. Il est nécessaire de créer une politique IAM personnalisée pour Filebeat avec des permissions spécifiques. N'hésitez pas à consulter la rubrique Création de politiques IAM pour plus de détails. Vous trouverez ci-dessous une liste des permissions requises pour accéder à SQS et S3 :
  • s3:GetObject 
  • sqs:ReceiveMessage 
  • sqs:ChangeMessageVisibility 
  • sqs:DeleteMessage

1ère étape : installation de Filebeat

Pour télécharger et installer Filebeat, différentes commandes fonctionnent pour plusieurs systèmes. Par exemple, avec Mac :

curl -L -O https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-7.5.1-darwin-x86_64.tar.gz
tar xzvf filebeat-7.5.1-darwin-x86_64.tar.gz

Pour en savoir plus, consultez la page consacrée à l'installation de Filebeat.

2étape : configuration de l'entrée s3

Voici un exemple d'activation de l'entrée s3 dans filebeat.yml :

filebeat.inputs:
- type: s3
  queue_url: https://sqs.us-east-1.amazonaws.com/1234/test-fb-ks
  visibility_timeout: 300s
  credential_profile_name: elastic-beats

Grâce à cette configuration, Filebeat accède à la file d'attente AWS SQS test-fb-ks pour lire les messages de notification. Ainsi, Filebeat obtient des informations sur les objets S3 spécifiques et les utilise pour lire les objets ligne par ligne. La variable visibility_timeout est la durée (en secondes) pendant laquelle les messages reçus sont cachés dans les demandes de récupération suivantes après avoir été récupérés par une requête ReceiveMessage. Par défaut, la variable visibility_timeout est de 300 secondes, avec un minimum de 0 seconde et un maximum de 12 heures. Pour passer des appels d'API AWS, l'entrée s3 doit comprendre des informations d'identification AWS dans sa configuration. Dans l'exemple ci-dessus, le nom de profil elastic-beats est donné pour passer des appels d'API AWS. Pour en savoir plus, consultez la page consacrée à la configuration des informations d'identification AWS.

3étape : démarrage de Filebeat

Pour Mac et Linux :

sudo chown root filebeat.yml
sudo ./filebeat -e

Pour en savoir plus, consultez la page consacrée au démarrage de Filebeat.

Collecte des logs d'accès au serveur S3 grâce à l'ensemble de fichiers s3access

L'ensemble de fichiers s3access a été ajouté à Filebeat 7.4 afin de collecter les logs d'accès au serveur S3 grâce à l'entrée s3. Les logs d'accès au serveur fournissent des enregistrements détaillés pour les requêtes envoyées à un compartiment, ce qui peut être très utile pour les audits d'accès et de sécurité. Par défaut, la journalisation des accès au serveur est désactivée. Pour suivre les demandes d'accès à votre compartiment, vous pouvez activer la journalisation des accès au serveur. Chaque enregistrement de log d'accès fournit des informations sur une seule demande d'accès, comme la personne à l'origine de la requête, le nom du compartiment, la date et l'heure de la demande, l'action menée, l'état de la réponse et un code d'erreur, le cas échéant.

1ère étape : activation de la journalisation des accès au serveur

Dans les propriétés d'un compartiment S3 spécifique, vous pouvez activer la journalisation des accès au serveur en cochant l'option Enable logging.

Activation de la journalisation

2étape : activation du module aws dans Filebeat

Dans une configuration par défaut de Filebeat, le module aws n'est pas activé. La commande suivante active la configuration du module aws dans le répertoire modules.d sur les systèmes macOS et Linux :

sudo ./filebeat modules enable aws

3étape : configuration du module aws

Par défaut, l'ensemble de fichiers s3access est désactivé. Pour activer l'ensemble de fichiers s3access, consultez le fichier aws.yml de la manière suivante.

- module: aws
  s3access:
    enabled: true
    var.queue_url: https://sqs.myregion.amazonaws.com/123456/myqueue
    var.credential_profile_name: fb-aws

4étape : démarrage de Filebeat

Pour Mac et Linux :

sudo chown root filebeat.yml
sudo ./filebeat -e

Pour en savoir plus, consultez la page consacrée au démarrage de Filebeat.

5étape : utilisation du tableau de bord de l'ensemble de fichiers s3access dans Kibana

L'ensemble de fichiers s3access comprend un tableau de bord prédéfini, appelé [Filebeat AWS] S3 Server Access Log Overview. En lançant la commande de configuration au démarrage de Filebeat, vous définissez automatiquement ces tableaux de bord dans Kibana.

Pour Mac et Linux :

./filebeat setup --dashboards

Pour plus d'informations à ce sujet, n'hésitez pas à consulter la documentation intitulée Configurer les tableaux de bord Kibana.

Ce tableau de bord est un aperçu des logs d'accès au serveur AWS S3. Il montre les premières URL avec leur code de réponse, leur état HTTP dans le temps et tous les logs d'erreur.

Tableau de bord des logs d'accès au serveur AWS S3

Et ensuite ?

Avec l'entrée s3 de Filebeat, les utilisateurs peuvent facilement collecter des logs dans les services AWS et les transférer en tant qu'événements dans notre Elasticsearch Service sur Elastic Cloud ou dans un cluster exécuté à partir de la distribution par défaut. Dans la version 7.4, l'ensemble de fichiers s3access est à la disposition des utilisateurs afin qu'ils puissent collecter et analyser les logs d'accès au serveur S3. Dans la version 7.5, l'ensemble de fichiers elb est à la disposition des utilisateurs afin qu'ils puissent collecter les logs d'équilibreur de charge classique, d'application et de réseau. Nous commencerons bientôt à ajouter des ensembles de fichiers supplémentaires afin de prendre en charge d'autres logs couramment utilisés, comme les logs de flux VPC, les logs CloudWatch et les logs Cloudtrail. Si vous avez des questions ou des commentaires, n'hésitez pas à les publier sur le forum de discussion consacré à Beats.