Não mostra todos os containers do docker para um usuário em particular

1

Eu quero usar um servidor para hospedar vários contêineres docker. Eu quero dar a outro usuário a possibilidade de gerenciar novos contêineres docker, mas eu não quero dar a ele acesso a todos os outros contêineres, que eu iniciei, pois eles podem conter dados confidenciais.

Existe uma maneira de criar uma configuração segura que não exija a criação de máquinas virtuais?

    
por noisy 10.09.2018 / 15:37

4 respostas

1

Pergunta original: Como permitir que o usuário gire novos contêineres por conta própria e não acesse os outros contêineres?

( Esta foi a minha resposta original, mas talvez eu tenha entendido mal a questão ou a pergunta não foi tão clara, eu mantive a solução original aqui mesmo assim )

O Docker não oferece esse recurso por conta própria, mas há várias maneiras de fazer isso.

A ideia é que os comandos do docker exijam que o usuário esteja no grupo sudo ou docker para executar, portanto, se você deseja que o usuário gire um novo contêiner, em vez de adicionar o usuário ao sudo ou ao grupo docker que fornece acesso total para todos os comandos do docker, você pode colocar na lista de permissões apenas vários comandos do docker para esse usuário.

Por exemplo, se você quiser permitir ao usuário tom executar o seguinte contêiner:

sudo docker container run --it --name ubuntu-tom ubuntu:latest bash

Você pode adicionar a seguinte linha ao seu arquivo sudoers executando sudo visudo :

tom ALL=NOPASSWD: /usr/bin/docker container run --it --name ubuntu-tom ubuntu:latest bash

Isso permite que o usuário execute este comando do docker como root sem precisar de uma senha. Quaisquer outros comandos do docker permanecem indisponíveis para o usuário tom.

Outra alternativa é configurar o shell restrito, mas não entrarei em detalhes aqui.

Pergunta atualizada: como limitar o usuário a gerenciar novos contêineres?

Não tenho conhecimento de uma possível solução usando apenas o Docker.

Parece que você precisa de um orquestrador como o Kubernetes ou o ECS.

Desta forma, o orquestrador possui o daemon do docker e você pode utilizar a camada de permissão fornecida pelo orquestrador. Este artigo fornece um ótimo exemplo de restringir o acesso do usuário a um espaço para nome.

    
por 13.09.2018 / 09:17
1

Deve ser bastante simples executar dockerd por usuário e utilizar permissões de arquivo para separar o acesso do usuário.

Acabei de encontrar um tutorial usando os modelos systemd para obter esta configuração: link

    
por 14.09.2018 / 16:32
0

Por que você não implementa o portainer? Tem muitos recursos como, controle de usuário, menu gui e muito mais, você não precisa criar usuário no servidor também

portainer

    
por 14.09.2018 / 12:15
0

A API do docker não tem esse recurso internamente, trate o acesso direto a isso como um recurso de nível de sysadmin porque ele fornece aos usuários acesso root ao servidor. Portanto, para implementar isso, você precisará fornecer seu próprio acesso indireto à API ou usar outra ferramenta que forneça essa funcionalidade ao topo da janela de encaixe.

  1. Você pode fornecer um script que seja acessado pelo sudo e que execute todas as verificações de segurança nos comandos antes de executá-los. A maneira mais fácil de implementar isso seria adicionar um rótulo em cada objeto criado (contêiner, volume, rede, etc) e, em seguida, retornar apenas os objetos correspondentes a esse filtro em quaisquer consultas e comandos de limitação executados apenas para objetos com esses rótulos. Não é trivial para escrever, então eu só vi pessoas irem com opções posteriores. No entanto, se os comandos e contêineres que estão sendo executados forem muito limitados, isso pode ser uma solução boa o suficiente para você.

  2. O namespace do Kubernetes fornece essa funcionalidade e é executado na parte superior da janela de encaixe. Isso é muito para implementar, então a maioria das pessoas só vai nessa direção se precisar de muito mais da funcionalidade que o Kubernetes fornece.

  3. Existem várias ferramentas de terceiros, algumas comerciais, que lidam com o acesso do usuário. O Portainer e o Rancher são dois populares, mas não tenho experiência pessoal com eles.

  4. O Docker fornece uma oferta corporativa com esse UCP chamado incluído. É possível conceder aos usuários acesso docker api / cli, que passa pelo UCP para verificação do RBAC, antes que a solicitação seja enviada ao mecanismo do docker subjacente.

por 14.09.2018 / 16:24