Oi pessoal!
Para o artigo de hoje, contamos com a ajuda de um grande amigo nosso, o Wellington F. Silva, que colocou em seu blog um texto muito bacana sobre o que é e como funcionam as secrets no Docker 1.13. No decorrer desse post entenderemos como essa nova funcionalidade trabalha, sua origem e claro, o impacto disso em nosso dia-a-dia, #vamoslá?
O que é o secret?
Quando estamos trabalhando em um projeto e precisamos passar informações sensíveis para o ambiente, tais como senhas, chaves privadas, tokens, chaves de APIs e afins sempre passamos pelo problema de não podermos deixar no controle de versão e devemos sempre utilizar uma maneira segura de trafegar esses segredos.
Muitas vezes acabamos trabalhando com variáveis de ambiente para guardar essas informações, o que não é recomendado por alguns motivos.
Diogo Monica que é um dos engenheiros de software da Docker mencionou em um comentário que variáveis de ambiente quebram o princípio de “least surprise” e podem levar a eventuais vazamentos de segredos já que estão acessíveis de várias maneiras, tais como linked containers, através do *docker inspect*, de processos filhos e até de arquivos de logs já que em caso de exceptions da aplicação muitos frameworks fazem o dump do contexto, inclusive o valor das variáveis de ambiente no arquivo de log.
Um pouco da história
Em Janeiro de 2015 houve uma proposta de adicionar o comando `docker vault` numa alusão ao Vault Project da Hashicorp para fazer a gerencia de segredos dentro do próprio Docker. Segue o link para a issue 10310 no GitHub. A discussão evoluiu e virou a issue 13490, onde trataram do roadmap para o atual Docker Secrets.
Como funciona?
O Docker Secrets funciona como um cofre onde você pode colocar coisas sensíveis lá e só que tem a chave do cofre consegue utilizar, no caso essa chave é designada aos nós dos serviços que a chave for atribuída.
Dicas
- Só funciona no Swarm Mode onde toda a comunicação entre os nós é por padrão encriptada.
- Se utiliza do algoritmo de RAFT para persistir o segredo de forma encriptada por todos os nós managers e distribuir aos containers que fizerem parte do serviço ao qual a chave for atribuída.
Segue diagrama da própria Docker:
Criando um secret
Podemos criar um secret de duas maneiras, usando o STDIN:
$ echo "ConteudoDoSecret" | docker secret create um-secret -
Ou lendo um arquivo:
$ docker secret create novo-secret $HOME/senhas.txt
Listando, removendo e demais opções
Para listar as secrets disponíveis:
$ docker secrets ls ID NAME CREATED UPDATED 8ulrzh4i1kdlxeypgh8hx5imt um-secret 3 minutes ago 3 minutes ago n95fprwd2trpqnjooojmpsh6z novo-secret About an hour ago About an hour ago
Demais opções do que fazer com os secrets como remover, inspecionar, etc podem ser listadas com o help:
$ docker secret --help
Usando o secret criado
Podemos criar um serviço usando um secret criado com o comando:
$ docker service create --name demo --secret um-secret mysql:5.7
Podemos remover um secret de algum serviço existente
$ docker service update --secret-rm um-secret demo
Ou podemos adicionar um secret a algum service que esteja de pé:
$ docker service update --secret-add novo-secret demo
Quando atrelamos um secret a um service podemos então acessar qualquer um dos containers que estejam rodando nesse service no path /run/secrets. Dentro do container nesse path vai existir um arquivo plain text com o nome igual ao definido no nome do secret e com o conteúdo desejado, o secret em plain text. No nosso caso seria no path /run/secrets/novo-secret.
Bem legal não é? Ajude divulgando o blog, e fique ligado teremos muitas novidades em breve, então se não se inscreveu em nossa newsletter, inscreva-se ;). Até a próxima.
Fonte: http://dumpscerebrais.com/2017/02/como-trabalhar-com-secrets-no-docker-1-13-x/
0sem comentários ainda