AWS CloudTrail 是亚马逊提供的服务,可帮助记录在AWS控制台内完成的所有活动.它记录所有API调用并存储历史记录,稍后可用于调试目的.请注意,我们无法从CloudTrail触发Lambda.相反,CloudTrail以S3桶中的日志形式存储所有历史记录,我们可以从S3触发AWS Lambda.一旦要处理任何日志,只要将任何日志添加到S3存储桶,AWS Lambda就会被触发.
开始工作之前使用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服务发送邮件.
用于解释此过程的框图如下所示 :
转到AWS控制台并单击S3服务.单击创建存储桶,然后输入要存储cloudtrail日志的存储桶的名称,如下所示 :
注意,我们在这里创建了一个用于存储日志的S3存储桶 cloudtraillogsaws .
转到AWS控制台并单击简单通知服务.从左侧选择主题,然后单击"创建新主题"按钮.
我们创建了一个名为 displaytrail 的主题来发布主题.其详细信息将存储在上面创建的S3bucket中.
转到AWS控制台并从管理工具中单击 CloudTrail 服务,如下所示 :
点击左侧的 Trails ,如下图所示 :
单击创建路径按钮.输入路径名称,将路径应用于所有地区,然后选择是.那么日志将应用于所有区域.
对于读/写事件,请选择全部.添加 S3存储桶和 SNS主题详细信息,如下所示.你可以在这里创建一个新的或添加现有的.
请注意,加密日志文件,启用日志文件验证,为每个日志文件传送发送sns通知等可用选项.我在此处使用了默认值.您可以允许文件加密,它会要求加密密钥.添加详细信息后,单击"创建路径"按钮.
转到AWS控制台并选择IAM.创建具有S3,Lambda,CloudTrail和SES权限的角色,用于发送电子邮件.创建的角色如下所示 :
转到AWS服务并单击 Lambda 服务.添加函数名称,选择runtime作为 nodejs ,然后选择为lambda函数创建的角色.以下是创建的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: ["xxxxxxxxx12@gmail.com"] }, Message: { Body: { Text: { Data:s3message } }, Subject: { Data: "cloudtrail logs" } }, Source: "coxxxxxx@gmail.com" }; 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将被触发,邮件将被发送到代码中提到的电子邮件ID.
请注意,您可以根据AWS Lambda中的需要处理日志