Eu teria pensado que isso já foi perguntado antes, mas fiz muitas pesquisas no Google e não consigo encontrar uma resposta simples, desculpe se isso já foi respondido.
Essencialmente, estou planejando oferecer um serviço que permite aos usuários executar contêineres docker em meus hosts docker. O usuário pode escolher um dos meus contêineres fornecidos ou fornecer o seu próprio (não auditado). Eles também podem executar comandos bash de sua escolha em seu contêiner. Eu preciso que eles sejam restritos a apenas executar o código em seu contêiner e não possam acessar o host ou qualquer outro contêiner em execução simultânea. Os contêineres devem ter acesso total à Internet e o host precisará ter um diretório compartilhado com o contêiner. Inicialmente, fornecerei alguns arquivos de dados para o contêiner docker e, assim que o contêiner fizer o que o usuário desejar, precisarei acessar os arquivos de dados novamente nesse ponto.
Do que preciso ter cuidado do ponto de vista da segurança? Obrigado pela ajuda.
A CLI padrão para executar um contêiner no Docker deve ser protegida do contexto de um comando de contêiner impedido de fazer qualquer coisa fora do contêiner no host.
O que você precisa tomar cuidado são as opções passadas para esse comando. Se um usuário tiver acesso à própria CLI do docker, ele poderá controlar o host (por exemplo
docker run -v /:/target debian /bin/bash
, fornecerá um shell root com acesso ao sistema de arquivos do host em /target, onde poderá modificar /etc/passwd ou qualquer outro arquivo na máquina) .A única coisa que os contêineres não impedem por padrão é um ataque DoS em que o contêiner pode bombardear seu servidor. Para isso, você deve examinar os limites de memória e CPU que podem ser adicionados como parte de seu comando de execução.