CloudTrail과 함께 Lambda 함수 사용
AWS CloudTrailAmazon에서 사용할 수있는 서비스로, AWS 콘솔 내에서 수행 된 모든 활동을 기록하는 데 도움이됩니다. 모든 API 호출을 기록하고 기록을 저장하여 나중에 디버깅 목적으로 사용할 수 있습니다. CloudTrail에서 Lambda를 트리거 할 수 없습니다. 대신 CloudTrail은 모든 기록을 S3 버킷에 로그 형식으로 저장하고 S3에서 AWS Lambda를 트리거 할 수 있습니다. 로그가 처리되면 S3 버킷에 로그가 추가 될 때마다 AWS Lambda가 트리거됩니다.
필요 조건
AWS CloudTrail, S3 및 AWS Lambda 작업을 시작하기 전에 다음을 수행해야합니다.
- CloudTrail 로그를 저장할 S3 버킷 생성
- SNS 서비스 생성
- CloudTrail에서 추적을 생성하고 S3 버킷 및 SNS 서비스 할당
- 권한이있는 IAM 역할을 생성합니다.
- AWS Lambda 함수 생성
- AWS Lambda 구성
예
AWS CloudTrail, S3 및 AWS Lambda의 작동을 보여주는 예를 고려해 보겠습니다. 여기서는 AWS 콘솔에서 수행 된 모든 상호 작용에 대한 모든 로그를 저장할 S3에 버킷을 생성합니다. SNS 주제를 만들어 게시 해 보겠습니다. 이 작업의 경우 로그가 S3에 파일로 입력됩니다. AWS lambda가 트리거되어 Amazon SES 서비스를 사용하여 메일을 보냅니다.
이 프로세스를 설명하는 블록 다이어그램은 다음과 같습니다.
CloudTrail 로그를 저장할 S3 버킷 생성
AWS 콘솔로 이동하여 S3 서비스를 클릭합니다. 딸깍 하는 소리Create bucket 다음과 같이 cloudtrail 로그를 저장할 버킷의 이름을 입력하십시오.
여기에서 S3 버킷이 생성되었는지 확인합니다. cloudtraillogsaws 로그를 저장하기 위해.
SNS 서비스 생성
AWS 콘솔로 이동하여 Simple notification Service. 왼쪽에서 주제를 선택하고 새 주제 만들기 버튼을 클릭합니다.
우리는라는 주제를 만들었습니다. displaytrail주제를 게시합니다. 세부 정보는 위에서 생성 된 S3bucket에 저장됩니다.
Cloudtrail에서 추적 생성 및 S3 버킷 및 SNS 서비스 할당
AWS 콘솔로 이동하여 CloudTrail 표시된대로 관리 도구에서 서비스-
딸깍 하는 소리 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등. 여기서 기본값을 사용했습니다. 파일 암호화를 허용 할 수 있으며 암호화 키를 요청합니다. 세부 정보가 추가되면 트레일 생성 버튼을 클릭합니다.
권한이있는 IAM 역할 생성
AWS 콘솔로 이동하여 IAM을 선택합니다. 이메일 전송을 위해 S3, Lambda, CloudTrail 및 SES에 대한 권한이있는 역할을 생성합니다. 생성 된 역할은 다음과 같습니다.
AWS Lambda 함수 생성
AWS 서비스로 이동하여 Lambda서비스. 함수 이름을 추가하고 런타임을 다음으로 선택하십시오.nodejs을 클릭하고 lambda 함수에 대해 생성 된 역할을 선택합니다. 다음은 생성 된 람다 함수입니다.
AWS Lambda 구성
다음으로, 생성 된 AWS lambda에 대한 트리거로 S3를 추가해야합니다.
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가 트리거되고 메일이 코드에 언급 된 이메일 ID로 전송됩니다.
AWS Lambda에서 필요에 따라 로그를 처리 할 수 있습니다.