Container Service for Kubernetes (ACK) oferece recursos para coletar e analisar logs e dados de auditoria de diversos componentes do Kubernetes, incluindo o servidor de API, Ingress, componentes do plano de controle e eventos críticos. Esses recursos facilitam a análise de causa raiz e o rastreamento de atividades quando ocorrem problemas de segurança ou no cluster.
Utilizar a auditoria de cluster
Em um cluster Kubernetes, o log de auditoria do servidor de API é uma ferramenta essencial para segurança e operações, pois permite que os administradores registrem e rastreiem as atividades dos usuários. Para obter informações sobre como coletar e analisar logs de auditoria com o Log Service (SLS), configurar regras de alerta personalizadas e desativar a auditoria do cluster, consulte Trabalhar com auditoria de cluster.
A política de auditoria do Container Service for Kubernetes (ACK) é a seguinte:
Para mais detalhes sobre os campos do log de auditoria, consulte audit.k8s.io/v1 Event.
apiVersion: audit.k8s.io/v1beta1 # This is required.
kind: Policy
# Don't log events for requests in the RequestReceived stage.
omitStages:
- "RequestReceived"
rules:
# The following requests are high-volume and low-risk, so they are not logged.
- level: None
users: ["system:kube-proxy"]
verbs: ["watch"]
resources:
- group: "" # core
resources: ["endpoints", "services"]
- level: None
users: ["system:unsecured"]
namespaces: ["kube-system"]
verbs: ["get"]
resources:
- group: "" # core
resources: ["configmaps"]
- level: None
users: ["kubelet"] # legacy kubelet identity
verbs: ["get"]
resources:
- group: "" # core
resources: ["nodes"]
- level: None
userGroups: ["system:nodes"]
verbs: ["get"]
resources:
- group: "" # core
resources: ["nodes"]
- level: None
users:
- system:kube-controller-manager
- system:kube-scheduler
- system:serviceaccount:kube-system:endpoint-controller
verbs: ["get", "update"]
namespaces: ["kube-system"]
resources:
- group: "" # core
resources: ["endpoints"]
- level: None
users: ["system:apiserver"]
verbs: ["get"]
resources:
- group: "" # core
resources: ["namespaces"]
# Don't log requests to these read-only URLs.
- level: None
nonResourceURLs:
- /healthz*
- /version
- /swagger*
# Don't log event requests.
- level: None
resources:
- group: "" # core
resources: ["events"]
# Secrets, ConfigMaps, and token reviews can contain sensitive and binary data,
# so only log them at the Metadata level.
- level: Metadata
resources:
- group: "" # core
resources: ["secrets", "configmaps"]
- group: authentication.k8s.io
resources: ["tokenreviews"]
- level: Request
verbs: ["get", "list", "watch"]
resources:
- group: "" # core
- group: "admissionregistration.k8s.io"
- group: "apps"
- group: "authentication.k8s.io"
- group: "authorization.k8s.io"
- group: "autoscaling"
- group: "batch"
- group: "certificates.k8s.io"
- group: "extensions"
- group: "networking.k8s.io"
- group: "policy"
- group: "rbac.authorization.k8s.io"
- group: "settings.k8s.io"
- group: "storage.k8s.io"
# Default level for known APIs.
- level: RequestResponse
resources:
- group: "" # core
- group: "admissionregistration.k8s.io"
- group: "apps"
- group: "authentication.k8s.io"
- group: "authorization.k8s.io"
- group: "autoscaling"
- group: "batch"
- group: "certificates.k8s.io"
- group: "extensions"
- group: "networking.k8s.io"
- group: "policy"
- group: "rbac.authorization.k8s.io"
- group: "settings.k8s.io"
- group: "storage.k8s.io"
- group: "autoscaling.alibabacloud.com"
# Default level for all other requests.
- level: Metadata
Personalizar regras de log de auditoria do cluster
O ACK permite estender os recursos de auditoria do cluster adicionando regras personalizadas. Configure essas regras no campo auditPolicyRules, na página de configuração do kube-apiserver.
# The rules must be defined as a list in YAML format.
- level: RequestResponse
resources:
- group: "policy.alibabacloud.com"
resources: ["policies"]
- level: None
userGroups: ["system:nodes"]
verbs: ["update", "patch"]
resources:
- group: ""
resources: ["nodes/status", "pods/status"]
As regras anteriores cumprem dois objetivos:
Auditoria aprimorada: registra todas as operações em modelos de política do Container Service (
policies.policy.alibabacloud.com) no nívelRequestResponse.Redução de ruído: ignora atualizações de status de nós e Pods provenientes do componente kubelet (pertencente ao grupo
system:nodes), como heartbeats, evitando entradas de log desnecessárias.
Para saber mais sobre a definição de regras de log de auditoria, consulte Auditing.
Ao configurar regras personalizadas, observe os pontos abaixo:
Formato da regra: adicione uma lista de regras de auditoria (
rules) no campo de entrada, e não um objetoPolicycompleto.Prioridade das regras: para garantir um nível básico de auditoria de segurança no cluster, não é possível alterar o nível de log das requisições cobertas pelas regras padrão de auditoria do Container Service.
Validação de regras: o Container Service valida as regras adicionadas com base na definição do campo rules em policies.audit.k8s.io. Certifique-se de adicionar regras válidas consultando a documentação oficial sobre Kubernetes Audit. Importante: uma regra com formato incorreto pode impedir a inicialização do servidor de API.
Auditoria de atividade exec em contêineres
Um vetor de ataque comum em clusters Kubernetes envolve o uso do comando exec por invasores para acessar um contêiner e iniciar ataques laterais. Após obter acesso ao contêiner, o log de auditoria padrão do servidor de API não registra os comandos executados. Nesse cenário, utilize a auditoria de atividade interna do contêiner. Esse recurso ajuda as equipes de segurança e operações a capturar os comandos executados pelo invasor após a entrada no contêiner, facilitando a análise de causa raiz e a mitigação rápida de incidentes de segurança.
Utilizar metadados de auditoria
O log de auditoria do Kubernetes inclui duas anotações que indicam se uma requisição foi autorizada, authorization.k8s.io/decision, e o motivo da decisão, authorization.k8s.io/reason. Use esses atributos para entender por que uma chamada específica à API foi permitida.
Monitorar eventos do cluster com NPD e SLS
O node-problem-detector (NPD) é uma ferramenta mantida pela Alibaba Cloud para diagnóstico de nós no Container Service for Kubernetes (ACK). O NPD converte anomalias nos nós, como travamento do mecanismo Docker, travamento do kernel Linux, problemas de rede de saída ou exaustão de descritores de arquivo, em eventos de nó. Quando usado em conjunto com o kube-eventer, ele cria um sistema de ciclo fechado para alertas de eventos de nó. Além dos problemas em tempo real detectados pelo NPD, os clusters Kubernetes geram diversos eventos conforme seu estado muda, como evicções de Pods ou falhas ao baixar imagens. Para esses e outros comportamentos suspeitos, como um usuário padrão usando exec para acessar um contêiner, o centro de eventos do Kubernetes no Log Service (SLS) reúne todos os eventos do cluster em tempo real. Ele oferece recursos de armazenamento, consulta, análise, visualização e alertas para ajudar as equipes de segurança e operações a identificar rapidamente riscos à estabilidade do cluster. Para mais informações, consulte Monitoramento de eventos.
Ativar o painel do Ingress
O componente Ingress da Alibaba Cloud permite registrar todas as requisições HTTP na saída padrão. A Alibaba Cloud também integra o componente Ingress ao Log Service (SLS), possibilitando a criação rápida de painéis para análise e monitoramento de logs. No painel de visualização do Ingress, visualize facilmente o status geral, incluindo métricas essenciais como page views (PVs), visitantes únicos (UVs), tráfego, latência e principais URLs. Isso ajuda a monitorar o tráfego dos serviços em tempo real e a detectar prontamente acessos maliciosos e ataques de DoS. Para mais informações, consulte Painel do Ingress.
Ativar logs do CoreDNS
Os clusters do Container Service for Kubernetes (ACK) utilizam o CoreDNS como servidor DNS interno. Analise os logs do CoreDNS para solucionar problemas como resolução lenta de DNS ou investigar consultas a domínios de alto risco. O painel do SLS fornece um relatório de análise de logs do CoreDNS, ajudando a identificar rapidamente requisições suspeitas para domínios de alto risco. Para mais informações, consulte Analisar e monitorar logs do CoreDNS.