Em vez de focar no termo de tecnologia, fornecerá uma resposta generalizada e usará o termo “contêineres”.
Os contêineres executam apenas o que deveria ser executado, assumindo que algo desconhecido não é confiável; portanto, o que só reside no contêiner apenas durante a vida útil do contêiner; portanto, a modificação de um código no banco de dados para testar será a mesma abordagem em VMs (sandboxing) ou contêineres (janela de encaixe) e a maior diferença é o consumo de recursos e o tempo necessário para provisionar VMs versus girar contêineres / pods em alguns segundos para o aplicativo.
Mais detalhes:
Part1_ Do ponto de vista do aplicativo
Os contêineres são muito importantes quando se trata do mundo da ciência de dados a partir dos seguintes pontos:
Aí entra Cloudera com o Cloudera Data Science Workbench e o Anaconda com o Anaconda Enterprise, ambos usam contêineres, portanto, podem trazer resultados rápidos para os negócios e implantar facilmente os modelos, do dev ao controle de qualidade e, finalmente, à produção.
Por que a última declaração é importante? é ter portabilidade de dev para prod sem alterações nos ambientes e sem custos para a parte operacional do DevOps.
Part2_ Do ponto de vista da segurança
Uma vantagem de segurança notória é que a segurança do sistema operacional host é separada do contêiner, o que significa que o sistema operacional com patches separado não afetaria seu aplicativo em contêiner (quantas vezes temos o problema ao corrigir o sistema operacional e afetar o aplicativo e serviço nesse SO (caminhos, portas, serviços etc.)?
- Por exemplo: se você tiver um
library
código malicioso em seu aplicativo / código, esse malware residirá apenas nesse contêiner enquanto o contêiner estiver ativo, os contêineres serão executados como ponto de extremidade o tempo todo e não viram um caso que espalhe o malware na rede.
- o monitoramento de um nó de contêiner é robusto e você pode colocar um complemento ou serviço para monitorar comportamentos de aplicativo ou nó e replicará apenas apenas um novo nó / contêiner e apenas com base no arquivo de configuração.
Comparando VMs x contêineres: com contêineres é uma história diferente, você cuida do SO separado dos contêineres (contêineres é uma tarefa separada quando a segurança está em vigor).
A segurança do Docker fornece informações detalhadas dos principais pontos de segurança.
Os padrões e conformidade do Docker fornecem uma lista completa de padrões e conformidade de segurança disponíveis para contêineres.
"O contêiner do Docker com um perfil seccomp bem criado (que bloqueia chamadas inesperadas do sistema) fornece segurança aproximadamente equivalente a um hipervisor".
Compartilhamento de pasta . Com os contêineres, você pode compartilhar uma pasta configurando uma montagem compartilhada e, como o Docker / kernel impõe permissões de arquivo usadas pelos contêineres, o sistema convidado não pode ignorar essas restrições. Isso é muito importante para aplicativos e usuários de ciência de dados, porque na empresa são usados na maioria das vezes dados confidenciais / restritos e várias camadas de segurança ou restrições, uma abordagem para resolver esse problema de segurança é usar VDI ou VMs que com o grupo AD para restringir / compartilhar o acesso a dados e se torna problemático e dispendioso para manter e alocar recursos.
Quando se trata de depurar aplicativos ou SO com todos os serviços e logs gerados, acho que os contêineres estão ganhando e evoluindo agora para a abordagem da PNL: Um utilitário experimental de processamento de linguagem natural (PNL) também está incluído, para revisar narrativas de segurança.
Aqui vou citar Jianing Guo do Google: Uma VM devidamente protegida e atualizada fornece isolamento no nível do processo que se aplica a aplicativos regulares e cargas de trabalho de contêiner, e os clientes podem usar os módulos de segurança Linux para restringir ainda mais a superfície de ataque de um contêiner. Por exemplo, o Kubernetes, um sistema de orquestração de contêineres de código aberto para produção, suporta a integração nativa com AppArmor, Seccomp e SELinux para impor restrições aos syscalls expostos a contêineres. O Kubernetes também fornece ferramentas adicionais para suportar ainda mais o isolamento de contêineres. O PodSecurityPolicy permite que os clientes imponham restrições sobre o que uma carga de trabalho pode fazer ou acessar no nível do Nó. Para cargas de trabalho particularmente sensíveis que exigem isolamento no nível da VM,
Acima de tudo, o cluster kubernetes possui os seguintes recursos de segurança adicionais:
- Use TLS (Transport Layer Security) para todo o tráfego da API
- Autenticação de API
- Autorização de API
- Correção fácil de falhas de segurança e impacto mínimo no aplicativo / ambiente em comparação com VMs ou Bare metal dedicado.
Part3_ CIS benchmarks para o endurecimento recipientes: Docker & Kubernetes
.
A primeira etapa para tornar os contêineres mais seguros é preparar a máquina host planejada para a execução de cargas de trabalho com contenção. Ao proteger o host de contêineres e seguir as práticas recomendadas de segurança da infraestrutura, criaria uma base sólida e segura para a execução de cargas de trabalho em contêiner.
Mantenha-se atualizado sobre as atualizações do Docker, vulnerabilidades no software.
Tenha um diretório dedicado específico para arquivos relacionados ao Docker e aloque espaço suficiente para ver os contêineres serem executados (o caminho padrão é /var/lib/docker
apenas mudar para outro ponto de montagem e monitorar no nível do sistema operacional usando auditd
ou aide services
para alterações ou tamanho / carga de trabalho indesejada, mantenha os logs e configure de acordo com as necessidades.
Nota: A melhor parte step 2
é que, com VMs, você precisa monitorar muito mais locais para seu projeto de ciência de dados (bibliotecas em locais diferentes, várias versões de pacotes, locais / caminho até para python, execute cron jobs or systemd
para garantir que algum processo seja executado, faça logon de todos os logs etc, mas com contêineres é um ponto único para que todos esses trabalhos sejam executados e monitorem apenas um caminho em vez de vários).
Verifique o tempo todo os usuários no docker
grupo para impedir unauthorized elevated access
o acesso ao sistema (o Docker permite o compartilhamento de diretório entre o host do Docker e um contêiner de convidado sem limitar os direitos de acesso do contêiner). Portanto, remova todos os usuários não confiáveis do docker
grupo e não crie um mapeamento de diretórios confidenciais limita o host a volumes de contêiner. Aqui eu diria para usar um usuário separado para a instalação e tarefas específicas de contêiner "NUNCA usar root
para contêineres executados dedique PID
apenas uma tarefa (terá acesso elevado, mas será baseado em tarefas, uso gravitacional para o cluster e ao instalar NUNCA use root).
Audite todas as atividades do daemon do Docker (lembre-se de ocupar espaço nos logs em "mundo" em contêiner; portanto, prepare uma partição separada com espaço decente para armazenar os logs e a configuração necessária (rotação e período para armazenar os logs).
Audite todos os arquivos do Docker e docker.service, etc, var e o que mais é aplicável.
Restrinja toda a comunicação entre contêineres, vincule contêineres específicos que exijam comunicação (o melhor será criar uma rede personalizada e unir os contêineres que precisam se comunicar com essa rede personalizada). Essa abordagem de proteção impedirá a divulgação não intencional e indesejada de informações para outros contêineres.
Todos os aplicativos na infraestrutura em contêiner devem ser configurados ou pelo menos ter essa opção Encryp All Sensitive Information
(isso é muito importante para o Data Scientist, porque na maioria das vezes fazemos login nas plataformas para obter dados, inclusive sensitive data
para a empresa.
Tem a opção de ter todas as informações confidenciais criptografadas em trânsito.
Utiliza apenas aprovações específicas específicas Ports, Protocols and Services
, as VMs têm uma superfície mais aberta quando um aplicativo / projeto é executado, com contêineres que você especifica apenas o que será usado e não se pergunta se todas as outras portas estão ouvindo, protocolos e serviços que são executados no nível do SO para proteger ou monitor, isso minimiza o "attack surface"
.
As informações confidenciais armazenadas nos sistemas são criptografadas em repouso e requerem um mecanismo secundário de autenticação, não integrado ao sistema operacional, para acessar as informações.
Permite ser ativado Operating System Anti-Exploitation Features/Deploy Anti-Exploit Technologies
: como Data Execution Prevention(DEP)
ou Address Space Layout Randomization (ASLR)
.
A melhor diferença de segurança simples entre VMs e Containers é: ao atualizar ou executar um projeto, você não precisa de acesso elevado para fazê-lo em toda a VM ou rede, basta executar como um usuário definido e, se houver acesso elevado, existe apenas para o horário do contêiner e não é compartilhado entre o host (aqui vêm as bibliotecas da Data Science instalam, atualizam, executam o código do projeto etc.).
Part4_ Mais recursos (além dos links incorporados na Parte 1-3) relacionados aos contêineres para Data Science:
- Ciência de dados na janela de encaixe
- Conda, Docker e Kubernetes: o futuro nativo da nuvem da ciência de dados (patrocinado pela Anaconda)
- https://devblogs.nvidia.com/making-data-science-teams-productive-kubernetes-rapids/
- Por que os cientistas de dados amam o Kubernetes
- Um livro muito bom para entender o uso do docker para Data Science: Docker for Data Science: construindo uma infraestrutura de dados escalável e extensível em torno do servidor de notebook Jupyter .