Proteger a proteção do plano de dados do Kubernetes
Esta página descreve como usar o conjunto de recomendações de segurança do Microsoft Defender para Nuvem dedicado à proteção do plano de dados do Kubernetes.
Dica
Para obter uma lista das recomendações de segurança que podem aparecer para clusters e nós do Kubernetes, reviserecomendações de contêiner.
Configurar a proteção de cargas de trabalho
O Microsoft Defender para Nuvem inclui um pacote de recomendações disponíveis assim que você instala o Azure Policy para Kubernetes.
Pré-requisitos
- Adicione as regras de FQDN/aplicativo necessárias para a política do Azure.
- (Em clusters não AKS) Conectar um cluster existente do Kubernetes ao Azure Arc.
Habilitar a proteção do plano de dados do Kubernetes
Você pode habilitar o Azure Policy para Kubernetes de duas maneiras:
- Habilitar todos os clusters atuais e futuros usando configurações de plano/conector
- Implantar o Azure Policy para Kubernetes nos clusters existentes
Habilitar o Azure Policy para Kubernetes em todos os clusters atuais e futuros usando configurações de plano/conector
Observação
Quando esta configuração está habilitada, os pods da Azure Policy para Kubernetes são instalados no cluster. Isso aloca uma pequena quantidade de CPU e memória para os pods usarem. Essa alocação pode atingir a capacidade máxima, mas não afeta o restante da CPU e da memória no recurso.
Observação
Não há suporte para a habilitação do AWS por meio do conector devido a uma limitação no EKS que exige que o administrador do cluster adicione permissões para uma nova função de IAM no próprio cluster.
Habilitar para assinaturas locais ou do Azure
Quando você habilita o Microsoft Defender para contêineres, a configuração "Azure Policy para Kubernetes" é habilitada por padrão para o Serviço de Kubernetes do Azure e para clusters do Kubernetes habilitados para o Azure Arc na assinatura relevante. Se você desabilitar a configuração inicial, poderá habilitá-la manualmente.
Se você desabilitou as configurações do “Azure Policy para Kubernetes” no plano de contêineres, siga as etapas abaixo para habilitá-lo em todos os clusters da sua assinatura:
Entre no portal do Azure.
Navegue até as configurações do Microsoft Defender para Nuvem>Configurações de ambiente.
Selecione a assinatura relevante.
Na página planos do Defender, verifique se Contêineres estão alternados para Ativo.
Selecione Configurações.
Na página Configurações e Monitoramento, alterne o "Azure Policy para Kubernetes" para Ativado.
Habilitar para projetos GCP
Quando você habilita o Microsoft Defender para contêineres em um conector GCP, a configuração “Extensão Azure Policy para Azure Arc” é habilitada por padrão para o Google Kubernetes Engine no projeto relevante. Se você desabilitar a configuração inicial, poderá habilitá-la manualmente.
Se você desabilitou as configurações da “Extensão Azure Policy para Azure Arc” no conector GCP, siga as etapas abaixo para habilitá-la no seu conector GCP.
Implantar o Azure Policy para Kubernetes nos clusters existentes
Você pode configurar manualmente o Azure Policy para Kubernetes nos clusters dos kubernetes existentes pela página Recomendações. Depois de habilitadas, as recomendações de proteção ficam disponíveis (algumas das recomendações exigem que outra configuração funcione).
Observação
Para a AWS, não é possível fazer a integração em escala usando o conector, mas ele pode ser instalado em todos os clusters existentes ou em clusters específicos usando a recomendação Os clusters do Kubernetes habilitados para Azure Arc devem ter a extensão de política do Azure para Kubernetes instalada.
Para implantar o Azure Policy for Kubernetes em clusters especificados:
Na página de recomendações, pesquise a recomendação relevante:
Azure -
"Azure Kubernetes Service clusters should have the Azure Policy add-on for Kubernetes installed"
GCP -
"GKE clusters should have the Azure Policy extension"
.AWS e no local -
"Azure Arc-enabled Kubernetes clusters should have the Azure policy extension for Kubernetes extension installed"
.Dica
A recomendação é incluída em diferentes controles de segurança e não importa qual você selecione na próxima etapa.
Para qualquer um dos controles de segurança, selecione a recomendação para ver os recursos em que você pode instalar o complemento.
Selecione o cluster relevante e selecione Corrigir.
Exibir e configurar o pacote de recomendações
Aproximadamente 30 minutos depois de concluir a instalação do Azure Policy para Kubernetes, o Defender para Nuvem mostra o status de integridade dos clusters para as seguintes recomendações, cada uma no controle de segurança relevante, conforme mostrado:
Observação
Se você estiver instalando o Azure Policy para Kubernetes pela primeira vez, essas recomendações aparecerão como novas adições na lista de recomendações.
Dica
Algumas recomendações têm parâmetros que precisam ser personalizados por meio do Azure Policy para que sejam usadas com eficiência. Por exemplo, para se beneficiar da recomendação Imagens de contêiner devem ser implantadas somente de registros confiáveis, você precisará definir os registros confiáveis. Se você não inserir os parâmetros necessários para as recomendações que exigem configuração, as cargas de trabalho serão indicadas como não íntegras.
Observação
Os componentes da Microsoft, como o sensor Defender e o Azure Monitor Agent (AMA), são implantados no namespace do sistema kube por padrão. Essa configuração garante que eles não sejam marcados como não compatíveis nas recomendações do plano de dados. No entanto, ferramentas de terceiros instaladas em um namespace diferente podem ser sinalizadas como não compatíveis. Para excluir fornecedores terceirizados dessas recomendações, você pode adicionar seus namespaces à lista de exclusão.
Nome da recomendação | Controle de segurança | Configuração necessária |
---|---|---|
Deverão ser aplicados limites de memória e CPU ao contêiner | Proteger aplicativos contra ataques de DDoS | Sim |
As imagens de contêiner devem ser implantadas apenas de registros confiáveis | Corrigir vulnerabilidades | Sim |
Deverão ser aplicadas aos contêineres funcionalidades do Linux com privilégios mínimos | Gerenciar acesso e permissões | Sim |
Os contêineres só devem usar perfis AppArmor permitidos | Corrigir as configurações de segurança | Sim |
Os serviços deverão escutar somente em portas permitidas | Restringir acesso não autorizado à rede | Sim |
Usar redes e portas do host deverá ser restrito | Restringir acesso não autorizado à rede | Sim |
Usar montagens de volumes de HostPath do pod deverá ser restrito a uma lista conhecida | Gerenciar acesso e permissões | Sim |
Os contêineres com elevação de privilégio deverão ser evitados | Gerenciar acesso e permissões | Não |
Os contêineres que compartilham namespaces de host confidenciais deverão ser evitados | Gerenciar acesso e permissões | Não |
Um sistema de arquivos raiz imutável (somente leitura) deverá ser aplicado aos contêineres | Gerenciar acesso e permissões | Não |
Os clusters do Kubernetes devem ser acessíveis somente via HTTPS | Criptografar dados em trânsito | Não |
Os clusters do Kubernetes devem desabilitar as credenciais de API montagem automática | Gerenciar acesso e permissões | Não |
Os clusters do Kubernetes não devem usar o namespace padrão | Implementar melhores práticas de segurança | Não |
Os clusters Kubernetes não devem conceder recursos de segurança CAPSYSADMIN | Gerenciar acesso e permissões | Não |
Os contêineres com privilégios deverão ser evitados | Gerenciar acesso e permissões | Não |
Executar contêineres como usuário raiz deverá ser evitado | Gerenciar acesso e permissões | Não |
Para recomendações com parâmetros que precisam ser personalizados, você precisa definir os parâmetros:
Para definir os parâmetros:
Entre no portal do Azure.
Navegue até as configurações do Microsoft Defender para Nuvem>Configurações de ambiente.
Selecione a assinatura relevante.
No menu do Defender para Nuvem, selecione Política de segurança.
Selecione a atribuição relevante. A atribuição padrão é
ASC default
.Abra a guia Parâmetros e modifique os valores conforme necessário.
Selecione Examinar + salvar.
Selecione Salvar.
Para impor uma das recomendações:
Abra a página de detalhes da recomendação e selecione Negar:
O painel para definir o escopo abre.
Defina o escopo e selecione Alterar para negar.
Para ver quais recomendações se aplicam aos seus clusters:
Abra a página de inventário de ativos do Defender para Nuvem e defina o filtro de tipo de recurso para Serviços Kubernetes.
Selecione um cluster para investigar e analise as recomendações disponíveis para ele.
Quando você exibir uma recomendação do conjunto de proteção de cargas de trabalho, o número de pods afetados (“Componentes Kubernetes”) é listado ao lado do cluster. Para ver uma lista de pods específicos, selecione o cluster e escolha Executar ação.
Para testar a imposição, use as duas implantações do Kubernetes abaixo:
Uma é para uma implantação íntegra, em conformidade com o pacote de recomendações de proteção de cargas de trabalho.
A outra é para uma implantação não íntegra, que não está em conformidade com nenhuma das recomendações.
Implante os arquivos .yaml de exemplo no estado em que se encontram ou use-os como referência para corrigir sua própria carga de trabalho.
Arquivo .yaml de exemplo de implantação íntegra
apiVersion: apps/v1
kind: Deployment
metadata:
name: redis-healthy-deployment
labels:
app: redis
spec:
replicas: 3
selector:
matchLabels:
app: redis
template:
metadata:
labels:
app: redis
annotations:
container.apparmor.security.beta.kubernetes.io/redis: runtime/default
spec:
containers:
- name: redis
image: <customer-registry>.azurecr.io/redis:latest
ports:
- containerPort: 80
resources:
limits:
cpu: 100m
memory: 250Mi
securityContext:
privileged: false
readOnlyRootFilesystem: true
allowPrivilegeEscalation: false
runAsNonRoot: true
runAsUser: 1000
---
apiVersion: v1
kind: Service
metadata:
name: redis-healthy-service
spec:
type: LoadBalancer
selector:
app: redis
ports:
- port: 80
targetPort: 80
Arquivo .yaml de exemplo de implantação não íntegra
apiVersion: apps/v1
kind: Deployment
metadata:
name: redis-unhealthy-deployment
labels:
app: redis
spec:
replicas: 3
selector:
matchLabels:
app: redis
template:
metadata:
labels:
app: redis
spec:
hostNetwork: true
hostPID: true
hostIPC: true
containers:
- name: redis
image: redis:latest
ports:
- containerPort: 9001
hostPort: 9001
securityContext:
privileged: true
readOnlyRootFilesystem: false
allowPrivilegeEscalation: true
runAsUser: 0
capabilities:
add:
- NET_ADMIN
volumeMounts:
- mountPath: /test-pd
name: test-volume
readOnly: true
volumes:
- name: test-volume
hostPath:
# directory location on host
path: /tmp
---
apiVersion: v1
kind: Service
metadata:
name: redis-unhealthy-service
spec:
type: LoadBalancer
selector:
app: redis
ports:
- port: 6001
targetPort: 9001
Próximas etapas
Neste artigo, você aprendeu a configurar a proteção do plano de dados do Kubernetes.
Para ver materiais relacionados, confira as seguintes páginas: