Utilizzo della funzione Lambda con CloudTrail

AWS CloudTrailè un servizio disponibile con Amazon, che aiuta a registrare tutte le attività svolte all'interno della console AWS. Registra tutte le chiamate API e memorizza la cronologia, che può essere utilizzata in seguito a scopo di debug. Tieni presente che non possiamo attivare Lambda da CloudTrail. Invece, CloudTrail archivia tutta la cronologia sotto forma di log nel bucket S3 e possiamo attivare AWS Lambda da S3. Una volta che i log devono essere elaborati, AWS Lambda verrà attivato ogni volta che vengono aggiunti log al bucket S3.

Requisiti

Prima di iniziare a lavorare con AWS CloudTrail, S3 e AWS Lambda, devi eseguire le seguenti operazioni:

  • Crea bucket S3 per archiviare i log di CloudTrail
  • Crea servizio SNS
  • Crea un percorso in CloudTrail e assegna il bucket S3 e il servizio SNS
  • Crea un ruolo IAM con autorizzazione.
  • Crea una funzione lambda aws
  • Configurazione AWS Lambda

Esempio

Consideriamo un esempio che mostra il funzionamento di AWS CloudTrail, S3 e AWS Lambda. Qui creeremo un bucket in S3 che memorizzerà tutti i log per qualsiasi interazione eseguita nella console AWS. Creiamo un argomento SNS e pubblichiamo. Per questa azione, i log verranno inseriti come file in S3. Verrà attivato AWS lambda che invierà la posta utilizzando il servizio Amazon SES.

Lo schema a blocchi per spiegare questo processo è come mostrato di seguito:

Crea bucket S3 per archiviare i log di CloudTrail

Vai alla console AWS e fai clic sul servizio S3. ClicCreate bucket e inserisci il nome del bucket in cui desideri archiviare i log di cloudtrail come mostrato -

Osserva che qui abbiamo creato un bucket S3 cloudtraillogsaws per conservare i registri.

Crea servizio SNS

Vai alla console AWS e fai clic su Simple notification Service. Seleziona gli argomenti dal lato sinistro e fai clic sul pulsante Crea nuovo argomento.

Abbiamo creato un argomento chiamato displaytrailper pubblicare un argomento. I suoi dettagli verranno archiviati in S3bucket creato sopra.

Crea un percorso in Cloudtrail e assegna il bucket S3 e il servizio SNS

Vai alla console AWS e fai clic su CloudTrail servizio dagli strumenti di gestione come mostrato -

Clic Trails dal lato sinistro come mostrato di seguito -

Clic Create Trailpulsante. Inserisci ilTrail name, Apply trail to all regions e scegli Yes. Quindi Quindi i log verranno applicati per tutta la regione.

Per Read/Write events, scegli All. Aggiungi ilS3 bucket e SNS topicdettagli come mostrato di seguito. Puoi crearne uno nuovo qui o aggiungerne uno esistente.

Tieni presente che sono disponibili opzioni per encrypt log files, enable log file validation, send sns notification for every log file deliveryecc. Ho usato i valori predefiniti qui. È possibile consentire la crittografia dei file e verrà richiesta la chiave di crittografia. Fare clic sul pulsante Crea percorso una volta aggiunti i dettagli.

Crea ruolo IAM con autorizzazione

Vai alla console AWS e seleziona IAM. Crea un ruolo con autorizzazione per S3, Lambda, CloudTrail e SES per l'invio di e-mail. Il ruolo creato è come mostrato di seguito:

Crea funzione AWS Lambda

Vai al servizio AWS e fai clic su Lambdaservizio. Aggiungi il nome della funzione, seleziona runtime comenodejse seleziona il ruolo creato per la funzione lambda. Di seguito è la funzione lambda creata.

Configurazione AWS Lambda

Successivamente, dobbiamo aggiungere S3 come trigger per AWS lambda creato.

Aggiungi i dettagli del bucket S3 per aggiungere il trigger e aggiungi il seguente codice AWS Lambda:

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");
      }
   });
};

Tieni presente che stiamo prendendo il bucket S3 e i dettagli del registro dall'evento e stiamo inviando la posta utilizzando il servizio SES come mostrato sopra.

Ogni volta che si verifica un'attività nella console AWS, i log verranno inviati al bucket S3 e, allo stesso tempo, AWS lambda verrà attivato e la posta verrà inviata all'ID e-mail menzionato nel codice.

Tieni presente che puoi elaborare i log in base alle tue esigenze in AWS Lambda.