Używanie funkcji Lambda z CloudTrail
AWS CloudTrailto usługa dostępna w Amazon, która pomaga rejestrować wszystkie czynności wykonywane w konsoli AWS. Rejestruje wszystkie wywołania API i przechowuje historię, która może być później wykorzystana do debugowania. Zauważ, że nie możemy wyzwolić Lambda z CloudTrail. Zamiast tego CloudTrail przechowuje całą historię w postaci logów w wiadrze S3 i możemy wyzwalać AWS Lambda z S3. Gdy jakiekolwiek logi mają zostać przetworzone, AWS Lambda zostanie wyzwolony za każdym razem, gdy jakiekolwiek logi zostaną dodane do zasobnika S3.
Przybory
Zanim zaczniesz pracować z AWS CloudTrail, S3 i AWS Lambda, musisz wykonać następujące czynności -
- Utwórz zasobnik S3 do przechowywania dzienników CloudTrail
- Utwórz usługę SNS
- Utwórz ślad w CloudTrail i przypisz zasobnik S3 i usługę SNS
- Utwórz rolę IAM z uprawnieniami.
- Utwórz funkcję lambda aws
- Konfiguracja AWS Lambda
Przykład
Rozważmy przykład, który pokazuje działanie AWS CloudTrail, S3 i AWS Lambda. Tutaj utworzymy zasobnik w S3, który będzie przechowywać wszystkie dzienniki dla każdej interakcji wykonanej w konsoli AWS. Stwórzmy temat SNS i opublikujmy go. W przypadku tej akcji dzienniki zostaną wprowadzone jako plik w S3. Uruchomiona zostanie lambda AWS, która wyśle pocztę za pomocą usługi Amazon SES.
Schemat blokowy wyjaśniający ten proces jest przedstawiony poniżej -
![](https://post.nghiatu.com/assets/tutorial/aws_lambda/images/block_diagram_cloudtrail.jpg)
Utwórz zasobnik S3 do przechowywania dzienników CloudTrail
Przejdź do konsoli AWS i kliknij usługę S3. KliknijCreate bucket i wprowadź nazwę zasobnika, w którym chcesz przechowywać dzienniki Cloudtrail, jak pokazano -
![](https://post.nghiatu.com/assets/tutorial/aws_lambda/images/create_bucket.jpg)
Zwróć uwagę, że tutaj stworzyliśmy wiadro S3 cloudtraillogsaws do przechowywania kłód.
Utwórz usługę SNS
Przejdź do konsoli AWS i kliknij Simple notification Service. Wybierz tematy z lewej strony i kliknij przycisk Utwórz nowy temat.
![](https://post.nghiatu.com/assets/tutorial/aws_lambda/images/simple_notification.jpg)
Stworzyliśmy temat o nazwie displaytrailopublikować temat. Jego szczegóły zostaną zapisane w utworzonym powyżej S3bucket.
Utwórz ślad w Cloudtrail i przypisz zasobnik S3 i usługę SNS
Przejdź do konsoli AWS i kliknij CloudTrail usługa z narzędzi zarządzania, jak pokazano -
![](https://post.nghiatu.com/assets/tutorial/aws_lambda/images/create_trails.jpg)
Kliknij Trails od lewej strony, jak pokazano poniżej -
![](https://post.nghiatu.com/assets/tutorial/aws_lambda/images/trail_dashboard.jpg)
![](https://post.nghiatu.com/assets/tutorial/aws_lambda/images/trails.jpg)
Kliknij Create Trailprzycisk. Wejdz doTrail name, Apply trail to all regions i wybierz Yes. Następnie dzienniki zostaną zastosowane dla całego regionu.
![](https://post.nghiatu.com/assets/tutorial/aws_lambda/images/trail_name.jpg)
Dla Read/Write eventswybierz All. DodajS3 bucket i SNS topicszczegóły, jak pokazano poniżej. Możesz tutaj utworzyć nowy lub dodać istniejący.
![](https://post.nghiatu.com/assets/tutorial/aws_lambda/images/read_events.jpg)
Zwróć uwagę, że są dostępne opcje encrypt log files, enable log file validation, send sns notification for every log file deliveryitp. Użyłem tutaj wartości domyślnych. Możesz zezwolić na szyfrowanie plików i poprosi o klucz szyfrowania. Kliknij przycisk Utwórz szlak po dodaniu szczegółów.
![](https://post.nghiatu.com/assets/tutorial/aws_lambda/images/encrypt_log.jpg)
Utwórz rolę uprawnień z uprawnieniami
Przejdź do konsoli AWS i wybierz IAM. Utwórz rolę z uprawnieniami dla S3, Lambda, CloudTrail i SES do wysyłania wiadomości e-mail. Utworzona rola jest taka, jak pokazano poniżej -
![](https://post.nghiatu.com/assets/tutorial/aws_lambda/images/trail_lambda.jpg)
Utwórz funkcję AWS Lambda
Przejdź do usługi AWS i kliknij Lambdausługa. Dodaj nazwę funkcji, wybierz środowisko wykonawcze jakonodejsi wybierz rolę utworzoną dla funkcji lambda. Poniżej znajduje się utworzona funkcja lambda.
![](https://post.nghiatu.com/assets/tutorial/aws_lambda/images/lambda_trail.jpg)
Konfiguracja AWS Lambda
Następnie musimy dodać S3 jako wyzwalacz dla utworzonej lambdy AWS.
![](https://post.nghiatu.com/assets/tutorial/aws_lambda/images/lambda_configuration.jpg)
Dodaj szczegóły zasobnika S3, aby dodać wyzwalacz, i dodaj następujący kod 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");
}
});
};
Zauważ, że pobieramy wiadro S3 i rejestrujemy szczegóły zdarzenia i wysyłamy pocztę za pomocą usługi SES, jak pokazano powyżej.
Za każdym razem, gdy w konsoli AWS ma miejsce jakakolwiek czynność, logi zostaną przesłane do wiadra S3 i jednocześnie wyzwolona zostanie lambda AWS i wiadomość zostanie wysłana na adres e-mail podany w kodzie.
![](https://post.nghiatu.com/assets/tutorial/aws_lambda/images/cloudtrail_logs.jpg)
Pamiętaj, że możesz przetwarzać dzienniki zgodnie ze swoimi potrzebami w AWS Lambda.