2015-06-10 24 views
5

Sto usando l'immagine mysql come esempio, ma la domanda è generica.Nascondere/offuscare i parametri ambientali nella finestra mobile

La password utilizzata per avviare mysqld in finestra mobile non è visibile nella finestra mobile ps però è visibile nella finestra mobile ispezionare:

sudo docker run --name mysql-5.7.7 -e MYSQL_ROOT_PASSWORD=12345 -d mysql:5.7.7 

CONTAINER ID  IMAGE    COMMAND     CREATED    STATUS    PORTS    NAMES 
b98afde2fab7  mysql:5.7.7   "/entrypoint.sh mysq 6 seconds ago  Up 5 seconds  3306/tcp   mysql-5.7.7 

sudo docker inspect b98afde2fab75ca433c46ba504759c4826fa7ffcbe09c44307c0538007499e2a 

"Env": [ 
     "MYSQL_ROOT_PASSWORD=12345", 
     "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin", 
     "MYSQL_MAJOR=5.7", 
     "MYSQL_VERSION=5.7.7-rc" 
    ] 

C'è un modo per nascondere/offuscare parametri ambientali passati al momento del lancio contenitori. In alternativa, è possibile passare parametri sensibili facendo riferimento a un file?

+2

duplicato di http://security.stackexchange.com/questions/70827/passing-secret-keys-securely-to-docker-containers? – user2915097

+0

@ user2915097 - Alcune buone informazioni nel collegamento security.EX ma non forniscono una soluzione per il passaggio delle variabili di ambiente come file nella finestra mobile? Si conclude piuttosto che se si ottiene l'accesso alla finestra mobile, tutte le scommesse sono disattivate. Sto cercando alcuni modi pratici per passare env. variabili al contenitore senza esporle come testo normale a 'info' o' inspect' –

+0

puoi passare una password criptata e decodificarla nel contenitore prima di usarla, aggiunge un livello – user2915097

risposta

2

Si dice "In alternativa, è possibile passare parametri sensibili in riferimento a un file?", Estrarre dal documento http://docs.docker.com/reference/commandline/run/--env-file=[] Read in a file of environment variables.

+0

Assicurati che sia ancora visibile nella finestra mobile ispeziona e in qualsiasi contenitore collegato. –

7

Stranamente, sto solo scrivendo un articolo su questo.

Si sconsiglia di utilizzare le variabili di ambiente per memorizzare i segreti, principalmente per i motivi Diogo Monica outlines here; sono visibili in troppi luoghi (contenitori collegati, controllo finestra mobile, processi figlio) e rischiano di finire nelle informazioni di debug e nei report dei problemi. Non penso che l'uso di un file di variabili d'ambiente possa aiutare a mitigare nessuno di questi problemi, anche se ciò impedirebbe di salvare i valori nella cronologia della shell.

Invece, è possibile passare in segreto in un esempio di volume:

$ docker run -v $(pwd)/my-secret-file:/secret-file .... 

Se davvero si vuole utilizzare una variabile di ambiente, si potrebbe passare come uno script per essere di provenienza, che avrebbe almeno nascondilo dai contenitori ispezionati e collegati (es. CMD source /secret-file && /run-my-app).

Lo svantaggio principale dell'utilizzo di un volume è che si corre il rischio di controllare accidentalmente il file nel controllo di versione.

Una soluzione migliore, ma più complicata è scaricarla da un archivio di valori-chiave come ad esempio eccd (con crypt), keywhiz o vault.

+0

Neat, si prega di inviare un collegamento all'articolo una volta che è pronto. Speriamo che ci sarà un riferimento ad un esempio di Dockerfile. A proposito, il file env potrebbe essere cancellato dopo il lancio. –

+0

Se si sta facendo riferimento al passaggio di un file con --env-file, i vars saranno comunque visibili alla finestra mobile inspect e ai contenitori collegati anche se si elimina il file. L'articolo è davvero una sezione del mio libro, ma potrei scrivere anche un blog separato. –

+1

Una variazione su un volume di file è un archivio centrale di gestione della configurazione come Etcd o Console. Vedi anche il progetto Vault progettato per salvare i segreti in modo sicuro. Viene dalle stesse persone che hanno costruito console e possono essere implementati con esso. Questo è un problema difficile da risolvere correttamente: https: // vaultproject.io/ –

Problemi correlati