# Implantando Falco no GKE

## Contexto


![image.png](https://cdn.hashnode.com/res/hashnode/image/upload/v1651870739036/XZ2lMZxPw.png align="left")

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: https://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:
```bash
$ uname -r
5.4.170+
``` 
✅ Bom! É uma versão com suporte.

Verificando `CONFIG_BPF_JIT`:
```bash
$ 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`:
```yaml
{{- 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`:
```bash
$ 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:
```bash
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:
```bash
$ kubectl get all -n falco
```

Onde você pode incrementar outros parâmetros para habilitar **Falcosidekick** com **WebUI** no mesmo Helm Chart:
```bash
  ...
  --set falcosidekick.enabled=true \
  --set falcosidekick.webui.enabled=true
```

Confira [os parâmetros disponíveis aqui](https://github.com/falcosecurity/charts/tree/master/falco).

E uma lista de outputs disponíveis [para Falcosidekick aqui](https://github.com/falcosecurity/charts/tree/master/falcosidekick) 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:
```bash
kubectl port-forward svc/falco-falcosidekick-ui 2802:2802 -n falco
```

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

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

![image.png](https://cdn.hashnode.com/res/hashnode/image/upload/v1652134626283/I0wsTuHWs.png align="left")

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

![ezgif-4-57978f90bc.gif](https://cdn.hashnode.com/res/hashnode/image/upload/v1652137773902/dk6a7XFjz.gif align="left")

Se divirta! Obrigado.
