行业资讯

AWS CloudTrail、S3 和 AWS Lambda 的工作原理

2023-08-25 10:47  浏览:

AWS CloudTrail 是 Amazon 提供的一项服务,它有助于记录在 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 服务发送邮件。

解释这个过程的框图如下所示-

Block Diagram Cloudtrail

创建 S3 存储桶以存储 CloudTrail 日志

转到 AWS 控制台并单击 S3 服务。单击 创建存储桶并输入您要存储 cloudtrail 日志的存储桶的名称,如图所示-

创建存储桶

注意,我们在这里创建了一个 S3 存储桶 cloudtraillogsaws 用于存储日志。

创建 SNS 服务

转到 AWS 控制台并单击 简单通知服务。从左侧选择主题,然后单击创建新主题按钮。

简单通知

我们创建了名为 displaytrail 的主题来发布主题。它的详细信息将存储在上面创建的 S3bucket 中。

在 Cloudtrail 中创建跟踪并分配 S3 存储桶和 SNS 服务

转到 AWS 控制台并单击管理工具中的 CloudTrail 服务,如图所示-

创建路径

点击左侧的 Trails,如下图所示-

Trail Dashboard

 

Trails

点击 创建轨迹按钮。输入 轨迹名称,将轨迹应用于所有区域,然后选择 是。那么日志将应用于所有区域。

Trail Name

对于 读/写事件,选择 全部。添加 S3 存储桶 和 SNS 主题 详细信息,如下所示。您可以在此处创建一个新的或添加一个现有的。

读取事件

请注意,有一些选项可用于 加密日志文件、启用日志文件验证、为每个日志文件传送发送 sns 通知等。我在这里使用了默认值。您可以允许文件加密,它会要求加密密钥。添加详细信息后,单击"创建路径"按钮。

加密日志

创建具有权限的 IAM 角色

转到 AWS 控制台并选择 IAM。创建一个具有 S3、Lambda、CloudTrail 和 SES 权限的角色,用于发送电子邮件。创建的角色如下图所示-

Trail Lambda

创建 AWS Lambda 函数

转到 AWS 服务并单击 Lambda 服务。添加函数名称,选择 runtime 为 nodejs,然后选择为 lambda 函数创建的角色。以下是创建的 lambda 函数。

Lambda Trail

AWS Lambda 配置

接下来,我们需要添加 S3 作为 AWS lambda 创建的触发器。

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。

Cloudtrail 日志

请注意,您可以在 AWS Lambda 中根据需要处理日志。

作为AWS顶级代理商,选择天.下.数.据的优势

1、专属客服协助注册AWS,或提供注册好的账号直接使用

2、支持收U等多币种支付代付,无额外服务费用

3、AWS多种产品类型,更高产品租赁权限

4、针对大客户,AWS专属折扣优惠

5、7x24小时专属客服,在线解答各种疑问

详询电话40 0-63 8-88 08 官网:https://www.idCbest.com/2023/aws.asp

【免责声明】:部分内容、图片来源于互联网,如有侵权请联系删除,QQ:228866015

下一篇:在Amazon Kinesis中使用Lambda函数 上一篇:在Amazon SNS中使用Lambda函数
24H服务热线:4006388808 立即拨打