Verwenden von Kubeaudit für die Auditierung von Kubernetes-Clustern

Mit dem Befehlszeilentool Kubeaudit können Sie Kubernetes-Cluster auf diverse Sicherheitsbedenken überprüfen.

Kubeaudit generiert Ergebnisse, die in drei Ebenen für den Schweregrad unterteilt sind:
  • Fehler: Ein Sicherheitsproblem oder eine ungültige Kubernetes-Konfiguration
  • Warnung: Eine Best-Practice-Empfehlung
  • Info: Dient der Information, keine Handlung erforderlich. Dabei sind auch Ergebnisse enthalten, die überschrieben wurden.

Weitere Informationen zu allen Kubeaudit-Befehlszeilen- und Verwendungsoptionen finden Sie in der Kubeaudit-Dockumentation, die in der GitHub Shopify/Kubeaudit-Bibliothek verfügbar ist.

Führen Sie Kubeaudit mit dem Code-Block unten aus, um die Datei ./config/controller/deployment.yaml Ihres vollständigen Kubernetes-Inventarisierungsagenten von Flexera zu untersuchen.

apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    krm.flexera.com/component: controller
  name: krm-controller
spec:
  replicas: 1
  selector:
    matchLabels:
      krm.flexera.com/component: controller
  template:
    metadata:
      labels:
        krm.flexera.com/component: controller
      annotations:
        container.apparmor.security.beta.kubernetes.io/controller: unconfined
    spec:
      serviceAccountName: controller
      containers:
        - name: controller
          args:
            - controller
          image: public.ecr.aws/flexera/krm:1.7.2
          env:
            - name: POD_NAME
              valueFrom:
                fieldRef:
                  fieldPath: metadata.name
            - name: POD_NAMESPACE
              valueFrom:
                fieldRef:
                  fieldPath: metadata.namespace
          resources:
            requests:
              memory: "128Mi"
              cpu: "250m"
            limits:
              memory: "512Mi"
              cpu: "500m"
          securityContext:
            allowPrivilegeEscalation: false
            capabilities:
              drop:
                - ALL
            privileged: false
            readOnlyRootFilesystem: true
            runAsNonRoot: false
      securityContext:
        seccompProfile:
          type: RuntimeDefault
  strategy: {}

Warnungen und Fehler

Wenn Sie Kubeaudit mit den folgenden Parametern verwenden, erhalten Sie Fehler und Warnungen, um die Sie sich kümmern können: $ kubeaudit all -f ./config/controller/deployment.yaml

Derzeit gibt es die folgenden Warnungen und Fehler für den vollständigen Kubernetes-Inventarisierungsagenten von Flexera:

[WARNING]: kubernetes.io for override labels will soon be deprecated. Please, update them to use kubeaudit.io instead.
---------------- Results for ---------------
apiVersion: apps/v1
kind: Deployment
metadata:
name: krm-controller
--------------------------------------------
-- [error] AppArmorDisabled
Message: AppArmor is disabled. Die apparmor-Annotation sollte auf 'runtime/default' gesetzt werden oder mit 'localhost/‘ beginnen.
Metadata:
Annotation: container.apparmor.security.beta.kubernetes.io/controller
AnnotationValue: unconfined
Container: controller
                
-- [error] RunAsNonRootCSCFalse
Message: runAsNonRoot is set to false in the container SecurityContext. Setzen Sie dies entweder auf „true“ oder setzen Sie runAsUser auf einen Wert > 0.
Metadata:
Container: controller
Anmerkung: spec.template.spec.containers.securityContext.runAsNonRoot: false ist für den Betrieb des vollständigen Kubernetes-Inventarisierungsagenten von Flexera erforderlich, daher wird der Fehler RunAsNonRootCSCFalse erwartet.
Der vollständige Flexera-Kubernetes-Inventarisierungsagent muss mit Root-Zugriff ausgeführt werden. Ohne Root-Zugriff ist Folgendes der Fall:
  • Das ndtrack-Modul ist nicht in der Lage, Hardware-Inventar von Worker-Knoten korrekt zu erfassen.
  • Andere Standardprozesse des Agenten erwarten Root-Berechtigungen und arbeiten u. U. nicht korrekt.
  • ndtrack.sh kann bei der Injektion in die Container nicht als Root ausgeführt werden und arbeitet möglicherweise nicht korrekt.
Anmerkung: spec.template.metadata.annotations.container.apparmor.security.beta.kubernetes.io/controller: unconfined ist standardmäßig erforderlich, kann jedoch je nach den Sicherheitseinstellungen des Clusters möglicherweise geändert werden, siehe Restrict a Container's Access to Resources with AppArmor (Den Zugriff eines Containers auf Ressourcen mit AppArmor einschränken) in der Online-Dokumentation von Kubernetes.