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.