Como proibir o acesso a componentes internos do contêiner Docker?

14

Desejo entregar meu aplicativo aos clientes em forma de imagem do Docker. Mas é crucial garantir que o usuário final não altere nada dentro do contêiner. O usuário só deve poder executar / parar o contêiner e interagir com o contêiner via rede.

É possível proibir o acesso a partes internas do contêiner? É possível verificar a integridade da imagem que o contêiner fez?

Victor Mezrin
fonte
2
A menos que você gerencie o host do docker, acredito que não possa. Que problema você está disposto a resolver impedindo esse acesso?
Tensibai
Como Tensibai menciona, isso depende. Se você precisa saber que o contêiner não é modificado por motivos de segurança, basicamente é necessário executá-lo em seus próprios servidores. Se você quiser apenas desencorajar as pessoas a modificá-las para que não quebrem as coisas, provavelmente há maneiras de fazer isso. A descrição do seu caso de uso ajudará aqui.
Aurora0001

Respostas:

11

Em resumo, você não pode impedir que seus clientes modifiquem contêineres executados em sua própria infraestrutura. Os contêineres não são como binários que podem ser ofuscados; eles são ambientes de tempo de execução. O código que você distribui dentro do contêiner, no entanto, pode ser ofuscado.

Sua pergunta alude a um problema de suporte de terceiros: clientes que modificam o software que executam em seus próprios ambientes. Se você fornecer ferramentas para operar os contêineres fornecidos (por exemplo, monitoramento e registro), os clientes deverão concordar (como parte de uma licença de software) em não fazer modificações não autorizadas. Isso se aplica a todos os tipos de software de terceiros, não apenas a contêineres.

Dependendo da sua situação, você também pode ter a opção de fornecer seu aplicativo como Software como Serviço (SaaS) em execução em uma infraestrutura de nuvem.

Se o seu cliente exige que seus contêineres sejam executados em sua infraestrutura e se recusa a respeitar as restrições de modificação, provavelmente você não deseja tentar oferecer suporte ao uso do software.

Dave Swersky
fonte
6

O Docker não fornece meios para impedir o acesso do usuário ao contêiner, no entanto, como desenvolvedor de imagens, você pode seguir algumas estratégias

  • Ofusque seu software (ruby, python e etc)
  • Crie sua imagem a partir de uma imagem base que não tenha shell e outros binários que o usuário possa usar para controlar a imagem.

Obviamente, eles sempre podem exportar o pacote e reembalá-lo, mas essas são medidas extremas ...

Jeeva
fonte
Por que Ruby e Python são dados como exemplos para ofuscar código? Os códigos nesses idiomas geralmente são mantidos como arquivos de origem em texto não criptografado no sistema operacional em execução. Não seria preferível usar uma linguagem compilada como C ++, C #, Java ou uma linguagem que possa ser "minificada" como JS?
AjaxLeung
5

Você pode remover os usuários do grupo de janelas de encaixe e criar sudos para docker starte docker stop.

user2590
fonte
3
só é possível / eficaz se você possui esses servidores ...
Dan Cornilescu
5

Se o seu cliente estiver pronto para investir dinheiro, você deve optar pelo Docker enterprise edition. No Docker EE, você tem uma ferramenta que é UCP(Universal Control Plane) UCP . Pelo UCP, você pode criar funções e direitos de acesso e restringir o usuário a alterar / modificar contêineres.

Se você deseja testar o UCP do que o DDC (Docker Data Center), com uma licença de teste de um mês, o ajudará a elaborar as coisas conforme seus requisitos.

Espero que isso ajude!

Obrigado!

Chintan Thakar
fonte
1
Como a solução sobre grupos docker, isso funciona se você gerenciar o sistema host janela de encaixe somente, sons OP mais como distribuir uma imagem ...
Tensibai
2

Entregue sua entrega via scripts ansible. Mantenha todos os tipos de restrições e verificações no script ansible.

lakshayk
fonte
2
Como isso impediria o acesso ao contêiner? Tente explicar como sua proposição realmente resolveria o problema do OP.
Michael Le Barbier Grünewald