Possiedo un pod che esegue contenitori che richiedono l'accesso a informazioni sensibili come le chiavi API e le password DB. In questo momento, questi valori sensibili sono incorporati nelle definizioni regolatore in questo modo:Popolazione di contenitori Docker con informazioni sensibili tramite kubernetes
env:
- name: DB_PASSWORD
value: password
che sono quindi disponibili all'interno del contenitore Docker come variabile $DB_PASSWORD
ambiente. Tutto abbastanza facile.
Tuttavia, leggendo la loro documentazione su Secrets, affermano esplicitamente che l'inserimento di valori di configurazione sensibili nella definizione viola le best practice ed è potenzialmente un problema di sicurezza. L'unica altra strategia mi viene in mente è la seguente:
- creare una chiave OpenPGP per comunità di utenti o namespace
- uso crypt per impostare il valore di configurazione in etcd (che è codificato utilizzando la chiave privata)
- creare un segreto kubernetes contenente la chiave privata, like so
- associato quel segreto con il contenitore (il che significa che la chiave privata sarà accessibile come montare un volume), like so
- quando l'ho container avviato, accederà al file all'interno del volume mount per la chiave privata e lo userà per decrittografare i valori conf restituiti da etcd
- questo può quindi essere incorporato in confd, che popola i file locali secondo una definizione di modello (tale come file di configurazione Apache o WordPress)
Questo sembra abbastanza complicato, ma più sicuro e flessibile, poiché i valori non saranno più statici e memorizzati in testo in chiaro.
Quindi la mia domanda, e so che non è del tutto obiettiva, è se questo sia completamente necessario o no? Solo gli amministratori saranno in grado di visualizzare ed eseguire le definizioni RC in primo luogo; quindi se qualcuno ha violato il master di Kubernetes, hai altri problemi di cui preoccuparti. L'unico vantaggio che vedo è che non c'è pericolo che i segreti vengano trasferiti al filesystem in testo in chiaro ...
Esistono altri modi per popolare i contenitori Docker con informazioni segrete in modo sicuro?
@larsks Ma il file di definizione per il segreto non dovrebbe essere archiviato in chiaro? O in base64, che potrebbe essere facilmente decodificato. – hohner
Sì, e ho interpretato erroneamente il fatto che stavi già sfruttando questa API. Quindi, non importa ... – larsks
Come ho capito, Secrets è il modo per passare informazioni sensibili, ma ha i suoi limiti. Eppure è meglio che passare informazioni sensibili direttamente nelle variabili ENV. – MrE