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 -
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 -
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.
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 -
Kliknij Trails od lewej strony, jak pokazano poniżej -
Kliknij Create Trailprzycisk. Wejdz doTrail name, Apply trail to all regions i wybierz Yes. Następnie dzienniki zostaną zastosowane dla całego regionu.
Dla Read/Write eventswybierz All. DodajS3 bucket i SNS topicszczegóły, jak pokazano poniżej. Możesz tutaj utworzyć nowy lub dodać istniejący.
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.
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 -
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.
Konfiguracja AWS Lambda
Następnie musimy dodać S3 jako wyzwalacz dla utworzonej lambdy AWS.
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.
Pamiętaj, że możesz przetwarzać dzienniki zgodnie ze swoimi potrzebami w AWS Lambda.