Utilisation de la fonction Lambda avec CloudTrail

AWS CloudTrailest un service disponible avec Amazon, qui permet de consigner toutes les activités effectuées dans la console AWS. Il enregistre tous les appels d'API et stocke l'historique, qui peut être utilisé ultérieurement à des fins de débogage. Notez que nous ne pouvons pas déclencher Lambda à partir de CloudTrail. Au lieu de cela, CloudTrail stocke toute l'historique sous forme de journaux dans le compartiment S3 et nous pouvons déclencher AWS Lambda à partir de S3. Une fois que tous les journaux doivent être traités, AWS Lambda est déclenché chaque fois que des journaux sont ajoutés au compartiment S3.

Conditions requises

Avant de commencer à travailler avec AWS CloudTrail, S3 et AWS Lambda, vous devez effectuer les opérations suivantes:

  • Créer un compartiment S3 pour stocker les journaux CloudTrail
  • Créer un service SNS
  • Créez une trace dans CloudTrail et attribuez le compartiment S3 et le service SNS
  • Créez un rôle IAM avec autorisation.
  • Créer une fonction lambda aws
  • Configuration AWS Lambda

Exemple

Prenons un exemple qui montre le fonctionnement d'AWS CloudTrail, S3 et AWS Lambda. Ici, nous allons créer un compartiment dans S3 qui stockera tous les journaux pour toute interaction effectuée dans la console AWS. Laissez-nous créer un sujet SNS et le publier. Pour cette action, les journaux seront saisis sous forme de fichier dans S3. AWS lambda sera déclenché et enverra des e-mails à l'aide du service Amazon SES.

Le schéma de principe pour expliquer ce processus est comme indiqué ci-dessous -

Créer un compartiment S3 pour stocker les journaux CloudTrail

Accédez à la console AWS et cliquez sur Service S3. Cliquez surCreate bucket et entrez le nom du bucket dans lequel vous souhaitez stocker les journaux cloudtrail comme indiqué -

Observez qu'ici nous avons créé un compartiment S3 cloudtraillogsaws pour stocker les journaux.

Créer un service SNS

Accédez à la console AWS et cliquez sur Simple notification Service. Sélectionnez des sujets sur le côté gauche et cliquez sur le bouton Créer un nouveau sujet.

Nous avons créé un sujet appelé displaytrailpour publier un sujet. Ses détails seront stockés dans S3bucket qui est créé ci-dessus.

Créer un sentier dans Cloudtrail et attribuer le compartiment S3 et le service SNS

Accédez à la console AWS et cliquez sur CloudTrail service des outils de gestion comme indiqué -

Cliquez sur Trails du côté gauche comme indiqué ci-dessous -

Cliquez sur Create Trailbouton. Entrer leTrail name, Apply trail to all regions et choisissez Yes. Ensuite, les journaux seront appliqués pour toute la région.

Pour Read/Write events, choisissez All. Ajouter leS3 bucket et SNS topicdétails comme indiqué ci-dessous. Vous pouvez en créer un nouveau ici ou en ajouter un existant.

Notez qu'il existe des options disponibles pour encrypt log files, enable log file validation, send sns notification for every log file deliveryetc. J'ai utilisé les valeurs par défaut ici. Vous pouvez autoriser le cryptage des fichiers et il vous demandera la clé de cryptage. Cliquez sur le bouton Créer une piste une fois les détails ajoutés.

Créer un rôle IAM avec autorisation

Accédez à la console AWS et sélectionnez IAM. Créez un rôle avec l'autorisation de S3, Lambda, CloudTrail et SES pour l'envoi d'e-mails. Le rôle créé est comme indiqué ci-dessous -

Créer une fonction AWS Lambda

Accédez au service AWS et cliquez sur Lambdaun service. Ajoutez le nom de la fonction, sélectionnez runtime commenodejset sélectionnez le rôle créé pour la fonction lambda. Voici la fonction lambda créée.

Configuration AWS Lambda

Ensuite, nous devons ajouter S3 comme déclencheur pour AWS lambda créé.

Ajoutez les détails du compartiment S3 pour ajouter le déclencheur et ajoutez le code AWS Lambda suivant -

const aws =  require("aws-sdk");
const sns = new aws.SNS({
region:'us-east-1'
});
var ses = new aws.SES({
   region: 'us-east-1'
});
exports.handler = function(event, context, callback) {
   console.log("AWS lambda and SNS trigger ");
   console.log(event);
   const s3message = "Bucket Name:"+event.Records[0].s3.bucket.name+"\nLog details:"+event.Records[0].s3.object.key;
   console.log(s3message);
   var eParams = {
      Destination: {
         ToAddresses: ["[email protected]"]
      },
      Message: {
         Body: {
            Text: {
               Data:s3message
            }
         },
         Subject: {
            Data: "cloudtrail logs"
         }
      },
      Source: "[email protected]"
   };
   var email = ses.sendEmail(eParams, function(err, data) {
      if (err) console.log(err);
      else {
         console.log("===EMAIL SENT===");
         console.log("EMAIL CODE END");
         console.log('EMAIL: ', email);
         context.succeed(event);
         callback(null, "email is send");
      }
   });
};

Notez que nous prenons le compartiment S3 et les détails du journal de l'événement et envoyons du courrier en utilisant le service SES comme indiqué ci-dessus.

Chaque fois qu'une activité a lieu dans la console AWS, les journaux seront envoyés au compartiment S3 et en même temps, AWS lambda sera déclenché et le courrier sera envoyé à l'ID de messagerie mentionné dans le code.

Notez que vous pouvez traiter les journaux selon vos besoins dans AWS Lambda.