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
- What Is AWS CloudTrail? Show archive.org snapshot
- What Is AWS Config? Show archive.org snapshot
- Terraform S3 state backend Show archive.org snapshot
- Building Lambda functions with Ruby Show archive.org snapshot
- Terraform: Deploying code for lambda functions
- Using AWS Lambda with Amazon SNS Show archive.org snapshot
- Gitlab Project access tokens Show archive.org snapshot
- Gitlab API new-issue Show archive.org snapshot
Aufgaben
-
Erstelle ein neues Gitlab Projekt auf gitlab.com Show archive.org snapshot .
-
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.
-
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.
-
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.
-
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.
-
Richte AWS Config so ein, dass eine Benachrichtigung an dein SNS Topic gesendet wird.
-
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 API-Call 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 denhandler
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 normaleemail
endpoint hierfür nicht infrage kommt. - Man muss zu Testzwecken die Lambda Funktion auch lokal ausführen können (z.B. alles in einer