Como usar os segredos do docker sem um cluster de enxame?

29

Atualmente, como somos um aplicativo em execução em um único contêiner de docker, o aplicativo precisa que todos os tipos de dados confidenciais sejam transmitidos como variáveis ​​de ambiente,

Estou colocando aqueles no comando run para que eles não acabem na imagem e, em seguida, em um repositório, no entanto, acabo com um comando de execução muito não seguro,

Agora, entendo que existem segredos do estivador, como posso usá-los sem implantar um cluster? ou existe alguma outra maneira de proteger esses dados?

Cumprimentos,

Juan Sebastian
fonte
6
Existem várias maneiras de usar segredos sem enxame blog.mikesir87.io/2017/05/…
Aleksandr Aksarin

Respostas:

6

Você não pode ... Ele não suporta segredos sem o Swarm. A menos que '' possa ser '' você '' Enxame '' usando apenas um nó.

A outra solução seria, acho que usar um software de cofre de terceiros como este:

https://www.vaultproject.io/

Mas então, para usar os segredos nos seus contêineres do Vault, você precisará ler o documento.

Espero que isso o leve ao caminho certo para começar.

produção
fonte
Na verdade, eu só preciso injetar esses segredos ao criar os contêineres, eles realmente não precisam permanecer "secretos" dentro dos contêineres em execução; portanto, acho que faria sentido para o host acessar e usar os segredos ao invocar o comando docker run, acho que posso escrever um script com várias substituições e chamadas para o vault.
Juan Sebastian
@JuanSebastian, você deve verificar o 'build-args' do Docker para esse caso de uso.
user23390
@JuanSebastian Eu posso estar errado, mas recebendo o ENV local, iria dar-lhe o que está dentro thoses build-args .... Não tenho certeza .....
deu
build-argsnão estão incluídos na imagem final, mas só podem ser acessados ​​durante o tempo de criação da imagem. Uma solução adequada é gravar os segredos nos arquivos no host (com permissões apropriadas, é claro) e montá-los em volume no contêiner do docker. Seu aplicativo dentro do contêiner pode ler os segredos desses arquivos
Brandon
22

Sim , você pode usar segredos se usar um arquivo de composição . (Você não precisa executar um enxame).

Você usa um arquivo de composição com docker-compose : existe documentação para "segredos" em um arquivo docker-compose.yml .

Eu mudei para o docker-compondo porque queria usar segredos. Estou feliz que sim, parece muito mais limpo. Cada serviço é mapeado para um contêiner. E se você quiser mudar para um enxame, basicamente já está lá.

Nota: Segredos não são carregados no ambiente do contêiner, eles são montados em / run / secrets /

Aqui está um exemplo:

1) Estrutura do Projeto:

|
|---    docker-compose.yml
|---    super_duper_secret.txt

2) conteúdo do docker-compose.yml:

version: "3.6"

services:

  my_service:
    image: centos:7
    entrypoint: "cat /run/secrets/my_secret"
    secrets:
      - my_secret

secrets:
  my_secret:
    file: ./super_duper_secret.txt

3) conteúdo super_duper_secret.txt:

Whatever you want to write for a secret really.

4) Execute este comando a partir da raiz do projeto para verificar se o contêiner tem acesso ao seu segredo (o Docker deve estar em execução e o docker-compose instalado):

docker-compose up --build my_service

Você deve ver seu contêiner exibindo seu segredo.

Lindsay-precisa dormir
fonte
Você pode mostrar um exemplo prático de docker-composeusar um segredo? A documentação e meu entendimento da implementação indicam que o segredo não será configurado no contêiner.
BMitch 31/01
2
Os segredos do Docker estão disponíveis apenas para serviços de enxame, não para contêineres independentes. Para usar esse recurso, considere adaptar seu contêiner para executar como um serviço. Contêineres com estado normalmente podem ser executados com uma escala de 1 sem alterar o código do contêiner. docker
Alwin Kesler
@BMitch Adicionado um exemplo. Espero que ajude você! (Já faz algum tempo desde que eu trabalhei com o docker e meu ambiente está um pouco mais acontecendo ... mas acho que isso deve funcionar. Informe-me se eu perdi alguma coisa!)
Lindsay-Needs-Sleep
Não consigo replicar isso nos meus serviços sem um enxame ( docker-compose.ymlem um único nó); Quando inicio, o contêiner /runcontém apenas um nginx.pide não é Mountsmostrado por docker inspect $container.
giorgiosironi 17/04
2
Apenas pensei em vincular ao PR que adicionou isso ao docker-compor simples (sem enxame). github.com/docker/compose/pull/4368 Ele realmente está lá e, a partir do código, parece que a versão mínima para o arquivo de composição é 3.1 e a API é 1.13.0. O código ainda está no master atual ( github.com/dnephin/compose/blob/… ), portanto, não esperaria uma versão máxima.
ssnobody 23/10