Freigeben über


Schützen Sie Ihre Kubernetes-Datenebene durch Härtung.

Auf dieser Seite wird beschrieben, wie Sie die Sicherheitsempfehlungen von Microsoft Defender for Cloud verwenden, die der Härtung der Kubernetes-Datenebene gewidmet sind.

Tipp

Eine Liste der Sicherheitsempfehlungen, die für Kubernetes-Cluster und Knoten angezeigt werden können, finden Sie unter "Containerempfehlungen".

Richten Sie Ihren Arbeitslastschutz ein

Microsoft Defender for Cloud enthält ein Bündel von Empfehlungen, die verfügbar sind, nachdem Sie die Azure Policy für Kubernetes installiert haben.

Voraussetzungen

Aktivieren der Härtung der Kubernetes-Datenebene

Sie können die Azure Policy für Kubernetes auf eine von zwei Arten aktivieren:

Aktivieren von Azure Policy für Kubernetes für alle aktuellen und zukünftigen Cluster mithilfe von Plan-/Connectoreinstellungen

Hinweis

Wenn Sie diese Einstellung aktivieren, werden die Azure Policy für Kubernetes-Pods auf dem Cluster installiert. Dadurch wird eine kleine Menge an CPU und Arbeitsspeicher zugeordnet, die die Pods verwenden können. Diese Zuordnung kann die maximale Kapazität erreichen, wirkt sich aber nicht auf den Rest der CPU und des Arbeitsspeichers der Ressource aus.

Hinweis

Die Aktivierung für AWS über den Connector wird aufgrund einer Einschränkung in EKS nicht unterstützt, die erfordert, dass der Clusteradministrator Berechtigungen für eine neue IAM-Rolle auf dem Cluster selbst hinzusetzt.

Aktivieren für Azure Abonnements oder lokal

Wenn Sie Microsoft Defender für Container aktivieren, ist die Einstellung "Azure Policy für Kubernetes" standardmäßig für die Azure Kubernetes Service und für Azure Arc-fähige Kubernetes-Cluster im entsprechenden Abonnement aktiviert. Wenn Sie die Einstellung bei der Erstkonfiguration deaktivieren, können Sie sie anschließend manuell aktivieren.

Wenn Sie die Einstellungen für "Azure Policy für Kubernetes" unter dem Containerplan deaktiviert haben, können Sie die Schritte ausführen, um sie in allen Clustern in Ihrem Abonnement zu aktivieren:

  1. Melden Sie sich beim portal Azure an.

  2. Wechseln Sie zu Microsoft Defender for Cloud>Management>Environment settings.

  3. Wählen Sie das relevante Abonnement aus.

  4. Stellen Sie auf der Seite Defender-Pläne sicher, dass Containers auf On eingeschaltet ist.

  5. Wählen Sie Settingsaus.

    Screenshot mit der Schaltfläche

  6. In der Seite "Einstellungen und Überwachung" schalten Sie die Azure-Richtlinie für Kubernetes auf Ein.

    Screenshot: Umschaltflächen zum Aktivieren bzw. Deaktivieren der Erweiterungen.

Aktivieren für GCP-Projekte

Wenn Sie Microsoft Defender für Container auf einem GCP-Connector aktivieren, ist die Einstellung "Azure Policy Erweiterung für Azure Arc" standardmäßig für das Google Kubernetes-Modul im entsprechenden Projekt aktiviert. Wenn Sie die Einstellung bei der Erstkonfiguration deaktivieren, können Sie sie anschließend manuell aktivieren.

Wenn Sie die Einstellungen für "Azure Policy Erweiterung für Azure Arc" unter dem GCP-Connector deaktiviert haben, können Sie die folgenden Schritte ausführen, um sie auf Ihrem GCP-Connector zu aktivieren.

Bereitstellen von Azure Policy für Kubernetes auf vorhandenen Clustern

Sie können die Azure Policy für Kubernetes auf vorhandenen Kubernetes-Clustern über die Seite "Empfehlungen" manuell konfigurieren. Nach der Aktivierung wird die Härtungsempfehlung verfügbar (einige der Empfehlungen erfordern eine andere Konfiguration, damit sie funktionieren).

Hinweis

Für AWS wird die Integration in großem Umfang über den Connector nicht unterstützt. Sie können jedoch Azure Policy für Kubernetes auf allen vorhandenen Clustern oder auf bestimmten Clustern installieren, indem Sie die Empfehlung Azure Arc-enabled Kubernetes clusters should have the Azure policy extension for Kubernetes extension installed verwenden.

Zu Bereitstellen der Azure Policy für Kubernetes in angegebenen Clustern:

  1. Melden Sie sich beim portal Azure an.

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

  3. Suchen Sie nach der relevanten Empfehlung:

    • Azure -"Azure Kubernetes Service clusters should have the Azure Policy add-on for Kubernetes installed"
    • GCP - "GKE clusters should have the Azure Policy extension".
    • AWS und On-Premises - "Azure Arc-enabled Kubernetes clusters should have the Azure policy extension for Kubernetes extension installed".

    Screenshot mit der Azure Kubernetes-Dienstclusterempfehlung.

  4. Wählen Sie eine gefundene Empfehlung aus.

  5. Wählen Sie Korrigieren aus.

    Screenshot einer Empfehlung mit hervorgehobener Schaltfläche

  6. Wiederholen Sie diesen Vorgang für jede weitere Empfehlung.

Anzeigen und Konfigurieren des Empfehlungspakets

Ungefähr 30 Minuten nach dem Abschluss der Installation der Azure Policy für Kubernetes zeigt Defender for Cloud den Integritätsstatus der Cluster für die folgenden Empfehlungen an, die jeweils in der entsprechenden Sicherheitskontrolle angezeigt werden.

Hinweis

Wenn Sie das Azure Policy für Kubernetes zum ersten Mal installieren, werden diese Empfehlungen in der Liste der Empfehlungen als neue Ergänzungen angezeigt.

Tipp

Einige Empfehlungen verfügen über Parameter, die über Azure Policy angepasst werden müssen, um sie effektiv zu nutzen. Um beispielsweise von der Empfehlung, dass Container-Images nur aus vertrauenswürdigen Registries bereitgestellt werden sollten, zu profitieren, müssen Sie Ihre vertrauenswürdigen Registries definieren. Wenn Sie die erforderlichen Parameter für die Empfehlungen, die konfiguriert werden müssen, nicht eingeben, werden Ihre Workloads als fehlerhaft angezeigt.

Hinweis

Microsoft Komponenten wie der Defender Sensor werden standardmäßig im Kube-System-Namespace bereitgestellt. Durch diese Einrichtung wird sichergestellt, dass sie in Datenebenenempfehlungen nicht als nicht konform gekennzeichnet sind. Drittanbietertools, die in einem anderen Namespace installiert sind, werden jedoch möglicherweise als nicht konform gekennzeichnet. Um Drittanbieter von diesen Empfehlungen auszuschließen, können Sie ihren Namespace der Ausschlussliste hinzufügen.

Name der Empfehlung Sicherheitskontrolle Konfiguration erforderlich
Für Container müssen CPU- und Arbeitsspeicherlimits erzwungen werden Anwendungen vor DDoS-Angriffen schützen Ja
Container-Images sollten nur von vertrauenswürdigen Registries 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 Nein
Container, die sensible Host-Namespaces gemeinsam nutzen, sollten vermieden werden Zugriff und Berechtigungen verwalten Nein
Unveränderliches (schreibgeschütztes) Stammdateisystem für Container erzwingen Zugriff und Berechtigungen verwalten Nein
Auf Kubernetes-Cluster sollte nur über HTTPS zugegriffen werden können Verschlüsseln von Daten während der Übertragung Nein
Kubernetes-Cluster sollten das automatische Einhängen von API-Anmeldeinformationen deaktivieren Zugriff und Berechtigungen verwalten Nein
Kubernetes-Cluster sollten nicht den Standardnamespace verwenden Bewährte Sicherheitsmethoden implementieren Nein
Kubernetes-Cluster sollten keine CAPSYSADMIN-Sicherheitsfunktionen gewähren Zugriff und Berechtigungen verwalten Nein
Privilegierte Container müssen vermieden werden Zugriff und Berechtigungen verwalten Nein
Das Ausführen von Containern als Root-Benutzer muss vermieden werden Zugriff und Berechtigungen verwalten Nein

Bei Empfehlungen, die dies erfordern, müssen Sie die Parameter anpassen:

So legen Sie die Parameter fest

  1. Melden Sie sich beim portal Azure an.

  2. Wechseln Sie zu Microsoft Defender for Cloud>Management>Environment settings.

  3. Wählen Sie das relevante Abonnement aus.

  4. Wählen Sie im Navigationsmenü "Sicherheitsrichtlinien" aus.

    Screenshot der Seite

  5. Suchen Sie auf der Registerkarte "Standards " nach dem entsprechenden Sicherheitsstandard.

  6. Wählen Sie das 3-Punkt-Menü des Sicherheitsstandard aus, und wählen Sie "Verwalten" aus.

    Screenshot der Auswahl von

  7. 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

  8. Ändern Sie die Werte nach Bedarf.

    Screenshot des Bereichs

  9. Wählen Sie Speichern aus.

So erzwingen Sie eine der Empfehlungen

  1. Öffnen Sie die Seite mit den Details zur Empfehlung, und wählen Sie Ablehnen aus:

    Screenshot mit der Option

    Der Bereich zum Festlegen des Umfangs wird geöffnet.

  2. Legen Sie den Umfang fest, und wählen Sie Ändern in „Ablehnen“.

Welche Empfehlungen für Ihre Cluster gelten

  1. Melden Sie sich beim portal Azure an.

  2. Wechseln Sie zu Defender for Cloud>Inventory.

  3. Legen Sie den Ressourcentypfilter auf Kubernetes-Dienste fest, und wählen Sie Übernehmen aus.

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

  4. Wählen Sie einen Cluster aus, der untersucht werden soll.

  5. Überprüfen Sie die verfügbaren Empfehlungen dafür. Wenn Sie eine Empfehlung aus dem Workload-Schutz-Set anzeigen, wird neben dem Cluster auch die Anzahl der betroffenen Pods („Kubernetes-Komponenten“) aufgeführt.

  6. Optional: Wählen Sie für eine Liste der spezifischen Pods die Empfehlung aus.

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

  7. und wählen Sie dann "Aktion ausführen" aus.

Screenshot, der zeigt, wo man die betroffenen Pods für eine Kubernetes-Empfehlung ansehen kann.

Um die Erzwingung zu testen, verwenden Sie die folgenden beiden Kubernetes-Bereitstellungen:

  • Einer ist für eine gesunde Bereitstellung, die mit den Empfehlungen zum Workloadschutz konform ist.

  • Die andere stellt eine fehlerhafte Bereitstellung dar, die mit keiner der Empfehlungen konform ist.

Stellen Sie die YAML-Beispieldateien unverändert bereit, oder verwenden Sie sie als Referenz zum Korrigieren Ihrer eigenen Workload.

YAML-Dateibeispiel einer fehlerfreien 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

YAML-Dateibeispiel einer fehlerhaften 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

Nächste Schritte

In diesem Artikel haben Sie erfahren, wie Sie das Härten der Kubernetes-Datenebene konfigurieren.

Verwandte Informationen finden Sie auf den folgenden Seiten: