Du kannst alle Änderungen an deinem AWS Account mit CloudTrail verfolgen. Wusstest du, dass du deinen AWS Account auch in Echtzeit mit eigenen Regeln beobachten kannst?
Durch die gemeinsame Nutzung von CloudTrail, S3, SNS und Lambda kannst du bei jeder Änderung an deinem AWS Account ein Programm ausführen das die API Aktivitäten in deinem Account prüft. CloudTrail stellt dazu ca. alle 5 Minuten ein Repot zur Verfügung. In diesem Artikel lieferst du eine Lösung zum überwachen der Tags deiner EC2 Instanzen um auffällige Aktivitäten in deinem Account zu entdecken aus.
Die folgende Abbildung zeigt wie die AWS Services miteinander verwendet werden.
Schauen wir uns ein konkretes Beispiel an.
Was ist auffällige API Aktivität?
CloudTrail zeichnet eine Menge API Aktivität auf. Dein Aufgabe ist die auffällige Aktivität darin zu entdecken. Zum Beispiel:
- Eine Security Group wurde geändert und erlaubt nun eingehenden Datenverkehr aus dem Internet (0.0.0.0/0)
- Ein IAM User wurde außerhalb der üblichen Arbeitszeiten angelegt.
- Eine EC2 Instanz wurde gestartet die nicht mit den üblichen Tags versehen wurde (zum Beispiel Kostenstelle, verantwortliches Team, …)
Das folgende Beispiel implementiert die Beobachtung von EC2 Instanz Tags.
EC2 Instanz Tags beobachten
Immer wenn CloudTrail einen neuen Bericht in S3 abgespeichert hat wird eine Lambda-Funktion ausgeführt. The Lambda-Funktion muss dann:
- Die SNS Nachricht verstehen.
- Die komprimierten CloudTrail Berichte von S3 herunterladen.
- Die Berichte auspacken.
- Über API Aktivitäten iterieren und nach Events Ausschau halten, die EC2 Instanz Tags betreffen, wie:
RunInstances
,CreateTags
undDeleteTags
. - Eine Warnung senden wenn die Tags nicht wie erwartet sind.
Glücklicherweise wurde die Lambda-Funktion schon geschrieben, so dass wir uns nicht mit Node.js Code herumschlagen müssen. Wir gehen dafür näher auf das Deplyoment der Lösung ein.
Die Lösung ausliefern
Eine Lambda-Funktion kann fast komplett mit CloudFormation ausgeliefert werden. Ein paar Schritte sind nötig um alles vorzubereiten:
- Wähle eine AWS Region in der du die API Aktivität beobachten willst (im folgenden als
$region
bezeichnet). - Erstelle ein SNS Topic in
$region
und subskribiere dich auf das Topic via E-Mail. Warnungen werden dann via E-Mail geschickt. - Lade den Code herunter in dem du
wget https://github.com/widdix/aws-tag-watch/archive/master.zip
in deinem Terminal ausführst. - Entpacke den Code mit
unzip master.zip
in deinem Terminal. - Wechsle in das entpackte Verzeichnis mit
cd aws-tag-watch-master/
in deinem Terminal. - Führe
npm install
in deinem Terminal aus um die Node.js Abhängigkeiten zu installieren. - Bearbeite die Datei
config.json
. Setze den Wert fürregion
auf$region
undalertTopicArn
auf den ARN des SNS Topics aus Schritt 1. - Führe
./bundle.sh
im Terminal aus. - Speichere die Datei
aws-tag-watch.zip
in einem S3 Bucket (das Bucket muss in der Region$region
angelegt werden). - Erzeuge einen CloudFormation Stack basierenden auf dem Template
template.json
. - Leider ist die Lambda-Unterstützung in CloudFormation noch nicht perfekt. Du musst einen manuellen Schritt ausführen um dem SNS Topic zu erlauben die Lambda Funktion aufzurufen.
# --function-name Bitte auf den Output LambdaFunctionName des CloudFormation Stacks setzen
# --source-arn Bitte auf den Output TrailTopicArn des CloudFormation Stacks setzen
aws lambda add-permission --function-name "..." --statement-id "s1" --action "lambda:invokeFunction" --principal "sns.amazonaws.com" --source-arn "..."
Ab sofort wird dein AWS Account in $region
beobachtet. Wenn du eine EC2 Instanz startest oder die Tags einer existierenden Instanz änderst prüft die Lambda Funktion ob der on config.json
konfigurierte Tag existiert.
Raum für Verbesserungen
Eine Warnung via E-Mail zu verschicken ist nicht sehr hilfreich wenn du in einem Team arbeitest. In diesem Fall ist OpsGenie eine bessere Lösung, welche bestens mit SNS zusammenarbeiten kann.
Lese mehr über Amazon Web Services
Willst du mehr über Amazon Web Services lernen? Andreas und ich schreiben ein Buch mit dem Titel Amazon Web Services in Action. Das Buch erscheint in englischer Sprache und wird von Manning verlegt. Das Buch wurde für Entwickler und Administratoren mit Interesse an DevOps geschrieben. Du lernst wie du verteilte Anwendungen auf der Plattform die AWS bietet betreibst. Es werden keine AWS Kenntnisse vorausgesetzt.