AllInfo

Hur man skyddar känsliga data med Docker Compose Secrets

Säker hemlig hantering är en viktig aspekt av containersäkerhet. Om du injicerar lösenord och API-nycklar som miljövariabler riskerar du oavsiktlig informationsexponering. Shell-variabler loggas ofta, överförs till underordnade processer eller läcks ut till felrapporteringstjänster utan din vetskap.

Att injicera värden som dedikerade hemligheter mildrar dessa risker. Docker har inbyggt stöd för säker hemlig hantering som du kan ansluta till med Docker Compose. Tillgång till hemligheter ges per tjänst.

Hur fungerar hemligheter?

Docker CLI har en mängd hemliga ledningskommandon men dessa fungerar bara med Swarm-kluster. Du kan inte lägga till hemligheter i fristående behållare med Docker CLI ensam.

Docker Compose tillade & # 8220; falsk & # 8221; hemligheter för att få dessa funktioner till arbetsbelastningar utan ett kluster. Composes implementeringsfunktioner liknar Docker Swarm-funktionerna och fungerar med alla Compose-filer.

Hemligheter skapas som vanliga textfiler som bindas in i dina behållare. Din applikation får åtkomst till hemlighetens värde genom att läsa filens innehåll. Den här modellen låter värden vara inerta tills de uttryckligen används i din container, till skillnad från permanent synliga miljövariabler.

Definiera hemligheter i komponera filer

Att få en hemlighet i en behållare är en tvåstegsprocess. Först måste du definiera hemligheten med hjälp av toppnivåns hemligheter i din Compose-fil. Sedan uppdaterar du dina tjänstdefinitioner för att referera till de hemligheter de behöver.

Annonsering

Här är ett exempel som använder hemligheter för att säkert tillhandahålla ett lösenord till en tjänst:

version: “3” -tjänster: app: image: exempel-app: senaste hemligheter: – db_password-hemligheter: db_password: fil: ./db_password.txt

Det hemliga värdet kommer att läsas från din arbetskatalog & # 8217 ; s db_password.txt-fil när du kör docker-compose upp. Compose monterar filen till/run/secrets/db_password i behållaren. Din app kan komma åt databaslösenordet genom att läsa innehållet i den hemliga filen.

Använda befintliga Docker-hemligheter

Utöver filbaserade hemligheter låter Compose dig också referera till befintliga Docker Swarm-hemligheter. Om du använder den här mekanismen måste du skapa hemligheterna i Docker innan du kör docker-compose upp. Kommandorutan för dockerhemligheterna fungerar bara när din aktiva Docker-slutpunkt är en Swarm Manager-nod.

Skapa hemligheten med Docker CLI:

# ta värde från standardingångsekot P @ 55w0rd | dockerhemlighet skapa db_password – & nbsp; ELLER & nbsp; # ta värde från en filhämtningshemlighet skapa db_password ./db_password.txt

Uppdatera nu din Docker Compose-fil för att referera till hemligheten:

version: “3” -tjänster: app: image: exempel-app: senaste hemligheter: – db_password-hemligheter: db_password: extern: sant

Ställa in hemligheten & # 8217 ; s externa fältinstruktioner Komponera för att källa dess värde från dina befintliga Docker-hemligheter. Stapeln misslyckas med ett fel om du försöker starta den innan hemligheten finns.

Utökad hemlig syntax

Compose stöder en längre hemlighetssyntax om du behöver mer detaljerad kontroll över injektionsprocessen. Genom att byta till denna syntax kan du anpassa filbehörigheter och ändra det hemliga monterade namnet.

Fem valfria fält är tillgängliga:

Annons

Här är ett modifierat exempel som byter namn på den monterade hemliga filen och ändrar dess behörigheter:

version: “3” -tjänster: app: image: exempel-app: senaste hemligheter: – källa: db_password target: database_password_secret mode: 0440 secrets: db_password: extern: true

Den enkla syntaxen är vanligtvis tillräcklig för de flesta distributioner. Om du har mer specifika krav bör den utökade versionen ge dig den kontroll du behöver. Enskilda hemliga referenser kan blanda och matcha de två syntaxerna inom samma Compose-fil.

Hemligheter och bildförfattare

Många populära community-Docker-bilder stöder nu hemligheter istället för miljövariabler. Som bildförfattare är att erbjuda hemligheter en metod för bästa praxis för att skydda dina användare & # 8217; data.

Du kan stödja båda mekanismerna genom att låta miljövariabler ställas in på en filsökväg. Om din bild behöver en databasanslutning, låt användarna ställa in miljövariabeln DB_PASSWORD till antingen P @ 55w0rd eller/run/secrets/db_password. Din behållare ska kontrollera om variabelns värde refererar till en giltig fil; om det gör det, kasta det och läs det slutliga värdet ur filen.

Denna modell ger användarna flexibilitet att välja den lämpligaste mekanismen för deras distribution. Kom ihåg att inte alla användare kommer att kunna ta hem hemligheter & # 8211; om Swarm och Compose båda är otillgängliga har de inget sätt att leverera sina värden.

Slutsats

Att använda hemligheter istället för vanliga miljövariabler minskar riskerna för oavsiktlig information. Föreställ dig ett värsta fall där en container skickade sina miljövariabler till en komprometterad loggningstjänst från tredje part. Attackers har nu ditt databaslösenord och API-nycklar.

Annonsering

Genom att begränsa hemlig data till filsystemåtkomst kan värden inte läsas av misstag eftersom de inte är en evig funktion i din miljö. Kom dock ihåg att hemliga filer bär sina egna risker. Du kan bli frestad att förbinda dem till källkontroll, vilket skulle innebära att alla som har tillgång till ditt förvar kan läsa deras värden.

Hemligheter ska vara & # 8220; hemliga & # 8221; under hela containerns livscykel. För produktionsdistributioner är det vanligtvis bäst att automatisera byggnader med ett CI-system. Ange dina hemligheter i din CI-leverantörs pipeline-inställningar och använd sedan ditt build-skript för att skriva ut dem till filer som Compose kan komma åt. Detta säkerställer att du bara har tillgång till de faktiska värdena via ditt CI-verktygs gränssnitt.

Exit mobile version