Uso de la función Lambda con CloudTrail
AWS CloudTrailes un servicio disponible con Amazon, que ayuda a registrar todas las actividades realizadas dentro de la consola de AWS. Registra todas las llamadas a la API y almacena el historial, que se puede usar más tarde para depurar. Tenga en cuenta que no podemos activar Lambda desde CloudTrail. En cambio, CloudTrail almacena todo el historial en forma de registros en el bucket de S3 y podemos activar AWS Lambda desde S3. Una vez que se vayan a procesar los registros, AWS Lambda se activará cada vez que se agreguen registros al bucket de S3.
Requisitos
Antes de comenzar a trabajar con AWS CloudTrail, S3 y AWS Lambda, debe realizar lo siguiente:
- Cree un depósito de S3 para almacenar registros de CloudTrail
- Crear servicio SNS
- Cree una ruta en CloudTrail y asigne el depósito S3 y el servicio SNS
- Cree un rol de IAM con permiso.
- Crear función lambda aws
- Configuración de AWS Lambda
Ejemplo
Consideremos un ejemplo que muestra el funcionamiento de AWS CloudTrail, S3 y AWS Lambda. Aquí, crearemos un depósito en S3 que almacenará todos los registros para cualquier interacción realizada en la consola de AWS. Creemos un tema de SNS y publíquelo. Para esta acción, los registros se ingresarán como un archivo en S3. Se activará AWS lambda, que enviará correo mediante el servicio Amazon SES.
El diagrama de bloques para explicar este proceso es el que se muestra a continuación:
Crear un depósito de S3 para almacenar registros de CloudTrail
Vaya a la consola de AWS y haga clic en el servicio S3. Hacer clicCreate bucket e ingrese el nombre del depósito que desea almacenar los registros de CloudTrail como se muestra:
Observe que aquí hemos creado un bucket de S3 cloudtraillogsaws para almacenar los registros.
Crear servicio SNS
Vaya a la consola de AWS y haga clic en Simple notification Service. Seleccione los temas del lado izquierdo y haga clic en el botón Crear nuevo tema.
Hemos creado un tema llamado displaytrailpublicar un tema. Sus detalles se almacenarán en S3bucket que se creó anteriormente.
Cree una ruta en Cloudtrail y asigne el depósito S3 y el servicio SNS
Vaya a la consola de AWS y haga clic en CloudTrail servicio de las herramientas de gestión como se muestra -
Hacer clic Trails desde el lado izquierdo como se muestra a continuación -
Hacer clic Create Trailbotón. Introducir elTrail name, Apply trail to all regions y elige Yes. Entonces, los registros se aplicarán para toda la región.
por Read/Write events, escoger All. Añade elS3 bucket y SNS topicdetalles como se muestra a continuación. Puede crear uno nuevo aquí o agregar uno existente.
Tenga en cuenta que hay opciones disponibles para encrypt log files, enable log file validation, send sns notification for every log file deliveryetc. He usado los valores predeterminados aquí. Puede permitir el cifrado de archivos y le pedirá una clave de cifrado. Haga clic en el botón Crear ruta una vez que se agreguen los detalles.
Crear función de IAM con permiso
Vaya a la consola de AWS y seleccione IAM. Cree un rol con permiso para S3, Lambda, CloudTrail y SES para enviar correo electrónico. El rol creado es el que se muestra a continuación:
Crear función AWS Lambda
Vaya al servicio de AWS y haga clic en LambdaServicio. Agregue el nombre de la función, seleccione tiempo de ejecución comonodejsy seleccione el rol creado para la función lambda. A continuación se crea la función lambda.
Configuración de AWS Lambda
A continuación, debemos agregar S3 como el disparador para AWS lambda creado.
Agregue los detalles del bucket de S3 para agregar el activador y agregue el siguiente código 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");
}
});
};
Tenga en cuenta que estamos tomando el depósito de S3 y los detalles del registro del evento y enviando el correo mediante el servicio SES como se muestra arriba.
Siempre que se lleve a cabo alguna actividad en la consola de AWS, los registros se enviarán al bucket de S3 y, al mismo tiempo, se activará AWS lambda y el correo se enviará al ID de correo electrónico mencionado en el código.
Tenga en cuenta que puede procesar los registros según sus necesidades en AWS Lambda.