Esta página explica como ativar os registos de auditoria do sistema operativo detalhados nos nós do Google Kubernetes Engine que executam o SO otimizado para contentores. Esta página também explica como configurar um agente de registo fluent-bit para enviar registos para o Cloud Logging. A ativação dos registos detalhados pode fornecer informações valiosas sobre o estado do cluster e das cargas de trabalho, como mensagens de erro, tentativas de início de sessão e execuções binárias. Pode usar estas informações para depurar problemas ou investigar incidentes de segurança.
A ativação do registo auditd do Linux não é suportada em clusters do GKE Autopilot, porque a Google gere os nós e as máquinas virtuais (VMs) subjacentes.
Esta página destina-se a especialistas em segurança que reveem e analisam registos de segurança. Use estas informações para compreender os requisitos e as limitações dos registos do SO detalhados e orientar a implementação quando os ativar nos seus nós do GKE. Para saber mais acerca das funções comuns e das tarefas de exemplo que referimos no Trusted Cloud by S3NS conteúdo, consulte o artigo Funções e tarefas comuns de utilizadores do GKE.
Antes de ler esta página, certifique-se de que conhece os registos de auditoria do sistema operativo Linux.
O registo de auditoria do sistema operativo é diferente dos registos de auditoria do Cloud e dos registos de auditoria do Kubernetes.
Vista geral
Para recolher registos de cada nó num cluster, use um
DaemonSet
que executa exatamente um pod em cada nó do cluster onde o DaemonSet é elegível
para ser agendado. Este pod configura o daemon de registo auditd
no anfitrião e configura o agente de registo para enviar os registos para o Logging ou qualquer outro serviço de carregamento de registos.
Por definição, a auditoria ocorre após um evento e é uma medida de segurança retrospetiva. Os registos do auditd sozinhos provavelmente não são suficientes para realizar análises forenses no seu cluster. Considere a melhor forma de usar o registo auditd como parte da sua estratégia de segurança geral.
Limitações
Os mecanismos de registo descritos nesta página só funcionam em nós que executam o SO otimizado para contentores em clusters padrão do GKE.
Como funciona o DaemonSet de registo
Esta secção descreve o funcionamento do DaemonSet de registo de exemplo para que o possa configurar de acordo com as suas necessidades. A secção seguinte explica como implementar o DaemonSet.
O manifesto de exemplo define um DaemonSet, um ConfigMap e um espaço de nomes para os conter.
O DaemonSet implementa um pod em cada nó no cluster. O Pod contém dois contentores. O primeiro é um init
container
que inicia o serviço systemd cloud-audit-setup disponível nos nós do SO otimizado para contentores.
O segundo contentor, cos-auditd-fluent-bit
, contém uma instância do fluent-bit que está configurada para recolher os registos de auditoria do Linux do jornal do nó e exportá-los para o Cloud Logging.
O DaemonSet de registo de exemplo regista os seguintes eventos:
auditd
modificações da configuração do sistema- Verificações de autorizações do AppArmor
- Execuções de
execve()
,socket()
,setsockopt()
emmap()
- ligações de rede
- inícios de sessão de utilizadores
- Sessão SSH e todos os outros TTYs (incluindo sessões
kubectl exec -t
)
Configure o DaemonSet de registo
Configura o DaemonSet de registo através de um ConfigMap,
cos-auditd-fluent-bit-config
. O exemplo fornecido envia registos de auditoria para o registo, mas pode configurá-lo para enviar registos para outros destinos.
O volume de registos produzido pelo auditd
pode ser muito grande e pode incorrer em custos adicionais porque consome recursos do sistema e envia mais registos do que a configuração de registo predefinida. Pode configurar filtros para gerir o volume de registo:
- Pode configurar filtros no
cos-auditd-fluent-bit-config
ConfigMap para que determinados dados não sejam registados. Consulte a documentação do fluent-bit para o Grep, o Modify, o Record Modifier e outros filtros. - Também pode configurar o registo em registo para filtrar os registos recebidos. Para mais detalhes, consulte o artigo Configure e faça a gestão de destinos.
Implemente o DaemonSet de registo
Pode usar um cluster existente ou criar um novo.
Transfira os manifestos de exemplo:
curl https://raw.githubusercontent.com/GoogleCloudPlatform/k8s-node-tools/master/os-audit/cos-auditd-logging.yaml > cos-auditd-logging.yaml
Edite os manifestos de exemplo de acordo com as suas necessidades. Consulte a secção anterior para ver detalhes sobre o funcionamento do DaemonSet. Tenha em atenção que a
fluent-bit
imagem usada neste exemplo de manifesto destina-se apenas a fins de demonstração. Como prática recomendada, substitua a imagem por uma imagem de uma fonte controlada com o resumo SHA-256.Inicialize variáveis comuns:
export CLUSTER_NAME=CLUSTER_NAME export CLUSTER_LOCATION=COMPUTE_REGION
Substitua o seguinte:
CLUSTER_NAME
: o nome do cluster.COMPUTE_REGION
: a região do Compute Engine para o seu cluster. Para clusters zonais, use a zona em alternativa.
Implemente o espaço de nomes de registo, o DaemonSet e o ConfigMap:
envsubst '$CLUSTER_NAME,$CLUSTER_LOCATION' < cos-auditd-logging.yaml \ | kubectl apply -f -
Verifique se os pods de registo foram iniciados. Se definiu um espaço de nomes diferente nos seus manifestos, substitua cos-auditd pelo nome do espaço de nomes que está a usar.
kubectl get pods --namespace=cos-auditd
Se os pods estiverem em execução, o resultado tem o seguinte aspeto:
NAME READY STATUS RESTARTS AGE cos-auditd-logging-g5sbq 1/1 Running 0 27s cos-auditd-logging-l5p8m 1/1 Running 0 27s cos-auditd-logging-tgwz6 1/1 Running 0 27s
Um pod é implementado em cada nó no cluster. Neste caso, o cluster tem três nós.
Agora, pode aceder aos registos de auditoria em Registo. No Explorador de registos, filtre os resultados com a seguinte consulta:
LOG_ID("linux-auditd") resource.labels.cluster_name = "CLUSTER_NAME" resource.labels.location = "COMPUTE_REGION"
Em alternativa, pode usar a CLI gcloud (use
--limit
porque o conjunto de resultados pode ser muito grande):gcloud logging read --limit=100 "LOG_ID("linux-auditd") AND resource.labels.cluster_name = "${CLUSTER_NAME}" AND resource.labels.location = "${CLUSTER_LOCATION}""
Exportar registos
Para saber como encaminhar os seus registos para destinos suportados, consulte o artigo Configurar e gerir destinos.
Desative os registos
Para desativar o registo auditd
, elimine o DaemonSet de registo e reinicie os nós. A configuração de auditoria é bloqueada assim que é ativada e só pode ser alterada recriando o nó.
Elimine o DaemonSet, o ConfigMap e o respetivo espaço de nomes do cluster:
kubectl delete -f cos-auditd-logging.yaml
Reinicie os nós do cluster. Primeiro, obtenha o grupo de instâncias ao qual pertencem:
instance_group=$(gcloud compute instance-groups managed list \ --format="value(name)" \ --filter=${CLUSTER_NAME})
Em seguida, obtenha as próprias instâncias:
instances=$(gcloud compute instance-groups managed list-instances ${instance_group} \ --format="csv(name)[no-heading][terminator=',']")
Por último, recrie as instâncias:
gcloud compute instance-groups managed recreate-instances ${instance_group} \ --instances=${instances}
O que se segue?
- Veja o vídeo Cloud Forensics 101 para começar a usar a análise forense na nuvem.
- Saiba mais sobre o registo de auditoria do Kubernetes e a política de auditoria.
- Leia a vista geral da segurança do Kubernetes Engine.
- Saiba mais sobre os registos de auditoria do Cloud.