InfraFenceInfraFence

Live Security Operations

Loslegen

Kubernetes

Jeden Knoten eines Kubernetes-Clusters mit dem InfraFence-Helm-Chart und einem Cluster-Schlüssel schützen: Installation, Values, Upgrades, GitOps und was das Chart bereitstellt.

Zuletzt aktualisiert:

Das Helm-Chart betreibt den Agenten als DaemonSet: ein Agent auf jedem Knoten, Control Plane eingeschlossen. Jeder Knoten registriert sich im Dashboard als eigener Server.

Voraussetzungen: Kubernetes 1.22 oder neuer und Helm 3.

Einen Cluster-Schlüssel erstellen

Im Dashboard unter Einstellungen › Kubernetes › Cluster-Schlüssel erstellen (Inhaber und Administratoren). Anders als ein Installations-Token registriert ein Cluster-Schlüssel jeden Knoten des Clusters. Er beginnt mit IFK- und wird nur einmal angezeigt: Kopiere ihn sofort. Danach zeigt die Liste nur seine letzten vier Zeichen.

Wird ein Schlüssel widerrufen, können keine neuen Knoten mehr damit beitreten; bereits registrierte Knoten arbeiten weiter. Mit Starter kann sich nur ein Knoten registrieren, da Starter einen Server abdeckt; Basic und höher haben kein Limit und rechnen einen Server pro Knoten ab.

Installieren

bash
helm install infrafence-agent oci://ghcr.io/infrafence/charts/infrafence-agent \
  --namespace infrafence --create-namespace \
  --set apiKey="IFK-..." \
  --set clusterName="production"

Das Dashboard zeigt denselben Befehl mit deinem Schlüssel und deinem Clusternamen bereits eingesetzt.

Upgrade und Deinstallation

bash
helm upgrade infrafence-agent oci://ghcr.io/infrafence/charts/infrafence-agent \
  --namespace infrafence --reuse-values
bash
helm uninstall infrafence-agent --namespace infrafence

Ein Knoten, der sich erneut registriert (ein neu aufgebauter Knoten oder ein geleertes /etc/infrafence), behält seinen Server im Dashboard und bekommt ein neues Token.

Values

Value Standard Bedeutung
apiKey "" (Pflicht) Der Cluster-Schlüssel. Wird in einem Secret gespeichert.
serverUrl https://infrafence.com Das Dashboard.
clusterName "" Die Knoten werden im Dashboard danach gruppiert; ist er leer, wird er aus dem Cluster ermittelt.
image.repository ghcr.io/infrafence/infrafence-agent Das Image des Agenten.
image.tag "" Die appVersion des Charts, wenn leer.
image.pullPolicy Always
autoUpdate.enabled true Erlaubt dem Agenten, sein eigenes DaemonSet zu aktualisieren. Bei GitOps ausschalten.
ingressFirewall.enabled false RBAC zum Blockieren von Adressen in der ConfigMap von nginx-ingress.
ingressFirewall.namespace ingress-nginx Wo nginx-ingress läuft.
ingressFirewall.configMapName ingress-nginx-controller Seine ConfigMap.
resources requests 50m CPU, 64Mi; limits 500m CPU, 256Mi
tolerations [{operator: Exists}] Jeder Knoten, Control Plane eingeschlossen.
nodeSelector {}
priorityClassName ""
extraEnv [] Weitere Umgebungsvariablen, zum Beispiel WEB_LOG_PATH.
serviceAccount.create true Außerdem serviceAccount.name und serviceAccount.annotations.

Updates und GitOps

Mit autoUpdate.enabled prüft ein Agent, der aktualisieren darf (die Einstellung Agent-Updates steht auf Automatisch installieren, oder du hast Jetzt installieren gewählt), die cosign-Signatur des neuen Release-Images und stellt sein DaemonSet per Digest auf dieses Image um. Wenn ArgoCD oder Flux den Cluster verwaltet, schalte das aus und erhöhe stattdessen das Image-Tag in deinem Repository:

yaml
autoUpdate:
  enabled: false

Was das Chart bereitstellt

  • ein DaemonSet mit Host-Netzwerk, dem PID-Namespace des Hosts und privilegierten Pods, Knoten für Knoten ausgerollt;
  • einen ServiceAccount mit Lesezugriff auf die Kubernetes-API, plus dem Recht, sein eigenes DaemonSet für Updates zu patchen;
  • ein Secret mit dem Cluster-Schlüssel;
  • mit ingressFirewall.enabled eine Role, die die ConfigMap des Ingress schreiben kann.

Host-Mounts: /var/log (schreibgeschützt), die Sockets von Docker und containerd (schreibgeschützt) und /etc/infrafence (Lesen und Schreiben, die Registrierung des Knotens).

Ingress-Controller

Sperren wirken an der Firewall des Knotens, unabhängig vom Ingress-Controller. Für die Erkennung von Web-Angriffen braucht der Agent die Zugriffslogs: Bei Traefik schalte dessen Zugriffslogs ein.