In this article
Tudo o que você precisa saber para começar com segurança de contêineres
Segurança de contêineres para desenvolvedores
O uso de contêineres cresceu exponencialmente nos últimos anos. Embora as tecnologias de contêiner existam há décadas, foi o lançamento do Docker, em 2013, que tornou mais prática a adoção, pelas organizações, de um modelo de desenvolvimento e operações baseado em contêineres.
Esse crescimento também traz riscos de segurança. Com milhões de imagens disponíveis, proteger contêineres é uma disciplina que exige atenção específica. Há várias camadas de segurança aplicáveis aos contêineres, como:
A imagem do contêiner e o software dentro dela
A interação entre o contêiner, o sistema operacional do host e outros contêineres nesse host
O sistema operacional do host
A rede de contêineres e os repositórios de armazenamento
O ambiente de execução, geralmente em clusters do Kubernetes
Como cada camada merece um guia próprio, este guia se concentra no primeiro aspecto: a imagem e seu código. Uma única imagem de contêiner pode conter centenas ou milhares de vulnerabilidades, expondo sua organização a incidentes de segurança, como violações, e à perda de produtividade — devido ao tempo necessário para analisar e avaliar vulnerabilidades à medida que aumenta o número de imagens em uso.
O que é segurança de contêineres?
Tradicionalmente, a segurança de aplicações era responsabilidade de equipes de segurança dedicadas. Mas a forma como os contêineres são definidos e criados faz com que essa responsabilidade recaia cada vez mais sobre desenvolvedores e equipes de DevSecOps.
Essa mudança de responsabilidade, junto com a velocidade com que os contêineres podem ser atualizados e implantados, exige uma metodologia prática de segurança. Não basta analisar seus contêineres na CI e seguir as práticas recomendadas para imagens quando uma análise revela centenas de vulnerabilidades.
O que é segurança de contêineres?
A segurança de contêineres é o processo de implementar ferramentas e processos de segurança para proteger qualquer sistema ou carga de trabalho baseado em contêineres — incluindo a imagem do contêiner, o contêiner em execução e todas as etapas necessárias para criar essa imagem e colocá-la em funcionamento.
Já criamos um guia de segurança de contêineres com Docker. Confira nossos 3 passos práticos para proteger uma imagem de contêiner e veja recomendações mais práticas. Nesta publicação, apresentamos uma visão geral das práticas de DevSecOps usadas pelas organizações para criar imagens e executar contêineres com mais segurança. Também apresentamos ferramentas técnicas, como Snyk Container, Snyk IaC e nossa parceria com a Sysdig, que oferecem segurança abrangente para contêineres, do desenvolvimento à execução.
Por que a segurança de contêineres é importante?
A segurança de contêineres é importante porque a imagem do contêiner contém todos os componentes que, em algum momento, vão executar sua aplicação. Se houver vulnerabilidades ocultas na imagem, o risco e o impacto potencial de problemas de segurança em produção aumentam. Por isso, também é importante monitorar o ambiente de produção. Você pode criar imagens sem vulnerabilidades ou privilégios elevados, mas ainda precisa monitorar o que acontece durante a execução.
Segurança de contêineres que prioriza os desenvolvedores
O Snyk encontra e corrige automaticamente vulnerabilidades em imagens de contêiner e workloads do Kubernetes.
Visão geral da segurança de contêineres em diferentes ecossistemas
Segurança de contêineres Docker
A enorme base de usuários do Docker — com dezenas de milhões de pessoas e centenas de bilhões de downloads de imagens — mostra como a conteinerização está mudando a forma de criar aplicações. A responsabilidade pela segurança está passando cada vez mais para os desenvolvedores. É importante analisar imagens Docker antes de enviá-las ao Docker Hub ou a outros registros para encontrar e corrigir vulnerabilidades em pacotes Linux, permissões de usuários, configurações de rede, ferramentas de código aberto ou gerenciamento de acesso. Essa análise pode ajudar você a identificar e corrigir problemas de vulnerabilidade na aplicação e na infraestrutura antes da implantação.
Segurança de contêineres no Kubernetes
O Kubernetes oferece diversos controles de segurança para ajudar a proteger clusters, cargas de trabalho e contêineres. É importante observar que o Kubernetes exige configuração manual: nenhum controle de segurança vem configurado quando você implanta o Kubernetes. Além disso, embora ofereça controles e recursos para criar um cluster seguro, as configurações de segurança padrão geralmente não são suficientes. A implantação segura de cargas de trabalho exige conhecimento especializado em Kubernetes. Acesse nossa página sobre práticas recomendadas de segurança do Kubernetes para saber mais.
Segurança de contêineres no GKE
O Google Kubernetes Engine (GKE) oferece várias ferramentas para proteger cargas de trabalho. Uma boa prática é adotar uma abordagem em camadas para a segurança do GKE, configurando recursos de segurança para controles de acesso, cargas de trabalho e outros aspectos. O GKE pode ser executado no modo padrão, em que você gerencia a infraestrutura subjacente, ou no modo Autopilot, em que o GKE provisiona e gerencia a infraestrutura. A integração do Snyk Container com o Kubernetes permite que os clientes protejam cargas de trabalho no GKE, no modo padrão ou Autopilot, identifiquem vulnerabilidades em imagens de contêiner e código de aplicação e analisem suas configurações do Kubernetes em busca de problemas.
Segurança de contêineres no AKS
O Microsoft Azure Kubernetes Service (AKS), assim como o GKE, inclui recursos robustos de segurança, como integração com o Azure Policy e atualizações e correções frequentes e rápidas. No entanto, a atualização dos componentes do cluster para versões mais recentes exige um processo semimanual, e as políticas de rede precisam ser habilitadas durante a criação do cluster. Assim como no GKE, o Snyk pode analisar suas configurações e seus contêineres do Kubernetes e habilitar o monitoramento automático durante a implantação de recursos do AKS.
Segurança de contêineres no EKS
O Amazon Elastic Kubernetes Service (Amazon EKS) conta com um conjunto robusto de recursos de segurança padrão e segue o modelo de responsabilidade compartilhada da AWS, que define quem é responsável por cada aspecto da segurança de contêineres. Em geral, a AWS é responsável pela segurança “da” nuvem, enquanto você, cliente, é responsável pela segurança “na” nuvem. Assim como nas outras opções de Kubernetes mencionadas, o Snyk se integra facilmente ao Amazon EKS e ao Amazon Elastic Container Registry (Amazon ECR) para analisar suas configurações e seus contêineres do Kubernetes e habilitar o monitoramento automatizado durante a implantação no Amazon EKS.
Como proteger contêineres com o Snyk Container
Com milhões de vulnerabilidades em contêineres, encontrar, priorizar e corrigir esses problemas pode ser uma tarefa complexa para os desenvolvedores. O Snyk Container vai além do ruído dos relatórios tradicionais de vulnerabilidades: detecta e corrige vulnerabilidades em aplicações e contêineres ao mesmo tempo, mesmo que você não tenha acesso ao código-fonte original executado nos contêineres.
O Snyk Container analisa continuamente novas vulnerabilidades, prioriza correções com base no contexto e na possibilidade de exploração, identifica problemas em dependências de código aberto e associa vulnerabilidades a comandos do Dockerfile para facilitar a implementação de correções pelos desenvolvedores. Em 2021, o Snyk Container foi usado para realizar mais de 130 milhões de testes em contêineres, e os usuários do Snyk Container corrigiram 56 milhões de vulnerabilidades.
Em conjunto com o Snyk Infrastructure as Code, que protege as configurações de contêineres, o Snyk Container se integra a várias plataformas Kubernetes, incluindo AKS e GKE; a registros de contêineres, como Docker Hub, GCR e Quay; e a sistemas operacionais usados como base para contêineres, como Amazon Linux e Ubuntu, entre muitos outros. A análise integrada de vulnerabilidades ajuda os desenvolvedores a identificar e usar imagens-base mínimas adequadas e automatiza o processo de atualização para eliminar vulnerabilidades rapidamente.
Assim como o restante da plataforma Snyk, o Snyk Container foi criado com foco nos desenvolvedores e apoia a cultura DevSecOps. Ele se integra ao IDE, analisa solicitações de pull antes da mesclagem, orienta sobre correções e aplica testes automatizados aos pipelines de CI/CD. Depois que os contêineres estão em execução, monitora continuamente as implantações para identificar exposição a vulnerabilidades existentes ou recém-divulgadas. Os alertas são enviados pelo Slack, Jira, e-mail ou outros canais, ajudando as equipes de DevSecOps a identificar e corrigir vulnerabilidades rapidamente.
Segurança de contêineres que prioriza os desenvolvedores
O Snyk encontra e corrige automaticamente vulnerabilidades em imagens de contêiner e workloads do Kubernetes.
Como a parceria entre Snyk e Sysdig protege a segurança dos contêineres em execução
O feedback antecipado do Snyk Container sobre imagens pode eliminar 70% ou mais das vulnerabilidades, mas até 30% das vulnerabilidades em tempo de execução podem continuar sem ser identificadas. Isso pode somar centenas de vulnerabilidades em milhares de contêineres e diversos clusters. Encontrar e corrigir esses problemas pode ser uma tarefa desafiadora. É difícil saber quais pacotes são usados em um contêiner em execução e quais vulnerabilidades afetam esses pacotes durante a execução. As equipes de segurança e operações responsáveis pelo gerenciamento de ambientes ativos precisam identificar as vulnerabilidades antes de envolver as equipes de desenvolvimento na correção. Além disso, como os desenvolvedores não têm experiência em sistemas, as ferramentas tradicionais de vulnerabilidade podem levar meses para encontrar e corrigir problemas.
A Snyk firmou uma parceria com a Sysdig para ajudar a resolver problemas em ambientes de execução, oferecendo mais contexto sobre o que está afetando esses ambientes. Essa parceria cria uma solução de segurança que abrange todo o processo de DevOps. Juntas, as plataformas Snyk e Sysdig protegem tudo, do código no ambiente de desenvolvimento à infraestrutura que executa o cluster.
Confira esta publicação de anúncio para saber mais sobre como a parceria entre Snyk e Sysdig amplia a segurança de contêineres para o ambiente de execução.
Conclusão sobre segurança de contêineres
A segurança de contêineres é um tema amplo, e mesmo limitar o escopo à segurança das imagens-base traz inúmeros desafios. Para proteger suas imagens, tenha em mente alguns pontos importantes:
Comece com imagens-base de um fornecedor confiável e use assinaturas digitais para verificar a autenticidade.
Prefira imagens-base mínimas, com apenas os pacotes essenciais do sistema operacional e o framework de sua escolha, e adicione os demais componentes a partir daí.
Verifique se há vulnerabilidades nas imagens desde o início e com frequência.
Faça análises ao longo de todo o ciclo de vida do software: no desktop, na CI, nas imagens armazenadas em registros e nos contêineres em execução nos clusters.
Escolha ferramentas de análise que vão além de relatórios básicos de vulnerabilidades em planilhas. Prefira soluções que recomendem medidas de mitigação e imagens-base, orientem os desenvolvedores na correção de problemas e ofereçam a flexibilidade necessária para definir seus controles de segurança.
Se você quer proteger suas imagens de contêiner em todo o ciclo de vida, o Snyk Container automatiza a segurança de contêineres com foco nos desenvolvedores. Assim, oferece o equilíbrio certo entre segurança e produtividade para você criar imagens e executar contêineres com mais segurança.
Glossário de segurança de contêineres
Análise de contêineres: processo de identificação de vulnerabilidades em contêineres por meio da análise de pacotes e dependências em uma imagem de contêiner
Monitoramento de contêineres: coleta de métricas e acompanhamento da integridade de aplicações e arquiteturas conteinerizadas
Kubernetes: sistema de código aberto, desenvolvido originalmente pelo Google, para orquestrar aplicações conteinerizadas em um cluster.
K8s: abreviação de Kubernetes.
Docker: a plataforma de contêineres mais popular do mundo. O Docker democratizou as ferramentas e os processos de criação e execução de contêineres, permitindo que os desenvolvedores usem essas tecnologias com facilidade.
Dockerfile: arquivo de texto que contém as configurações necessárias para criar uma imagem Docker.
Google Kubernetes Engine (GKE): serviço gerenciado do Google para executar cargas de trabalho do Kubernetes no Google Cloud.
AKS: serviço gerenciado de Kubernetes da Microsoft Azure. Inicialmente, era um serviço mais genérico, o Azure Container Service, que evoluiu para AKS quando o Kubernetes se tornou a principal plataforma de orquestração de contêineres.
AWS EKS: serviço gerenciado de Kubernetes da Amazon Web Services para executar cargas de trabalho do Kubernetes na AWS. O AWS EKS pode ser usado de forma independente ou com outros serviços, como o AWS Fargate. O AWS Fargate oculta toda a infraestrutura do Kubernetes, permitindo que os usuários se concentrem apenas nos próprios pods do Kubernetes.
Imagem de contêiner: arquivo estático que contém um conjunto de instruções para criar um contêiner em execução
Registro de contêineres: repositório de imagens de contêiner e ferramenta de gerenciamento que facilita o armazenamento e o compartilhamento dessas imagens.
Ambiente de execução de contêiner: software que cria, executa e gerencia contêineres em um sistema operacional host.
Antecipar a segurança: cultura e conjunto de ferramentas que incorporam a segurança aos fluxos de trabalho dos desenvolvedores
DevSecOps: abreviação de desenvolvimento, segurança e operações. DevSecOps é uma abordagem que automatiza a segurança ao longo do ciclo de vida da entrega de software.
Perguntas frequentes sobre segurança de contêineres
Os contêineres são seguros?
Eles podem ser, mas raramente são seguros por padrão. Os processos e as ferramentas usados anteriormente na infraestrutura tradicional talvez não sejam suficientes para oferecer uma segurança robusta para contêineres. Os contêineres transformaram o cenário dos sistemas distribuídos, e é preciso adotar novos métodos para protegê-los. Há uma ampla variedade de soluções de segurança para contêineres que podem e devem ser adotadas para oferecer a melhor proteção possível às cargas de trabalho conteinerizadas.
Como corrigir vulnerabilidades de segurança em contêineres?
Corrigir vulnerabilidades de segurança em contêineres envolve quatro etapas. Primeiro, resolva as vulnerabilidades no seu código e nas dependências. Segundo, escolha imagens-base mínimas, de acordo com o que você precisa — comece com uma imagem enxuta e adicione apenas o necessário. Em seguida, avalie as ferramentas e os pacotes extras que você incluir. À medida que os contêineres se aproximam da produção, o número de extras deve chegar a zero. Por fim, configure o contêiner para ser executado com o mínimo de privilégios possível.
Como proteger uma imagem de contêiner Docker?
Para proteger uma imagem de contêiner Docker, é importante garantir que ela não dependa de práticas inseguras para funcionar corretamente, como executar como root. A documentação do Docker é um ótimo ponto de partida, especialmente no que diz respeito à confiança. É possível implementar controles de confiança até mesmo em registros privados. Garantir que as imagens-base tenham o mínimo necessário de pacotes e dependências e usar ferramentas de verificação para monitorar vulnerabilidades também ajuda a proteger imagens Docker.
O que é a varredura de contêineres?
A verificação de contêineres é o uso de ferramentas e processos para identificar possíveis problemas de segurança em contêineres. É uma etapa fundamental para proteger pacotes conteinerizados. As ferramentas de verificação podem analisar código, dependências transitivas, configurações de contêineres e configurações de runtime de contêineres, entre outros aspectos.
Segurança de contêineres que prioriza os desenvolvedores
O Snyk encontra e corrige automaticamente vulnerabilidades em imagens de contêiner e workloads do Kubernetes.