Configurar a segurança para os Aplicativos de Contêiner do Azure (ACAs)
Usar um registro privado
Os contêineres são criados a partir de imagens que são armazenadas em um ou mais repositórios. Esses repositórios podem pertencer a um registro público, como o Docker Hub, ou a um registro privado. Um exemplo de um registro privado é o Docker Trusted Registry, que pode ser instalado localmente ou em uma nuvem privada virtual. Você também pode usar serviços de registro de contêiner privado baseados em nuvem, incluindo o Registro de Contêiner do Azure.
Uma imagem de contêiner disponível publicamente não garante a segurança. As imagens de contêiner são compostas por várias camadas de software e cada camada de software pode ter vulnerabilidades. Para ajudar a reduzir a ameaça de ataques, você deve armazenar e recuperar imagens de um registro privado, como o Registro de Contêiner do Azure ou o Docker Trusted Registry. Além de fornecer um registro privado gerenciado, o Registro de Contêiner do Azure dá suporte à autenticação baseada na entidade de serviço por meio do Microsoft Entra ID para fluxos de autenticação básicos. Essa autenticação inclui o acesso baseado em função para somente leitura (pull), gravação (push) e outras permissões.
Monitorar e examinar imagens de contêiner
Tire proveito das soluções para examinar as imagens de contêiner em um registro privado e identificar possíveis vulnerabilidades. É importante compreender a profundidade da detecção de ameaças fornecida pelas diferentes soluções.
Por exemplo, o Registro de Contêiner do Azure se integra opcionalmente ao Microsoft Defender para Nuvem para examinar automaticamente todas as imagens do Linux enviadas por push a um registro. O scanner Qualys integrado do Microsoft Defender para Nuvem detecta vulnerabilidades de imagem, classifica-as e fornece diretrizes de correção.
Há também soluções de monitoramento de segurança e exame de imagem, como Twistlock e Aqua Security, disponíveis no Azure Marketplace.
Proteger credenciais
Os contêineres podem se espalhar por vários clusters e regiões do Azure. Portanto, você deve proteger as credenciais necessárias aos logons ou ao acesso à API, como senhas ou tokens. Faça com que somente usuários privilegiados possam acessar esses contêineres em trânsito e em inatividade. Inventarie todos os segredos de credencial e exija que os desenvolvedores usem ferramentas emergentes de gerenciamento de segredos projetadas para plataformas de contêiner. Verifique se sua solução inclui bancos de dados criptografados, criptografia de TLS para dados de segredos em trânsito e RBAC (controle de acesso baseado em função) do Azure com privilégios mínimos. O Azure Key Vault é um serviço de nuvem que protege chaves de criptografia e segredos (como certificados, cadeias de conexão e senhas) de aplicativos conteinerizados. Como esses dados são confidenciais e críticos para os negócios, proteja o acesso aos cofres de chaves para que apenas aplicativos e usuários autorizados possam acessá-los.
Considerações sobre o ecossistema do contêiner
As medidas de segurança a seguir, quando bem implementadas e gerenciadas efetivamente, podem ajudá-lo a proteger seu ecossistema de contêiner. Essas medidas se aplicam ao longo do ciclo de vida do contêiner, desde o desenvolvimento até a implantação na produção, e a uma variedade de orquestradores de contêiner, hosts e plataformas.
Use o gerenciamento de vulnerabilidades como parte do seu ciclo de vida de desenvolvimento de contêiner
Ao usar um gerenciamento de vulnerabilidades eficaz em todo o ciclo de vida de desenvolvimento do contêiner, você aumenta as chances de identificar e resolver questões de segurança antes que elas se tornem um problema mais sério.
Examinar vulnerabilidades
Novas vulnerabilidades são descobertas o tempo todo, ou seja, o exame e a identificação de vulnerabilidades são um processo contínuo. Incorpore o exame de vulnerabilidade em todo o ciclo de vida do contêiner:
- Como uma verificação final no seu pipeline de desenvolvimento, você deve executar um exame de vulnerabilidade em contêineres antes de enviar as imagens por push a um registro público ou privado.
- Continue a examinar as imagens de contêiner no registro para identificar as falhas que estavam de alguma forma perdidas durante o desenvolvimento e para resolver eventuais vulnerabilidades recém-descobertas que possam existir no código usado nas imagens de contêiner.
Mapear vulnerabilidades de imagem para contêineres em execução
Você precisa ter um meio de mapear vulnerabilidades identificadas em imagens de contêiner para contêineres em execução a fim de poder resolver ou mitigar os problemas de segurança.
Garantir que apenas as imagens aprovadas sejam usadas em seu ambiente
Já existem alterações e volatilidades suficientes em um ecossistema de contêiner sem contar com a permissão de contêineres desconhecidos. Permitir apenas imagens de contêiner aprovadas. Tenha ferramentas e processos em vigor para monitorar e impedir o uso de imagens de contêiner não aprovadas.
Uma maneira eficaz de reduzir a superfície de ataque e impedir que os desenvolvedores cometam erros de segurança críticos é controlar o fluxo de imagens de contêiner em seu ambiente de desenvolvimento. Por exemplo, você pode aprovar uma única distribuição do Linux como uma imagem de base, preferencialmente uma que seja lean (Alpine ou CoreOS em vez do Ubuntu), para minimizar a superfície de possíveis ataques.
A assinatura de imagem ou impressão digital pode fornecer uma cadeia de custódia que permite verificar a integridade dos contêineres. Por exemplo, o Registro de Contêiner do Azure dá suporte ao modelo de confiança de conteúdo do Docker, que permite que os editores de imagens assinem imagens enviadas por push a um registro e que os consumidores de imagem recebam apenas imagens assinadas.
Permitir somente registros aprovados
Mais uma forma de garantir que seu ambiente use apenas imagens aprovadas é permitir apenas o uso de registros de contêiner aprovados. A exigência do uso de registros de contêiner aprovados reduz sua exposição ao risco, limitando o potencial de introdução de vulnerabilidades desconhecidas ou problemas de segurança.
Garantir a integridade das imagens durante todo o ciclo de vida
Parte do gerenciamento de segurança em todo o ciclo de vida do contêiner é garantir a integridade das imagens de contêiner no registro e conforme elas são alteradas ou implantadas na produção.
- As imagens com vulnerabilidades, até mesmo pequenas, não devem ter permissão para execução em um ambiente de produção. O ideal é que todas as imagens implantadas em produção sejam salvas em um registro privado acessível para um seleto grupo. Mantenha poucas imagens de produção para garantir que elas possam ser gerenciadas com eficiência.
- Como é difícil identificar a origem do software de uma imagem de contêiner disponível publicamente, crie imagens da origem para garantir o conhecimento da origem da camada. Quando surge uma vulnerabilidade em uma imagem de contêiner criada automaticamente, os clientes podem encontrar um caminho mais rápido para uma resolução. Com uma imagem pública, os clientes precisam encontrar a raiz de uma imagem pública para corrigi-la ou obter outra imagem segura do publicador.
- Não há garantia de que uma imagem digitalizada totalmente implantada em produção esteja atualizada durante o tempo de vida do aplicativo. As vulnerabilidades de segurança podem ser reportadas para camadas da imagem que não eram conhecidas anteriormente ou que foram introduzidas após a implantação em produção.
- Audite as imagens implantadas em produção periodicamente para identificar as imagens que estão desatualizadas ou que não foram atualizadas há um tempo. Você pode usar metodologias de implantação blue-green e mecanismos de atualização sem interrupção para atualizar as imagens de contêiner sem tempo de inatividade. Você pode digitalizar imagens usando as ferramentas descritas na seção anterior.
- Use um pipeline de CI (integração contínua) com exame de segurança integrado para criar imagens seguras e enviá-las por push ao registro privado. A verificação de vulnerabilidade incorporada à solução de CI garante que as imagens que passam em todos os testes sejam enviadas para o registro privado a partir do qual as cargas de trabalho de produção são implantadas.
- Uma falha de pipeline de CI faz com que as imagens vulneráveis não sejam enviadas ao registro privado que é usado para implantações de cargas de trabalho de produção. Ela também automatiza o exame de segurança de imagem quando há um número significativo de imagens. Caso contrário, a auditoria manual de imagens em busca de vulnerabilidades de segurança pode ser muito demorada e sujeita a erros.
Impor privilégios mínimos no tempo de execução
O conceito de privilégios mínimos é uma melhor prática de segurança básica que também se aplica aos contêineres. Quando uma vulnerabilidade é explorada, ela geralmente fornece ao invasor acesso e privilégios iguais aos do aplicativo ou processo comprometido. Fazer com que os contêineres operem com os privilégios mais baixos e o acesso mínimo necessário para que o trabalho seja realizado reduz a exposição a riscos.
Reduzir a superfície de ataque de contêiner removendo privilégios desnecessários
Você também pode minimizar a possível superfície de ataque removendo processos ou privilégios não utilizados ou desnecessários do tempo de execução do contêiner. Contêineres com privilégios executados como raiz. Se um usuário ou uma carga de trabalho mal-intencionados escapar em um contêiner com privilégios, o contêiner será executado como raiz no sistema.
Aprove previamente arquivos e executáveis que o contêiner tenha permissão para acessar ou executar
A redução do número de variáveis ou desconhecidos ajuda a manter um ambiente estável e confiável. Limitar contêineres para que eles possam acessar ou executar somente arquivos e executáveis pré-aprovados ou em lista segura é um método comprovado de limitar a exposição ao risco.
É bem mais fácil gerenciar uma lista segura quando ela é implementada desde o início. Uma lista segura fornece uma medida de controle e gerenciabilidade conforme você aprende quais arquivos e executáveis são necessários para que o aplicativo funcione corretamente.
Uma lista segura não apenas reduz a superfície de ataque, mas também pode fornecer uma linha de base para anomalias e impedir os casos de uso de "vizinho barulhento" e de fuga de contêiner.
Impor a segmentação de rede em contêineres em execução
Para ajudar a proteger os contêineres em uma sub-rede contra riscos de segurança em outra sub-rede, mantenha a segmentação de rede (ou nanossegmentação) ou a segregação de contêineres em execução. A manutenção da segmentação de rede também pode ser necessária para usar contêineres em setores que são obrigados a cumprir os mandatos de conformidade.
Por exemplo, a ferramenta de parceiro Aqua fornece uma abordagem automatizada para a nanossegmentação. A Aqua monitora as atividades de rede do contêiner em tempo de execução. Ela identifica todas as conexões de rede de entrada e saída de/para outros contêineres, serviços, endereços IP e a Internet pública. A nanossegmentação é criada automaticamente com base no tráfego monitorado.
Monitorar a atividade do contêiner e o acesso do usuário
Assim como acontece em qualquer ambiente de TI, você deve monitorar consistentemente a atividade e o acesso do usuário ao seu ecossistema de contêiner para identificar rapidamente qualquer atividade suspeita ou mal-intencionada. O Azure fornece soluções de monitoramento de contêiner, incluindo:
O Azure Monitor para contêineres monitora o desempenho das suas cargas de trabalho implantadas em ambientes do Kubernetes hospedados no AKS (Serviço de Kubernetes do Azure). O Azure Monitor para contêineres oferece visibilidade de desempenho coletando métricas de processador e memória de controladores, nós e contêineres disponíveis no Kubernetes por meio da API de Métricas.
A solução de Monitoramento de Contêiner do Azure ajuda a exibir e gerenciar os hosts de contêiner do Docker e do Windows em um único local. Por exemplo:
- Exibir informações de auditoria detalhadas que mostram os comandos usados com contêineres.
- Solucionar os problemas de contêineres exibindo e pesquisando logs centralizados sem precisar exibir remotamente os hosts do Docker ou do Windows.
- Encontrar contêineres que podem estar com ruídos e consomem recursos em excesso em um host.
- Exibir o uso de CPU, memória, armazenamento e rede e informações de desempenho centralizadas para contêineres.
A solução dá suporte a orquestradores de contêineres, incluindo Docker Swarm, DC/OS, Kubernetes não gerenciado, Service Fabric e Red Hat OpenShift.
Monitorar atividade de recursos de contêiner
Monitore a atividade de recursos, como arquivos, rede e outros recursos que seus contêineres acessam. O monitoramento da atividade e do consumo de recursos é útil para monitorar o desempenho e como uma medida de segurança.
O Azure Monitor habilita o monitoramento principal dos serviços do Azure, permitindo a coleta de métricas, logs de atividades e logs de diagnóstico. Por exemplo, o log de atividades informará quando novos recursos forem criados ou modificados.
Métricas disponíveis que fornecem estatísticas de desempenho para diferentes recursos e até mesmo o sistema operacional dentro de uma máquina virtual. É possível exibir esses dados com um dos gerenciadores no Portal do Azure e criar alertas com base nessas métricas. O Azure Monitor fornece o pipeline de métricas mais rápido possível (de 5 a 1 minuto), portanto, você deve usá-lo para notificações e alertas críticos em termos de tempo.
Registrar todo o acesso de usuário administrativo aos contêineres para auditoria
Mantenha uma trilha de auditoria precisa do acesso administrativo ao seu ecossistema de contêiner, incluindo o cluster Kubernetes, o registro de contêiner e as imagens de contêiner. Esses logs podem ser necessários para fins de auditoria e serão úteis como prova após incidentes de segurança. Essas soluções incluem:
- Integração do Serviço de Kubernetes do Azure com o Microsoft Defender para Nuvem para monitorar a configuração de segurança do ambiente de clusters e gerar recomendações de segurança
- Solução de Monitoramento de Contêiner do Azure
- Logs de recursos para Instâncias de Contêiner do Azure e Registro de Contêiner do Azure