การใช้ฟังก์ชัน Lambda กับ CloudTrail
AWS CloudTrailเป็นบริการที่มีให้ใน Amazon ซึ่งช่วยในการบันทึกกิจกรรมทั้งหมดที่ทำในคอนโซล AWS บันทึกการเรียก API ทั้งหมดและจัดเก็บประวัติซึ่งสามารถใช้ในภายหลังเพื่อวัตถุประสงค์ในการดีบัก โปรดทราบว่าเราไม่สามารถเรียกใช้ Lambda จาก CloudTrail ได้ CloudTrail จะจัดเก็บประวัติทั้งหมดในรูปแบบของบันทึกในถัง S3 แทนและเราสามารถเรียกใช้ AWS Lambda จาก S3 ได้ เมื่อต้องประมวลผลบันทึกใด ๆ AWS Lambda จะถูกทริกเกอร์ทุกครั้งที่มีการเพิ่มบันทึกลงในที่เก็บข้อมูล S3
ข้อกำหนด
ก่อนที่คุณจะเริ่มทำงานกับ AWS CloudTrail, S3 และ AWS Lambda คุณต้องดำเนินการดังต่อไปนี้ -
- สร้างที่เก็บข้อมูล S3 เพื่อจัดเก็บบันทึก CloudTrail
- สร้างบริการ SNS
- สร้างเส้นทางใน CloudTrail และกำหนด S3 ที่เก็บข้อมูลและบริการ SNS
- สร้างบทบาท IAM โดยได้รับอนุญาต
- สร้างฟังก์ชัน aws lambda
- การกำหนดค่า AWS Lambda
ตัวอย่าง
ลองพิจารณาตัวอย่างที่แสดงการทำงานของ AWS CloudTrail, S3 และ AWS Lambda ที่นี่เราจะสร้างที่เก็บข้อมูลใน S3 ซึ่งจะจัดเก็บบันทึกทั้งหมดสำหรับการโต้ตอบใด ๆ ที่ทำในคอนโซล AWS ให้เราสร้างหัวข้อ SNS และเผยแพร่ สำหรับการดำเนินการนี้บันทึกจะถูกป้อนเป็นไฟล์ใน S3 AWS lambda จะถูกทริกเกอร์ซึ่งจะส่งอีเมลโดยใช้บริการ Amazon SES
แผนภาพบล็อกสำหรับอธิบายกระบวนการนี้มีดังที่แสดงด้านล่าง -
สร้าง S3 Bucket เพื่อจัดเก็บบันทึก CloudTrail
ไปที่คอนโซล AWS แล้วคลิกบริการ S3 คลิกCreate bucket และป้อนชื่อที่เก็บข้อมูลที่คุณต้องการจัดเก็บบันทึก cloudtrail ดังที่แสดง -
สังเกตว่าที่นี่เราได้สร้างที่เก็บข้อมูล S3 cloudtraillogsaws สำหรับจัดเก็บบันทึก
สร้างบริการ SNS
ไปที่คอนโซล AWS แล้วคลิก Simple notification Service. เลือกหัวข้อจากด้านซ้ายแล้วคลิกปุ่มสร้างหัวข้อใหม่
เราได้สร้างหัวข้อที่เรียกว่า displaytrailเพื่อเผยแพร่หัวข้อ รายละเอียดจะถูกเก็บไว้ใน S3bucket ที่สร้างขึ้นด้านบน
สร้าง Trail ใน Cloudtrail และกำหนดที่เก็บข้อมูล S3 และบริการ SNS
ไปที่คอนโซล AWS แล้วคลิก CloudTrail บริการจาก Management tools ดังภาพ -
คลิก Trails จากด้านซ้ายตามที่แสดงด้านล่าง -
คลิก Create Trailปุ่ม. ป้อนไฟล์Trail name, Apply trail to all regions และเลือก Yes. จากนั้นบันทึกจะถูกนำไปใช้กับทุกภูมิภาค
สำหรับ Read/Write eventsเลือก All. เพิ่มไฟล์S3 bucket และ SNS topicรายละเอียดตามที่แสดงด้านล่าง คุณสามารถสร้างใหม่ได้ที่นี่หรือเพิ่มที่มีอยู่
โปรดทราบว่ามีตัวเลือกให้ encrypt log files, enable log file validation, send sns notification for every log file deliveryฯลฯ ฉันใช้ค่าเริ่มต้นที่นี่ คุณสามารถอนุญาตการเข้ารหัสไฟล์และจะขอคีย์การเข้ารหัส คลิกที่ปุ่ม Create Trail เมื่อเพิ่มรายละเอียดแล้ว
สร้างบทบาท IAM ด้วยสิทธิ์
ไปที่คอนโซล AWS แล้วเลือก IAM สร้างบทบาทโดยได้รับอนุญาต S3, Lambda, CloudTrail และ SES สำหรับการส่งอีเมล บทบาทที่สร้างขึ้นมีดังที่แสดงด้านล่าง -
สร้างฟังก์ชัน AWS Lambda
ไปที่บริการ AWS แล้วคลิก Lambdaบริการ. เพิ่มชื่อฟังก์ชันเลือกรันไทม์เป็นnodejsและเลือกบทบาทที่สร้างขึ้นสำหรับฟังก์ชันแลมบ์ดา ต่อไปนี้คือฟังก์ชันแลมบ์ดาที่สร้างขึ้น
การกำหนดค่า AWS Lambda
ต่อไปเราต้องเพิ่ม S3 เป็นทริกเกอร์สำหรับ AWS lambda ที่สร้างขึ้น
เพิ่มรายละเอียดที่เก็บข้อมูล S3 เพื่อเพิ่มทริกเกอร์และเพิ่มรหัส 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");
}
});
};
โปรดทราบว่าเรากำลังรับรายละเอียดที่เก็บข้อมูล S3 และบันทึกจากเหตุการณ์และส่งอีเมลโดยใช้บริการ SES ดังที่แสดงด้านบน
เมื่อใดก็ตามที่มีกิจกรรมเกิดขึ้นในคอนโซล AWS บันทึกจะถูกส่งไปยังที่เก็บข้อมูล S3 และในเวลาเดียวกัน AWS lambda จะถูกทริกเกอร์และอีเมลจะถูกส่งไปยังรหัสอีเมลที่ระบุไว้ในรหัส
โปรดทราบว่าคุณสามารถประมวลผลบันทึกตามความต้องการของคุณใน AWS Lambda