Implantando Falco no GKE

Implantando Falco no GKE

Photo by Nathy dog on Unsplash

Contexto

image.png

Já pensou em uma ferramenta HIDS para o seu Kubernetes gerenciado? Há uma maneira pouco dramática para implantá-la utilizando Falco com suporte a eBPF. É uma das três alternativas disponibilizadas. Além disso, é uma recomendação para GKE:

We suggest using the eBPF driver for running Falco on GKE.

Falco é uma solução CNCF e você pode conhecer mais no site: falco.org

Requisitos

Na documentação oficial, os requisitos para utilizar eBPF probe são:

  1. CONFIG_BPF_JIT habilitado
  2. valor da variável de ambiente FALCO_BPF_PROBE para vazio
  3. net.core.bpf_jit_enable definida para 1 (habilita BPF JIT Compiler)

Antes, vamos verificar a versão de kernel atual:

$ uname -r
5.4.170+

✅ Bom! É uma versão com suporte.

Verificando CONFIG_BPF_JIT:

$ grep CONFIG_BPF_JIT /boot/config-$(uname -r)
CONFIG_BPF_JIT_ALWAYS_ON=y
CONFIG_BPF_JIT=y

✅ Sim, está habilitado.

Verificando FALCO_BPF_PROBE:

{{- if .Values.ebpf.enabled }}
  - name: FALCO_BPF_PROBE
    value: {{ .Values.ebpf.path }}
{{- end }}

✅ Sim, o template se encarrega disso.

Verificando net.core.bpf_jit_enable:

$ sudo sysctl net.core.bpf_jit_enable
net.core.bpf_jit_enable = 1

✅ Sim, está habilitado.

Instalação

O comando abaixo utilizando Helm Chart fará a instalação necessária:

helm repo add falcosecurity https://falcosecurity.github.io/charts
helm repo update
helm install falco falcosecurity/falco --set ebpf.enabled=true

Você pode conferir os objetos criados com:

$ kubectl get all -n falco

Onde você pode incrementar outros parâmetros para habilitar Falcosidekick com WebUI no mesmo Helm Chart:

  ...
  --set falcosidekick.enabled=true \
  --set falcosidekick.webui.enabled=true

Confira os parâmetros disponíveis aqui.

E uma lista de outputs disponíveis para Falcosidekick aqui como Google Cloud Storage, Slack, webhooks etc.

Obs.: você pode usar um manifesto Yaml com parâmetro -f values.yaml se preferir.

Pronto

O que está acontecendo agora?

Você pode fazer um Port Forward para a UI:

kubectl port-forward svc/falco-falcosidekick-ui 2802:2802 -n falco

Feito! Vá ao nevegador: localhost:2802/ui

Então, você verá uma página como essa:

image.png

O conjunto de regras padrão é aplicado. Você pode evoluir a sua configuração como necessário.

ezgif-4-57978f90bc.gif

Se divirta! Obrigado.