423 Automatisierung mit Lambda Funktionen [3 PT]

Posted Over 1 year ago. Visible to the public.

Du möchtest deinen AWS Account auf bestimmte Fehlkonfigurationen hin überwachen. Dafür wirst du AWS Config einsetzen. Über gebrochene AWS Config Rules möchtest du informiert werden. Du möchtest aber nicht nur eine Nachricht erhalten, sondern es soll ein Ticket/Issue in einem Gitlab Projekt erstellt werden, damit jemand sich dieses Problem ansehen und fixen kann. Hierfür gibt es noch keine fertige Lösung und du möchtest eine Lambda Funktion dafür verwenden. Selbstverständlich verwaltest du alles mit Terraform.

Inhalte

Aufgaben

  1. Erstelle ein neues Gitlab Projekt auf gitlab.com Show archive.org snapshot .

  2. Erstelle ein Terraform Modul im Gitlab Projekt. Das Modul soll seinen State in einem S3 Bucket speichern. Du kannst das selbst lösen oder z.B. cloudposse/tfstate-backend Show archive.org snapshot verwenden.

  3. Aktiviere Cloudtrail in deinem Account. Du kannst dafür das Modul makandra/modules/account_cloudtrail Show archive.org snapshot verwenden. Schau dir den Quelltext von dem Modul an und verstehe ihn. Besprich das mit deinem Mentor.

  4. Erstelle ein SNS Topic und erstelle eine E-Mail Subscription zu dir. Teste ob das Topic funktioniert, indem du mit der AWS-CLI eine Nachricht published.

  5. Richte AWS Config ein. Es reicht wenn du eine Rule einrichtest, die du leicht brechen und wieder reparieren kannst, z.B. restricted-ssh Show archive.org snapshot . Teste ob du die Regel brechen kannst.

  6. Richte AWS Config so ein, dass eine Benachrichtigung an dein SNS Topic gesendet wird.

  7. Erstelle nun eine AWS Lambda Funktion. Die Lambda Funktion soll über das SNS Topic Benachrichtigungen von AWS Config entgegen nehmen. Anschließend soll diese per Webhook ein Issue in deinem Gitlab Projekt erstellen. Versuche so früh wie möglich deine Lambda via Terraform deploybar zu machen. Folgende Punkte müssen für die Lambda Funktion erfüllt sein:

    • Man muss zu Testzwecken die Lambda Funktion auch lokal ausführen können (z.B. alles in einer main function, die dann für Lambda über den handler aufgerufen wird)
    • Der Gitlab Token, die Projekt ID und die Gitlab URL können als Environment Variable konfiguriert werden
    • Gestalte Methoden/Funktionen in deiner Lambda so, dass du sie mit Unit Tests testen kannst (soweit möglich)
    • Schreibe Unit Tests
    • Eigentlich verwendet man keine Personal Access Tokens, aus Lizenzierungsgründen ist dies aber notwendig bei gitlab.com. Warum sollte man das in realen Projekten vermeiden und was ist die bessere Alternative?
    • Sowohl Issue Title als auch Description sollten genügend Informationen liefern, damit man weiß wo man hinfassen muss. Es ist aber nicht genug einfach ein JSON in die Description zu pasten (das kann aber zusätzlich erfolgen)

    Common mistake

    Du wirst wahrscheinlich deine SNS subscription filter policy per e-mail testen wollen. Beachte, dass dazu der email-json endpoint notwendig ist. Finde heraus warum der normale email endpoint hierfür nicht infrage kommt.

Claus-Theodor Riegg
Last edit
10 months ago
Matthias Bruhse
License
Source code in this card is licensed under the MIT License.
Posted by Claus-Theodor Riegg to DevOps Curriculum (2022-12-02 12:10)