Bij Kubernetes werk je met secrets, die allerlei gevoelige informatie kunnen omvatten. Denk hierbij aan database credentials, maar ook aan API-keys. De term secrets management omschrijft het (veilig) centraal beheren van deze secrets. Sebastiaan Kok, Innovation Engineer bij True, legt uit wat secrets management zo belangrijk maakt en waarom dit bij Kubernetes een extra belangrijk aandachtspunt is. Ook licht Sebastiaan toe hoe True zelf met secrets management omgaat en zo klanten ondersteunt bij het veilig houden van hun secrets.
“Secrets Management is een proces waarbij je secrets zoals SSH-keys, database credentials, certificaten en API-keys op een veilige manier en vanuit een centrale plek beheert. De toegang wordt bepaald aan de hand van role-based access control en policies”, legt Sebastiaan uit.
Secrets centraal beheren
Het centraal beheren van secrets biedt belangrijke voordelen. “Zeker indien een secret op meerdere plaatsen in gebruik is, bijvoorbeeld op meerdere locaties in de CI/CD-pipeline of een applicatie, kan het beheer complex zijn. Wil je bijvoorbeeld een secret wijzigen of roteren? Dan kan dit veel werk met zich meebrengen”, aldus Sebastiaan. Secrets management biedt uitkomst. “Het centraal beheren van secrets vereenvoudigt dit.”
Secrets management omslaat veel meer dan het afschermen van uitsluitend wachtwoorden. “Secret management heeft betrekking op het beheer van alle secrets binnen een organisatie en het centraal opslaan daarvan. Vaak werken binnen een organisatie meerdere teams, die ieder over hun eigen secrets beschikken. Iedereen werkt daarnaast ook nog eens op zijn eigen wijze met deze secrets. Het beheer kan hierdoor een uitdaging zijn.”
Secret management en Kubernetes
Ook in de wereld van Kubernetes is het adequaat beheren van secrets een belangrijk aandachtspunt. “Het beheren van secrets is bij Kubernetes met name een uitdaging indien je werkt met GitOps”, zegt Sebastiaan. Bij GitOps configureer je Kubernetes deployments aan de hand van specificaties die zijn opgeslagen in een Git-repository. De repository vormt hierbij de single source of truth.
“De secrets die nodig zijn voor het configureren van een Kubernetes deployment zijn standaard niet versleuteld. Dat is vergelijkbaar met het in platte tekst opslaan van je wachtwoorden, wat ronduit een slecht idee is. Bij GitOps heb je dan ook een manier nodig voor het veilig werken met secrets.”
Met meerdere clusters werken
Secret management is ook bij het werken met meerdere Kubernetes clusters een belangrijk aandachtspunt. “Kubernetes slaat secrets standaard op in het cluster. Werk je echter met meerdere clusters? Dan betekent dat in de praktijk dat secrets in meerdere clusters zijn opgeslagen.”
Een andere toepassing is het beheer van secrets voor omgevingsvariabelen. “Denk echter ook aan CI/CD-pipelines. Bijvoorbeeld indien een pipeline toegang nodig heeft tot een beveiligde resource zoals SSH of een databaseserver”, zegt Sebastiaan. Je kunt secrets management ook gebruiken voor automatisering. “Bijvoorbeeld indien je werkt met Ansible of Terraform. Ook hiervoor heb je vaak secrets nodig.”
Belangrijk is dat je gebruik maakt van een oplossing met sterke encryptie. De encryptie die je toepast bepaalt in belangrijke mate de veiligheid van de opgeslagen secrets. “Een uitdaging is het configureren van policies. Wie heeft toegang tot welke specifieke secret? Het configureren daarvan is een belangrijk aandachtspunt.”
Base64 encoded
Kubernetes secrets zijn uitsluitend standaard base64 encoded. “Base64 is het coderingsproces waarbij binaire gegevens worden geconverteerd naar ASCII. Base64 kan door iedereen decoded worden. Oftewel: je slaat wachtwoorden dus in feite in platte tekst op, wat onveilig is.”
“Git is bedoeld voor het delen van broncodes, bijvoorbeeld met collega’s, externe bedrijven waarmee je samenwerkt of zelfs volledige communities indien je code openbaar maakt. Het opslaan van secrets in platte tekst in code of Git wil je daarom niet. Encoding is immers geen encryptie”, legt de Innovation Engineer uit.
Kubernetes secrets veilig opslaan
Onder meer verschillende open source-projecten bieden uitkomst bij het veilig opslaan van Kubernetes secrets. Denk hierbij aan Bitnami Sealed Secrets en KSOPS. Sealed Secrets is bijvoorbeeld een manier waarop je Kubernetes secrets kan encrypten en omzetten naar een Sealed Secret. Deze kan je vervolgens veilig opslaan in Git.
“Indien je een Sealed Secret deployet tegen Kubernetes, ontsleutelt een zogeheten controller die is opgenomen in het cluster de Sealed Secret. Deze wordt hierbij omgezet in een regulier Kubernetes secret”, aldus Sebastiaan. De werkwijze kent ook nadelen. “Voor het gebruik van Sealed Secrets moet een developer toegang hebben tot kubectl en heeft permissies nodig om secrets te encrypten. Om een wijziging te maken aan reeds bestaande Sealed Secrets moet een developer lokaal beschikken over de unencrypted secrets. Naast dat je wilt voorkomen dat secrets lokaal op systemen staan, schaalt deze oplossing niet goed wanneer je met een groter developmentteam werkt.”
Vault
Ook andere opties zijn beschikbaar. “Bij True kiezen we voor een aanpak waarbij het opslaan van versleutelde secrets in Git niet nodig is: Vault van HashiCorp. Hierbij maak je in een deployment een referentie naar een locatie in een zogeheten Vault. Aan de hand van deze referenties worden de juiste secrets geïnjecteerd in een container”, legt Sebastiaan uit.
Deze werkwijze biedt op het gebied van veiligheid een belangrijk voordeel. Zelfs indien kwaadwillenden een referentie in handen krijgen, kunnen zij hiermee in de praktijk niets. Zij beschikken dan immers uitsluitend over een referentie naar een secret, terwijl de secret zelf veilig staat opgeslagen in een Vault.
“Een ander belangrijk voordeel is dat ontwikkelaars in tegenstelling tot Sealed Secrets geen toegang nodig hebben tot kubectl en niet bij de Kubernetes API hoeven te kunnen. Zo kan je een veel duidelijkere scheiding van verantwoordelijkheden toepassen. Zeker bij omvangrijke ontwikkelteams is dit van belang; je wilt doorgaans niet iedere developer toegang geven tot de Kubernetes API en de mogelijkheid bieden tot het en/decrypten van secrets.”
Bewezen oplossing
Vault is een bewezen enterprise oplossing, die wereldwijd veel in gebruik is. Het maakt onder meer gebruik van sterke encryptie, waardoor je secrets altijd veilig zijn opgeslagen. “Ook zijn er uitgebreide mogelijkheden voor het configureren van policies. Hiermee bepaal je onder meer wie toegang heeft tot welke secrets. Door gebruik te maken van audit logging is het mogelijk om in te zien welke gebruikers, secrets hebben opgevraagd of hebben bewerkt.”
“Een ander belangrijk voordeel zijn de uitgebreide authenticatiemogelijkheden die Vault omvat. Zo kunnen we niet alleen klanten toegang geven tot secrets, maar ook vanuit Kubernetes secrets ophalen. Daarmee biedt de oplossing ontzettend veel flexibiliteit.”
Isolatielaag
“Vault draaien wij voor klanten als een SaaS-dienst op onze True infrastructuur. Daarbovenop draait een automatiseringslaag, die naar de namespaces van het Kubernetes-cluster kijkt. Deze automatiseringslaag configureert policies en bepaalt aan de hand hiervan welke namespaces toegang hebben tot welke secrets. Je kunt deze automatiseringslaag dan ook zien als een isolatielaag, die zorgt dat namespaces niet bij elkaars secrets kunnen komen.”
In de Kubernetes-clusters van True draait een zogeheten ‘mutating webhook’. Indien een deployment plaatsvindt met daarin een referentie naar Vault, injecteert de webhook de gewenste secrets in het geheugen van de container.
Daarnaast voorziet True klanten van Keycloak, een open source identity & access management-oplossing. Keycloak geeft klanten toegang tot SaaS-diensten die True aanbiedt, zoals ArgoCD voor GitOps, kubectl en dus ook Vault. “Op deze manier ontsluiten wij klanten op een veilige manier naar hun Vault, zodat ontwikkelaars bijvoorbeeld zelf secrets kunnen toevoegen. Ook kunnen klanten zo gebruik maken van tweefactorauthenticatie (2FA)”, zegt de Innovation Engineer van True.
Lees ook: Wat is Argo CD? En waarom onze engineers er fan van zijn?
Vault intern al enkel jaren in gebruik
True maakt intern al enkele jaren gebruik van Vault. “Sinds ongeveer een half jaar draaien we de oplossing ook in productie voor klanten. Zij kunnen hierdoor zelf in Vault secrets opslaan.”
De reacties zijn positief. “Klanten geven aan dat Vault het werken met secrets vergemakkelijkt. Onder meer door zijn eenvoudige gebruikersinterface. Een wat groter ontwikkelteam kan nu rechtstreeks in Vault werken, en heeft geen toegang meer nodig tot bijvoorbeeld kubectl. Belangrijk, want Vault spreekt veel meer voor zich. Ook de scheiding van verantwoordelijkheden die met Vault mogelijk is wordt door klanten als belangrijk voordeel genoemd.”
Onboardings
True helpt klanten met Vault op weg. “Hiervoor beschikken we onder meer over zogeheten ‘onboardings’. We maken klanten hiermee wegwijs in de wereld van Kubernetes en GitOps. En in dit geval de wereld van Vault.” Hierbij is onder meer aandacht voor uitdagingen die Vault met zich meebrengt, zoals het debuggen van foutmeldingen.
“Wij zijn zelf ook erg benieuwd wat de ontwikkeling van Vault en Kubernetes voor interessante nieuwe mogelijkheden gaat bieden. We onderzoeken bijvoorbeeld hoe we een tool als ArgoCD nog nauwer kunnen integreren in Vault. Dit zou de configuratie van deployments nog verder vereenvoudigen”, zegt Sebastiaan.