Freigeben über


Härten Sie Ihre Kubernetes-Datenebene

Auf dieser Seite wird beschrieben, wie Sie die Sicherheitsempfehlungen von Microsoft Defender für Cloud zum Härten der Kubernetes-Datenebene umsetzen.

Tipp

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

Einrichten des Workloadschutzes

Microsoft Defender for Cloud bietet eine Reihe von Empfehlungen, die verfügbar sind, sobald Sie die Azure Policy für Kubernetes installieren.

Voraussetzungen

Aktivieren der Härtung der Kubernetes-Datenebene

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

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

Hinweis

Wenn Sie diese Einstellung aktivieren, werden die Azure Policy für Kubernetes-Pods im 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 für den Cluster selbst hinzufügen muss.

Aktivieren für Azure-Abonnements oder lokal

Wenn Sie Microsoft Defender for Containers aktivieren, ist die Einstellung „Azure Policy für Kubernetes“ standardmäßig für den Azure Kubernetes Service und für Kubernetes-Cluster mit Azure Arc-Unterstützung im entsprechenden Abonnement aktiviert. Wenn Sie die Einstellung bei der Erstkonfiguration deaktivieren, können Sie sie anschließend manuell aktivieren.

Wenn Sie die Einstellungen „Azure Policy für Kubernetes“ unter dem Containerplan deaktiviert haben, können Sie die folgenden Schritte ausführen, um sie für alle Cluster in Ihrem Abonnement zu aktivieren:

  1. Melden Sie sich beim Azure-Portal an.

  2. Navigieren Sie zu Microsoft Defender für Cloud>Umgebungseinstellungen.

  3. Wählen Sie das relevante Abonnement aus.

  4. Stellen Sie auf der Seite „Defender-Pläne“ sicher, dass „Container“ auf Ein umgeschaltet ist.

  5. Wählen Sie Settingsaus.

    Screenshot, der die Einstellungsschaltfläche im Defender-Plan zeigt.

  6. Schalten Sie auf der Seite Einstellungen und Überwachung die Option „Azure Policy für Kubernetes“ auf An.

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

Aktivieren für GCP-Projekte

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

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

Bereitstellen von Azure Policy for Kubernetes in vorhandenen Clustern

Sie können Azure Policy for Kubernetes in 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 ist es nicht möglich, das Onboarding im großen Maßstab mit dem Connector durchzuführen, aber er kann auf allen vorhandenen Clustern oder auf bestimmten Clustern mit der Empfehlung Auf Azure Arc-fähigen Kubernetes-Clustern sollte die Azure-Richtlinienerweiterung für die Kubernetes-Erweiterung installiert sein installiert werden.

Bereitstellen der Azure Policy for Kubernetes-Empfehlung in bestimmten Clustern:

  1. Suchen Sie auf der Seite „Empfehlungen“ 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 lokal - "Azure Arc-enabled Kubernetes clusters should have the Azure policy extension for Kubernetes extension installed". Screenshot, der die Empfehlung für Azure Kubernetes-Dienstcluster zeigt.

      Tipp

      Die Empfehlung ist in verschiedenen Sicherheitssteuerelementen enthalten, und es spielt keine Rolle, welche Sie im nächsten Schritt auswählen.

  2. Wählen Sie die Empfehlung in einer der Sicherheitskontrollen aus, um die Ressourcen anzuzeigen, in denen Sie das Add-On installieren können.

  3. Wählen Sie den entsprechenden Cluster und dann Korrigieren aus.

    Screenshot: Auswählen des zu korrigierenden Clusters.

Anzeigen und Konfigurieren des Empfehlungspakets

Ungefähr 30 Minuten nach Abschluss der Installation von Azure Policy for Kubernetes zeigt Defender for Cloud den Integritätsstatus der Cluster für die folgenden Empfehlungen an (jeweils im relevanten Sicherheitssteuerelement):

Hinweis

Wenn Sie Azure Policy for Kubernetes zum ersten Mal installieren, werden diese Empfehlungen in der zugehörigen Liste als neue Ergänzungen angezeigt.

Tipp

Einige Empfehlungen weisen Parameter auf, die über Azure Policy angepasst werden müssen, damit sie effektiv verwendet werden können. Um beispielsweise von der Empfehlung Containerimages sollten nur von vertrauenswürdigen Registrierungen bereitgestellt werden zu profitieren, müssen Sie Ihre vertrauenswürdigen Registrierungen 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 und der Azure Monitor-Agent (AMA) werden standardmäßig im kube-system-Namespace bereitgestellt. Dieses Setup stellt sicher, dass sie in den Empfehlungen zur Datenebene nicht als nicht konform gekennzeichnet werden. Drittanbietertools, die in einem anderen Namespace installiert sind, können jedoch als nicht konform gekennzeichnet werden. 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
Containerimages sollten nur von vertrauenswürdigen Registrierungen 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
Verwendung von Hostnetzwerken und -ports einschränken Nicht autorisierten Netzwerkzugriff einschränken Ja
Verwendung von HostPath-Volumeeinbindungen von Pods auf eine bekannte Liste beschränken Zugriff und Berechtigungen verwalten Ja
Container mit Rechteausweitung müssen vermieden werden Zugriff und Berechtigungen verwalten Nein
Container mit Freigabe sensibler Hostnamespaces vermeiden 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
Für Kubernetes-Cluster muss die automatische Bereitstellung von API-Anmeldeinformationen deaktiviert werden Zugriff und Berechtigungen verwalten Nein
Kubernetes-Cluster dürfen 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 Azure-Portal an.

  2. Navigieren Sie zu Microsoft Defender für Cloud>Umgebungseinstellungen.

  3. Wählen Sie das relevante Abonnement aus.

  4. Wählen Sie im Menü von Defender für Cloud die Option Sicherheitsrichtlinie aus.

  5. Wählen Sie die entsprechende Zuweisung aus. Die Standardzuweisung ist ASC default.

  6. Öffnen Sie die Registerkarte Parameter, und ändern Sie die Werte nach Bedarf.

    Screenshot: Ändern der Parameter für eine der Empfehlungen im Schutzpaket zum Härten der Kubernetes-Datenebene.

  7. Klicken Sie auf Überprüfen + speichern.

  8. 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 der Option „Ablehnen“ für Azure Policy-Parameter.

    Der Bereich zum Festlegen des Umfangs wird geöffnet.

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

So zeigen Sie die Empfehlungen an, die Ihre Cluster betreffen

  1. Öffnen Sie die Seite Ressourcenbestand von Defender for Cloud, und legen Sie den Ressourcentypfilter Kubernetes-Dienste fest.

  2. Wählen Sie einen Cluster aus, um die für diesen verfügbaren Empfehlungen zu untersuchen und zu überprüfen.

Wenn Sie eine Empfehlung für den Workloadschutz anzeigen, sehen Sie neben dem Cluster auch die Anzahl der betroffenen Pods („Kubernetes-Komponenten“). Wählen Sie den Cluster und dann Aktion ausführen aus, um eine Liste mit den jeweiligen Pods auszuwählen.

Screenshot: Anzeigen der betroffenen Pods für eine Kubernetes-Empfehlung.

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

  • Eine ist eine fehlerfreie 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: