Tutti trattiamo informazioni sensibili quando lavoriamo con i sistemi informatici. Gli amministratori di sistema spostano le chiavi SSH e gli sviluppatori web devono preoccuparsi dei token API. Il problema con le informazioni sensibili è che sono sensibili , il che significa che potrebbe causare un disastro per la sicurezza se cadesse in qualche modo nelle mani sbagliate. I contenitori non fanno eccezione a questo problema:gli utenti devono utilizzare le informazioni riservate all'interno dei contenitori e allo stesso tempo devono mantenere le informazioni riservate al sicuro.
[ Potresti anche divertirti a leggere: Contenitori rootless utilizzando Podman ]
Perché i segreti?
Cosa succede se qualcuno deve eseguire un database in un container e le credenziali per il database devono essere inserite in un container? Questo può essere fatto in diversi modi. Puoi semplicemente creare un file durante l'esecuzione del contenitore e archiviare le credenziali lì. Tuttavia, questo è pericoloso. Se il contenitore viene esportato nell'immagine, verranno esportate anche le credenziali. Chiunque abbia il controllo sull'immagine potrà accedere al database. Un'altra opzione è quella di trasmettere le credenziali utilizzando la CLI, ma ciò richiede l'inserimento dei dati ogni volta, il che può essere noioso.
E se esistesse un metodo per la gestione centralizzata delle informazioni sensibili?
Il nuovo comando, podman secret
, è un insieme di sottocomandi e opzioni che gestisce le informazioni sensibili in modo facile e sicuro. Consente agli utenti di utilizzare facilmente il contenuto sensibile all'interno di un contenitore, ma impedisce che finisca da qualche parte al di fuori del contenitore, ad esempio in un registro di immagini. Abbiamo implementato tutta una serie di sottocomandi per podman secret
:create
, rm
, ls
e inspect
, per creare e manipolare segreti, nonché un --secret
flag per l'inserimento di un segreto in un contenitore.
Come si usa?
Quando podman secret create
viene eseguito, Podman si aspetta un file con i dati da archiviare.
$ echo "secretdata" > secretfile
$ podman secret create secretname secretfile
e17465c9772b38f336fc4cbac
Il podman secret inspect
comando non visualizzerà i dati memorizzati ma solo i metadati sul segreto.
$ podman secret inspect secretname
[
{
"ID": "e17465c9772b38f336fc4cbac",
"CreatedAt": "2021-02-12T09:05:49.661504248-05:00",
"UpdatedAt": "2021-02-12T09:05:49.661504248-05:00",
"Spec": {
"Name": "secretname",
"Driver": {
"Name": "file",
"Options": null
}
}
}
]
Ovviamente puoi anche elencare i tuoi segreti e rimuoverli.
$ podman secret ls
ID NAME DRIVER CREATED UPDATED
e17465c9772b38f336fc4cbac secretname file 1 second ago 1 second ago
$ podman secret rm secretname
e17465c9772b38f336fc4cbac
Per utilizzare il segreto e accedere ai dati segreti, è possibile creare o eseguire un contenitore con un --secret
bandiera. All'interno del contenitore, è possibile accedere ai dati segreti all'interno di un file in /run/secrets/secretname
. Puoi usare il --secret
contrassegna più volte per aggiungere numerosi segreti al contenitore.
$ podman run --secret secretname --name foo alpine cat /run/secrets/secretname
secretdata
I segreti non verranno salvati in un'immagine o esportati con un podman commit
o un podman export
comando. Ciò impedisce che le informazioni sensibili vengano accidentalmente inviate a un registro pubblico o fornite alla persona sbagliata.
$ podman commit foo secrimg
Getting image source signatures
Copying blob 1119ff37d4a9 skipped: already exists
Copying blob 3dd965b4468a done
Copying config 263fcafb79 done
Writing manifest to image destination
Storing signatures
263fcafb790dfdf6a7312953d3600ff9d990a664ec341ded7d0a6dfa1e71bb5d
$ podman run secrimg cat /run/secrets/mysecret
cat: can't open '/run/secrets/mysecret': No such file or directory
Come funziona?
Quando un utente usa il --secret
flag, Podman recupera i dati segreti e li memorizza su un tmpfs
. Quindi monta il file nel contenitore in /run/secrets/secretname
. Da lì, il segreto può essere utilizzato all'interno del contenitore come di consueto, che si tratti di chiavi di database o certificati TLS.
I segreti esistono solo sulla macchina del creatore segreto o all'interno di un contenitore quando è pronto per essere eseguito. I segreti sono progettati specificamente per non esiste nelle immagini:un podman commit
non inserirà il segreto nell'immagine, né un podman export
. Se qualcuno dovesse creare un'immagine da un contenitore con un segreto, quindi eseguire un contenitore da detta immagine, il file in /run/secret/mysecret
non esisterebbe. Ciò impedisce che i dati segreti vengano inviati accidentalmente a un registro, impedendo così che informazioni sensibili e compromettenti esistano ovunque non dovrebbero essere.
Lavori futuri
Per ora, questa soluzione fa il lavoro di gestione dei segreti. Tuttavia, l'unico driver implementato al momento per archiviare le informazioni sensibili è un file driver, il che significa che i dati verranno archiviati su disco in file non crittografati controllati dall'host del contenitore. Stiamo pianificando ulteriori miglioramenti, come l'implementazione della crittografia o l'utilizzo di altri driver. Vorremmo anche supportare le variabili di ambiente segrete, che sono variabili di ambiente che vengono impostate all'interno del contenitore ma non vengono registrate nell'immagine. Il coinvolgimento della comunità in queste attività sarà accettato con gratitudine.
[ Iniziare con i container? Dai un'occhiata a questo corso gratuito. Distribuzione di applicazioni containerizzate:una panoramica tecnica. ]
Fantastico. Lo voglio.
I segreti di Podman sono disponibili in Podman 3.1.0. Se vuoi fare un tentativo, puoi ottenere Podman seguendo queste istruzioni di installazione. Se hai già Podman, puoi ottenere la funzione dei segreti aggiornando a Podman 3.1.0. Sentiti libero di contattare il team Podman anche per qualsiasi domanda o feedback. Gli sviluppatori Podman frequentano spesso il canale freenode #podman. Puoi inviarci un'e-mail utilizzando la mailing list di Podman. Abbiamo anche incontri mensili della comunità. Sentiti libero di entrare e dire ciao anche lì.