KubeCon 2019: audit logs

Mark Stemm van Sysdig geeft een overzicht van de manier waarop Kubernetes audit logs, nieuw in 1.11 en aangepast in 1.13, zijn te gebruiken om de beveiliging van een cluster te monitoren en te verbeteren.

Audit events zijn een chronologische set van gegevens die alle veranderingen binnen een cluster bevatten, opgeslagen in JSON met behulp van de api-server. De events zijn REST-gebaseerde http verbs die zijn vertaald naar verbs in JSON, bijvoorbeeld “verb”: “delete”. Filteren op alle delete statements in het cluster wordt daardoor eenvoudig mogelijk. En niet alleen de events zijn vastgelegd, maar ook de resultcodes (bijvoorbeeld 404, of 200). Zo is het mogelijk te zien wat het effect van een handeling was. Daarnaast is er bijzonder veel informatie opgeslagen, eigenlijk alles wat tot een exec statement in de logs leidt. Dus ook commando’s als “kubectl get pods”, uitgevoerd door zowel eindgebruikers als services (zoals bijvoorbeeld kube-scheduler).

Wat exact wordt gelogd is van tevoren vastgelegd in een audit policy, gebaseerd op regels. De events zelf zijn vervolgens opgeslagen in een specifiek backend, waarvan drie varianten bestaan: op logniveau (1 JSON record per event, per regel), op niveau van webhook (een JSON array met meerdere events) en sinds versie 1.13 van Kubernetes ook dynamisch, dus aan te maken en te verwijderen wanneer dat noodzakelijk is. Het voordeel hiervan is dat toegang tot de Kubernetes cluster API (en daarmee toegang tot de Kubernetes Master) niet langer noodzakelijk is.

Sysdig heeft het open source tool Falco beschikbaar voor het vastleggen en bestuderen van audit events. Het is een uitbreiding op het bestaande tool jq. Met dat laatste tool is handmatig zoeken door de audit events mogelijk, door values bij bekende keys te zoeken (alle deletes in een cluster met resultaatcode 200 bijvoorbeeld).

Falco biedt als voordeel dat zoeken veel eenvoudiger is, door gebruik te maken van voorgedefinieerde templates voor bijvoorbeeld verdachte activiteit in het cluster, of ongewenste configuratie (zoals het in plain text opslaan van een wachtwoord in een configuratiebestand). Falco is regelgebaseerd en kan het resultaat van een query doorsturen naar een externe service, bijvoorbeeld voor alerting.