Sử dụng hàm Lambda với CloudTrail
AWS CloudTraillà một dịch vụ có sẵn với Amazon, giúp ghi lại tất cả các hoạt động được thực hiện bên trong bảng điều khiển AWS. Nó ghi lại tất cả các lệnh gọi API và lưu trữ lịch sử, có thể được sử dụng sau này cho mục đích gỡ lỗi. Lưu ý rằng chúng tôi không thể kích hoạt Lambda từ CloudTrail. Thay vào đó, CloudTrail lưu trữ tất cả lịch sử dưới dạng nhật ký trong nhóm S3 và chúng tôi có thể kích hoạt AWS Lambda từ S3. Sau khi bất kỳ nhật ký nào được xử lý, AWS Lambda sẽ được kích hoạt bất cứ khi nào bất kỳ nhật ký nào được thêm vào nhóm S3.
Yêu cầu
Trước khi bắt đầu làm việc với AWS CloudTrail, S3 và AWS Lambda, bạn cần thực hiện những việc sau:
- Tạo nhóm S3 để lưu trữ nhật ký CloudTrail
- Tạo dịch vụ SNS
- Tạo đường dẫn trong CloudTrail và chỉ định nhóm S3 và dịch vụ SNS
- Tạo vai trò IAM với sự cho phép.
- Tạo hàm lambda aws
- Cấu hình AWS Lambda
Thí dụ
Hãy xem xét một ví dụ cho thấy hoạt động của AWS CloudTrail, S3 và AWS Lambda. Tại đây, chúng tôi sẽ tạo một nhóm trong S3 để lưu trữ tất cả nhật ký cho bất kỳ tương tác nào được thực hiện trong bảng điều khiển AWS. Hãy để chúng tôi tạo chủ đề SNS và xuất bản nó. Đối với hành động này, nhật ký sẽ được nhập dưới dạng tệp trong S3. AWS lambda sẽ được kích hoạt sẽ gửi thư bằng dịch vụ Amazon SES.
Sơ đồ khối để giải thích quá trình này như hình dưới đây:
Tạo Nhóm S3 để lưu trữ nhật ký CloudTrail
Đi tới bảng điều khiển AWS và nhấp vào dịch vụ S3. Nhấp chuộtCreate bucket và nhập tên của nhóm mà bạn muốn lưu trữ nhật ký cloudtrail như minh họa -
Hãy quan sát rằng ở đây chúng tôi đã tạo một nhóm S3 cloudtraillogsaws để lưu trữ các bản ghi.
Tạo dịch vụ SNS
Đi tới bảng điều khiển AWS và nhấp vào Simple notification Service. Chọn chủ đề từ phía bên trái và nhấp vào nút Tạo chủ đề mới.
Chúng tôi đã tạo chủ đề có tên displaytrailđể xuất bản một chủ đề. Thông tin chi tiết của nó sẽ được lưu trữ trong S3bucket được tạo ở trên.
Tạo một con đường trong Cloudtrail và chỉ định nhóm S3 và dịch vụ SNS
Đi tới bảng điều khiển AWS và nhấp vào CloudTrail dịch vụ từ các công cụ Quản lý như minh họa -
Nhấp chuột Trails từ phía bên trái như hình dưới đây -
Nhấp chuột Create Trailcái nút. NhậpTrail name, Apply trail to all regions và lựa chọn Yes. Sau đó Vì vậy, các bản ghi sẽ được áp dụng cho tất cả các khu vực.
Đối với Read/Write events, chọn All. ThêmS3 bucket và SNS topicchi tiết như hình bên dưới. Bạn có thể tạo một cái mới tại đây hoặc thêm một cái hiện có.
Lưu ý rằng có các tùy chọn có sẵn để encrypt log files, enable log file validation, send sns notification for every log file deliveryvv Tôi đã sử dụng các giá trị mặc định ở đây. Bạn có thể cho phép mã hóa tệp và nó sẽ yêu cầu khóa mã hóa. Nhấp vào nút Tạo đường nhỏ khi các chi tiết được thêm vào.
Tạo vai trò IAM với quyền
Đi tới bảng điều khiển AWS và chọn IAM. Tạo một vai trò với quyền cho S3, Lambda, CloudTrail và SES để gửi email. Vai trò được tạo như hình dưới đây -
Tạo hàm AWS Lambda
Đi tới dịch vụ AWS và nhấp vào Lambdadịch vụ. Thêm tên hàm, chọn thời gian chạy làmnodejsvà chọn vai trò được tạo cho hàm lambda. Sau đây là hàm lambda được tạo.
Cấu hình AWS Lambda
Tiếp theo, chúng ta cần thêm S3 làm trình kích hoạt cho AWS lambda đã tạo.
Thêm chi tiết nhóm S3 để thêm trình kích hoạt và thêm mã AWS Lambda sau:
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");
}
});
};
Lưu ý rằng chúng tôi đang lấy chi tiết nhật ký và thùng S3 từ sự kiện và gửi thư bằng dịch vụ SES như hình trên.
Bất cứ khi nào bất kỳ hoạt động nào diễn ra trong bảng điều khiển AWS, nhật ký sẽ được gửi đến nhóm S3 và đồng thời, AWS lambda sẽ được kích hoạt và thư sẽ được gửi đến id email được đề cập trong mã.
Lưu ý rằng bạn có thể xử lý nhật ký theo nhu cầu của mình trong AWS Lambda.