‫Oké,
‫dus een nieuwe functie in 1. 13. 1 was volledige ondersteuning voor geheimen.
‫Als ik een slogan zou moeten maken van wat dit is, is het in feite de 'gemakkelijkste veilige oplossing voor het opslaan van geheimen in
‫Swarm'. ' Ik
‫zeg dat het de gemakkelijkste is omdat het in Swarm is ingebouwd, het komt
‫uit de doos en je hoeft niets te doen om het te gebruiken. Zolang je je zwerm hebt geïnitialiseerd en versie
‫1 hebt. 13
‫of nieuwer, je hebt geheimen. Ik zeg dat het veilig is omdat het van de grond af is ontworpen
‫om te worden versleuteld op schijf om te worden versleuteld tijdens het transport en om alleen beschikbaar te zijn op de plaatsen waar het moet zijn.
‫En dat is echt wat we nodig hebben.
‫Dus wat is een geheim? Een geheim is in dit geval om alles wat je niet wilt op
‫de voorpagina van een krant te plaatsen. Als het op de voorpagina kwam en je moest het veranderen,
‫dan is dat een geheim.
‫Het is een gebruikersnaam of
‫wachtwoord, het is een TLS-certificaat of de sleutels
‫daarvoor, het is een
‫SSH-sleutel, het is een Twitter API-sleutel, het is een Amazon-sleutel, het is alles wat je nodig hebt om connectiviteit tussen dingen mogelijk
‫te maken is waarschijnlijk een geheim en je zou het beschermen.
‫Tot nu toe hebben we niet veel geweldige opties gehad voor Swarm.
‫Er zijn zeker veel opties zoals Vault en andere geweldige tools voor het opslaan van geheimen, maar
‫ze waren niet ingebouwd en ze vereisten een aparte infrastructuuropstelling zodat je ze zelfs
‫kon gaan gebruiken.
‫We kunnen hier dus alles opslaan dat een string of een binair getal is tot . 5 MB groot.
‫En het coolste hiervan is dat je app niet echt hoeft te worden herschreven om hem te
‫kunnen gebruiken.
‫U hoeft uw app niet ergens anders met een webservice te laten praten om deze te krijgen.
‫Dus laten we eens kijken hoe het werkt.
‫Vanaf 1. 13. 0 de Swarm Raft-database is standaard versleuteld op schijf. Als je Docker installeert en een
‫swarm-init doet zoals we eerder hebben gedaan, is
‫dat een versleutelde database.
‫En wanneer de service wordt afgesloten, wordt deze versleuteld met de veilig opgeslagen sleutels.
‫Het wordt alleen opgeslagen op de schijf van de managerknooppunten en zij zijn de enigen die de sleutels hebben
‫om het te ontgrendelen of te decoderen.
‫Dit bestaat al in Swarm, maar in feite is de manier waarop de
‫sleutels naar de containers gaan via het controlevlak of de gecodeerde TLS-netwerkcommunicatie
‫tussen de managers en de arbeiders. En die verbinding was al veilig, het maakte al gebruik van TLS
‫en wederzijdse PKI-authenticatie, dus het was een geweldige manier om dat bestaande kanaal te gebruiken om deze geheimen naar onze containers te brengen.
‫De manier waarop we ze rondkrijgen, is dat we ze eerst in de Swarm-database plaatsen met behulp
‫van Docker-geheimen-opdrachten.
‫Vervolgens wijzen we ze toe aan de services, of we nu de serviceopdrachten zelf gebruiken of een stapelbestand
‫om Swarm te vertellen wie dit geheim mag gebruiken. De sleutel hier is dat alleen omdat er een container op een host of op
‫een knooppunt is en u de sleutel aan die service hebt toegewezen, dit niet betekent dat andere containers er toegang
‫toe kunnen krijgen.
‫Omdat dit is ingebouwd in de Docker Engine, bewaart de Docker Worker die sleutel alleen in het geheugen en gaat alleen
‫naar de containers op dat knooppunt die ze nodig hebben.
‫Hoe ze nu in het bestandssysteem aan de container worden gepresenteerd, is dat het eruitziet als een bestand op de harde schijf
‫naar uw apps in de container.
‫Maar dat is het eigenlijk niet. Ze draaien niet echt op schijf. Ze bevinden zich in het
‫geheugen en gebruiken alleen een ramfs-bestandssysteem en je komt bij ze onder de /run/secrets-directory waar het standaard de naam is
‫die je het geheim als bestand hebt gegeven.
‫Als je dan alleen dat bestand opent, zie je het enige geheim dat erin zit.
‫Als je dit ziet als een sleutelwaardearchief,
‫is de sleutel de naam van het bestand en de waarde is wat erin staat.
‫We kunnen ook aliassen instellen zodat we meerdere namen voor dezelfde sleutel kunnen hebben en we zullen later zien hoe dat in
‫het spel komt.
‫Voor lokale ontwikkeling, als je een stapelbestand gebruikt dat geheime toewijzingen bevat, zal het daadwerkelijk werken in
‫Docker Compose op je lokale computer.
‫Nogmaals, docker-compose, de opdrachtregel, mag nooit worden gebruikt in productie op een productieserver.
‫In dit geval in het bijzonder is het eigenlijk nep-beveiliging.
‫Dus wat er gebeurt, is dat we echt willen dat de Docker-ontwikkelaar of de Docker-gebruiker op hun computer
‫de stapelbestanden zoveel mogelijk kan gebruiken.
‫Dus de containers die je op je lokale machine draait, zullen de geheimen zien, net zoals ze zouden
‫doen in Swarm.
‫Maar we hebben Swarm niet op onze lokale machine, tenzij we het daar initialiseren, wat
‫de meeste mensen niet zullen doen.
‫En de manier waarop we de geheimen opslaan, is in de Swarm-database.
‫Dus dit is misschien een beetje voor de hand liggend voor je, maar geheimen hangen af van Swarm. Het is een zwerm-only ding. Als je geen Swarm
‫hebt, kun je geen geheimen gebruiken.
‫De opdracht docker-compose heeft echter een tijdelijke oplossing waarbij de geheimen in een duidelijk tekstbestand in de
‫lokale container worden gemount.
‫Dat is niet veilig, maar het stelt ons wel in staat om geheimen lokaal op onze machine te gebruiken.
‫Het is gewoon niet iets dat je in productie zou willen gebruiken, daarom hebben we de beveiligde winkel voor
‫Swarm.