Konfigurieren der Kubernetes-Datenebenenhärtung in Defender for Cloud

Kubernetes-Datenebenenhärtung hilft beim Erzwingen sicherer Konfigurationen für Arbeitslasten, die in Ihrem Cluster ausgeführt werden, z. B. das Einschränken privilegierter Container, das Erzwingen von Ressourcenlimits und das Einschränken des Netzwerkzugriffs.

In Microsoft Defender for Cloud wird die Härtung der Datenebene mithilfe von Azure Policy für Kubernetes implementiert, um diese Konfigurationen auszuwerten und zu erzwingen. Azure Policy wird als Teil von Defender für Container bereitgestellt, wenn die automatische Bereitstellung aktiviert ist.

Wenn Azure Policy für Kubernetes in den Defender für Containerplaneinstellungen deaktiviert ist, können Sie sie bereitstellen, indem Sie die entsprechende Empfehlung beheben. Sie können Azure Policy auch manuell bereitstellen, indem Sie Azure CLI oder Helm verwenden, wenn Sie die automatische Bereitstellung während der Aktivierung deaktiviert oder bestimmte Cluster von der automatischen Bereitstellung ausgeschlossen haben.

Nachdem Azure Policy für Kubernetes bereitgestellt wurde, generiert Defender for Cloud Basierend auf Ihrer Clusterkonfiguration Empfehlungen zur Härtung der Datenebene. Auf dieser Seite wird gezeigt, wie Sie diese Empfehlungen überprüfen, Richtlinienparameter konfigurieren und in Ihren Clustern erzwingen.

Voraussetzungen

Stellen Sie zunächst folgendes sicher:

Aktivieren Sie die Azure Policy für Kubernetes, indem Sie Empfehlungen umsetzen

Wenn Azure Policy für Kubernetes nicht bereitgestellt oder in den Einstellungen des Plans 'Defender for Containers' deaktiviert wurde, können Sie sie installieren, indem Sie die entsprechende Empfehlung in Defender for Cloud ausführen.

  1. Melden Sie sich im Azure-Portal an.

  2. Wechseln Sie zu Microsoft Defender for Cloud>Recommendations.

  3. Suchen Sie nach der relevanten Empfehlung:

    • Azure: Azure Kubernetes Service-Cluster sollten das Azure Policy Add-On für Kubernetes installiert haben.
    • GCP: GKE-Cluster sollten die Azure Policy Erweiterung installiert haben.
    • AWS/Arc-enabled Kubernetes: Azure Arc-enabled Kubernetes-Cluster sollten die Azure Policy Erweiterung installiert haben.

    Screenshot mit der Azure Kubernetes-Dienstclusterempfehlung.

  4. Wählen Sie eine Empfehlung aus.

  5. Wählen Sie auf der Registerkarte "Aktion ausführen " die Option "Korrigieren" aus.

    Screenshot einer Empfehlung mit hervorgehobener Schaltfläche

  6. Wählen Sie "Korrigieren" aus, um die ausgewählten Ressourcen zu beheben.

  7. Wiederholen Sie diesen Vorgang für jede Empfehlung.

Empfehlungen zur Härtung der Datenebene

Nachdem Sie Azure Policy für Kubernetes bereitgestellt haben, bewertet Defender for Cloud Ihre Clusterkonfiguration und generiert Empfehlungen für die Datenebenenhärtung. Dieser Vorgang kann bis zu 30 Minuten dauern.

Note

Microsoft Komponenten, z. B. der Defender Sensor, werden standardmäßig im kube-system-Namespace bereitgestellt und sind nicht als nicht konform gekennzeichnet. Komponenten von Drittanbietern, die in anderen Namespaces installiert sind, werden möglicherweise gekennzeichnet. Um bestimmte Namespaces auszuschließen, konfigurieren Sie Azure Richtlinienausschlüsse.

In der folgenden Tabelle sind allgemeine Empfehlungen für die Härtung der Datenebene aufgeführt:

Name der Empfehlung Sicherheitskontrolle Konfiguration erforderlich
Für Container müssen CPU- und Arbeitsspeicherlimits erzwungen werden Anwendungen vor DDoS-Angriffen schützen Ja
Containerimages dürfen nur aus vertrauenswürdigen Registrys bereitgestellt werden Sicherheitsrisiken beheben Ja
Linux-Funktionen mit den niedrigsten Berechtigungen für Container erzwingen Zugriff und Berechtigungen verwalten Ja
Container sollten nur zulässige AppArmor-Profile verwenden Optimieren von Sicherheitskonfigurationen Ja
Dienste dürfen nur an zulässigen Ports lauschen Nicht autorisierten Netzwerkzugriff einschränken Ja
Einschränkung der Nutzung von Host-Netzwerken und -Ports Nicht autorisierten Netzwerkzugriff einschränken Ja
Die Nutzung von HostPath-Volumeneinbindungen in Pods sollte auf eine bekannte Liste beschränkt werden Zugriff und Berechtigungen verwalten Ja
Container mit Rechteausweitung müssen vermieden werden Zugriff und Berechtigungen verwalten No
Container, die sensible Host-Namespaces gemeinsam nutzen, sollten vermieden werden Zugriff und Berechtigungen verwalten No
Unveränderliches (schreibgeschütztes) Stammdateisystem für Container erzwingen Zugriff und Berechtigungen verwalten No
Auf Kubernetes-Cluster sollte nur über HTTPS zugegriffen werden können. Verschlüsseln von Daten während der Übertragung No
Kubernetes-Cluster sollten das automatische Einhängen von API-Anmeldeinformationen deaktivieren Zugriff und Berechtigungen verwalten No
Kubernetes-Cluster sollten nicht den Standardnamespace verwenden Bewährte Sicherheitsmethoden implementieren No
Kubernetes-Cluster sollten nicht CAP_SYS_ADMIN Funktionen gewähren Zugriff und Berechtigungen verwalten No
Privilegierte Container müssen vermieden werden Zugriff und Berechtigungen verwalten No
Das Ausführen von Containern als Root-Benutzer muss vermieden werden Zugriff und Berechtigungen verwalten No

Anzeigen von Empfehlungen für einen Cluster

So zeigen Sie Empfehlungen zur Härtung der Datenebene für einen bestimmten Cluster an:

  1. Melden Sie sich im Azure-Portal an.

  2. Wechseln Sie zu Defender for Cloud>Inventory.

  3. Legen Sie den Ressourcentypfilter auf Kubernetes-Dienst fest und wählen Sie Anwenden.

    Screenshot der Verwendung des Ressourcentypfilters zum Auswählen des Kubernetes-Diensts.

  4. Wählen Sie den relevanten Cluster aus.

  5. Überprüfen Sie die verfügbaren Empfehlungen. Empfehlungen zur Datenebenenhärtung zeigen die Anzahl der betroffenen Kubernetes-Komponenten an.

  6. Wählen Sie eine Empfehlung aus, um betroffene Ressourcen anzuzeigen.

    Screenshot von der Auswahl einer Empfehlung auf der Ressourcenintegritätsseite.

  7. Wählen Sie die Registerkarte "Aktion ausführen " aus, um die Korrekturoptionen zu überprüfen.

    Screenshot der Registerkarte

Konfigurieren von Richtlinienparametern

Einige Empfehlungen erfordern eine effektive Parameterkonfiguration. Die Empfehlung Container-Images sollten nur aus vertrauenswürdigen Registern bereitgestellt werden erfordert, dass Sie eine Liste der vertrauenswürdigen Register definieren.

Wenn erforderliche Parameter nicht konfiguriert sind, werden Ressourcen als nicht betriebsbereit angezeigt.

So konfigurieren Sie Richtlinienparameter:

  1. Melden Sie sich im Azure-Portal an.

  2. Wechseln Sie zu Microsoft Defender for Cloud>Umgebungseinstellungen.

  3. Wählen Sie das relevante Abonnement aus.

  4. Wählen Sie Sicherheitsrichtlinien aus.

    Screenshot der Seite

  5. Wählen Sie auf der Registerkarte "Standards " den relevanten Sicherheitsstandard aus.

  6. Wählen Sie das 3-Punkt-Menü der relevanten Richtlinienzuweisung und dann " Effekt und Parameter verwalten" aus.

    Screenshot der Auswahl des 3-Punkt-Menüs und anschließender Option

  7. Aktualisieren Sie die erforderlichen Parameterwerte.

    Screenshot des Bereichs

  8. Wählen Sie Speichern aus.

Richtlinien für die Härtung auf Datenebene durchsetzen

Standardmäßig bewerten Richtlinien Ressourcen im Überwachungsmodus. Um eine Richtlinie zu erzwingen, legen Sie den Effekt auf "Verweigern" fest.

So erzwingen Sie eine Empfehlung:

  1. Melden Sie sich im Azure-Portal an.

  2. Wechseln Sie zu Microsoft Defender for Cloud>Recommendations.

  3. Suchen und wählen Sie die relevante Empfehlung für die Härtung der Datenebene aus.

  4. Wählen Sie auf der Registerkarte " Aktion ausführen " die Option "Ablehnen" aus.

    Screenshot mit der Option

  5. Legen Sie den Bereich fest.

  6. Wählen Sie "Ändern" aus, um zu verweigern.

Test der Durchsetzung von Richtlinien

Sie können Richtlinien zur Härtung von Datenebenen überprüfen, indem Sie Testworkloads bereitstellen.

  • Eine konforme Bereitstellung, die die Anforderungen an die Härtung der Datenebene erfüllt
  • Eine nicht kompatible Bereitstellung, die gegen mehrere Richtlinien verstößt

Stellen Sie das folgende Beispiel für YAML-Dateien bereit, um zu überprüfen, ob kompatible Workloads erfolgreich bereitgestellt werden und nicht kompatible Workloads je nach Richtlinienerzwingungseinstellungen gekennzeichnet oder blockiert werden.

Beispiel für die kompatible Bereitstellung

apiVersion: apps/v1
kind: Deployment
metadata:
  name: redis-healthy-deployment
  labels:
    app: redis
spec:
  replicas: 3
  selector:
    matchLabels:
      app: redis
  template:
    metadata:
      labels:
        app: redis
      annotations:
        container.apparmor.security.beta.kubernetes.io/redis: runtime/default
    spec:
      containers:
      - name: redis
        image: <customer-registry>.azurecr.io/redis:latest
        ports:
        - containerPort: 80
        resources:
          limits:
            cpu: 100m
            memory: 250Mi
        securityContext:
          privileged: false
          readOnlyRootFilesystem: true
          allowPrivilegeEscalation: false
          runAsNonRoot: true
          runAsUser: 1000
---
apiVersion: v1
kind: Service
metadata:
  name: redis-healthy-service
spec:
  type: LoadBalancer
  selector:
    app: redis
  ports:
  - port: 80
    targetPort: 80

Beispiel für eine nicht kompatible Bereitstellung

apiVersion: apps/v1
kind: Deployment
metadata:
  name: redis-unhealthy-deployment
  labels:
    app: redis
spec:
  replicas: 3
  selector:
    matchLabels:
      app: redis
  template:
    metadata:      
      labels:
        app: redis
    spec:
      hostNetwork: true
      hostPID: true 
      hostIPC: true
      containers:
      - name: redis
        image: redis:latest
        ports:
        - containerPort: 9001
          hostPort: 9001
        securityContext:
          privileged: true
          readOnlyRootFilesystem: false
          allowPrivilegeEscalation: true
          runAsUser: 0
          capabilities:
            add:
              - NET_ADMIN
        volumeMounts:
        - mountPath: /test-pd
          name: test-volume
          readOnly: true
      volumes:
      - name: test-volume
        hostPath:
          # directory location on host
          path: /tmp
---
apiVersion: v1
kind: Service
metadata:
  name: redis-unhealthy-service
spec:
  type: LoadBalancer
  selector:
    app: redis
  ports:
  - port: 6001
    targetPort: 9001

Weitere Informationen

Nächster Schritt