Por fim, você é tão apaixonado pelo Docker que deseja mover seus sistemas de produção críticos para os negócios on-line com dados confidenciais do cliente para um Docker Swarm. Alguns podem até já o ter feito. A outra organização não pode pagar por uma política que proíbe os processos de produção em execução no modo raiz.
O que poderia ser uma lista de verificação de componentes a serem considerados em um ambiente de produção do Docker? Não é necessário todos eles, mas todos devem ser importantes para serem avaliados.
Isenção de responsabilidade: Eu sei que existe uma política de SE para evitar "grandes listas sem fim", mas acho que essa lista de verificação não pode ser muito grande ... e sem fim hoje em dia.
Então - o que são esses blocos de edifícios?
- Se ainda não estiver implantado, considere executar um sistema host Linux com configurações de segurança avançadas - kernel reforçado, SELinux etc.
- Considere usar uma pequena imagem base do Docker, como alpine, busybox ou até scratch, por exemplo, comece com uma imagem base vazia
- Use a configuração USER diferente da raiz
- Avalie com cuidado para reduzir ainda mais o conjunto já reduzido de recursos do kernel concedido ao contêiner
- Considere ter apenas um binário executável por contêiner para iniciar seu processo, idealmente vinculado estaticamente
- Aqueles que desejam interromper o sistema para obter acesso ao shell podem se perguntar se descobriram que o contêiner está com todos os shells desativados.
- Monte volumes somente leitura sempre que possível
Pergunta: o que mais?
devsecops
significa?Consider using a tiny Docker base image, like alpine, busybox or even scratch e.g. start with an empty base image
aumenta a segurança?Respostas:
O host no qual os contêineres estão em execução
Execute o banco de segurança do docker em todos os nós que executam contêineres do docker https://github.com/docker/docker-bench-security
Executando o seguinte comando em um nó que executa contêineres de docker:
retorna uma lista de verificações:
Citação do README do repositório:
Alguns dos problemas relatados pelo banco de segurança podem ser resolvidos lendo o artigo oficial de segurança do docker e comparando-o com os marcadores definidos na pergunta, as seguintes coisas também são importantes:
DOCKER_CONTENT_TRUST
variávelfonte
O Docker ainda está em desenvolvimento.
Como acontece com todos os outros bugs de desenvolvimento de software, recursos inseguros podem ser adicionados, podendo haver falhas de arquitetura que levam a violações de segurança. Não subestime isso! Seu sistema pode estar completamente seguro hoje, mas com o patch da próxima semana alguém encontra um bug, escreve uma exploração e, de repente, seu sistema está totalmente aberto.
A menos que você precise, não atualize para a versão mais recente. Use a versão mais recente e bem testada.
Docker não é virtualização
Se alguém escapar de um contêiner do Docker, esse invasor estará na máquina real imediatamente. Não há segundo portão como a virtualização que impedirá uma violação.
Trate um contêiner do Docker como qualquer outro programa. Execute com os direitos de usuário mais baixos possíveis, bloqueie todo o tráfego de rede desnecessário, virtualize todo o host do Docker, se o desempenho permitir.
O Docker não oferece proteção
Qualquer que seja o código executado dentro dos contêineres do Docker, é executado sem dúvida pelo Docker. Qualquer invasor pode simplesmente instalar seu software dentro do contêiner, e o Docker executaria isso como qualquer outro código.
Além do que você mencionou na pergunta, considere usar métricas e alertas para ser notificado se alguma imagem do Docker estiver fazendo coisas estranhas. Existe um pico repentino de CPU em andamento? O programa está fazendo uma varredura repentina nas portas de rede? Existe acesso suspeito ao disco? Você deve receber uma notificação se isso acontecer. Existem muitas ferramentas disponíveis para medir essas coisas, você deve usá-las.
fonte
Imagens do Docker em si
Uma opção adicional é usar Clair .
fonte
Além dos pontos neste tópico; a seguinte seria minha recomendação:
fonte
Se você estiver preenchendo o ponto de entrada do Docker com
sed
comandos, considere esta prática:O Confd lerá dados de muitos armazenamentos de valores-chave suportados e renderizará modelos de configuração dinamicamente.
fonte
Pode-se usar o A2D para criar um aplicativo em uma imagem do docker, levando em consideração certas coisas, por exemplo, permissões não raiz, localização do aplicativo:
retorna:
fonte