Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
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 Defender for Cloud implementieren Sie Data Plane Hardening, indem Sie die Azure Policy for Kubernetes verwenden, um diese Konfigurationen zu evaluieren und durchzusetzen. Microsoft Defender for Containers bereitet die Azure Policy automatisch aus, wenn Sie die automatische Bereitstellung aktivieren.
Wenn Sie Azure Policy für Kubernetes in den Einstellungen des Defender for Containers-Plans deaktivieren, können Sie sie bereitstellen, indem Sie die entsprechende Empfehlung umsetzen. Sie können die Azure Policy auch manuell bereitstellen, indem Sie die Azure CLI verwenden, um Defender für Container-Komponenten bereitzustellen, oder Helm, um Defender für Container-Komponenten bereitzustellen, wenn Sie die automatische Bereitstellung während der Enablement deaktivieren oder bestimmte Cluster von der automatischen Bereitstellung ausschließen.
Nachdem Sie Azure Policy for Kubernetes bereitgestellt haben, generiert Defender for Cloud Empfehlungen zur Data Plane Hardening basierend auf Ihrer Clusterkonfiguration. Sie können diese Empfehlungen überprüfen, Richtlinienparameter konfigurieren und sie auf Ihren Clustern durchsetzen.
Voraussetzungen
Stellen Sie zunächst sicher, dass Sie:
Füge die erforderlichen FQDN-/Anwendungsregeln für die Azure-Richtlinie hinzu.
(Für Nicht-AKS-Cluster) Verbinde deinen Kubernetes-Cluster mit Azure Arc.
Aktivieren Sie die Azure Policy für Kubernetes, indem Sie Empfehlungen umsetzen
Wenn du die Azure Policy for Kubernetes nicht bereitgestellt oder sie in den Planeinstellungen von Defender for Containers deaktiviert hast, installiere sie, indem du die Empfehlung, die deinem Clustertyp entspricht, in Defender for Cloud korrigierst.
Melden Sie sich im Azure-Portal an.
Wechseln Sie zu Microsoft Defender for Cloud>Recommendations.
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-fähiges Kubernetes: Azure Arc-fähige Kubernetes-Cluster sollten die Azure Policy-Erweiterung installiert haben
Wählen Sie eine Empfehlung aus.
Wählen Sie auf der Registerkarte "Aktion ausführen " die Option "Korrigieren" aus.
Wählen Sie "Korrigieren" aus, um die ausgewählten Ressourcen zu beheben.
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:
Melden Sie sich im Azure-Portal an.
Wechseln Sie zu Defender for Cloud>Inventory.
Legen Sie den Ressourcentypfilter auf Kubernetes-Dienst fest und wählen Sie Anwenden.
Wählen Sie den relevanten Cluster aus.
Überprüfen Sie die verfügbaren Empfehlungen. Empfehlungen zur Datenebenenhärtung zeigen die Anzahl der betroffenen Kubernetes-Komponenten an.
Wählen Sie eine Empfehlung aus, um betroffene Ressourcen anzuzeigen.
Wählen Sie Maßnahme ergreifen aus, um die Abhilfeoptionen zu prüfen.
Konfigurieren von Richtlinienparametern
Einige Empfehlungen enthalten Parameter, die die von der zugrunde liegenden Azure Policy bewerteten Kubernetes-Ressourcen begrenzen. Zum Beispiel sollte die Richtlinie für ein unveränderliches (nur lesbares) Root-Dateisystem für Container durchgesetzt werden , einschließlich der excludedContainers, excludedImages, und excludedNamespaces Parameter.
Containerausschlüsse entsprechen den Containernamen. Bildausschlüsse unterstützen Präfixabgleich, wenn der Wert auf *endet, wie zum Beispiel myregistry.azurecr.io/istio:*. Verwenden Sie einen vollständig qualifizierten Bildnamen, um zu vermeiden, dass ein Bild unbeabsichtigt aus einem nicht vertrauenswürdigen Register ausgeschlossen wird.
Andere Empfehlungen erfordern eine Parameterkonfiguration, um effektiv zu sein. 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:
Melden Sie sich im Azure-Portal an.
Wechseln Sie zu Microsoft Defender for Cloud>Umgebungseinstellungen.
Wählen Sie das relevante Abonnement aus.
Wählen Sie Sicherheitsrichtlinien aus.
Wählen Sie auf der Registerkarte "Standards " den relevanten Sicherheitsstandard aus.
Wählen Sie das Dreipunktmenü der entsprechenden Richtlinienzuweisung aus, und wählen Sie Effekt und Parameter verwalten aus.
Aktualisieren Sie die erforderlichen Parameterwerte.
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:
Melden Sie sich im Azure-Portal an.
Wechseln Sie zu Microsoft Defender for Cloud>Recommendations.
Suchen und wählen Sie die relevante Empfehlung für die Härtung der Datenebene aus.
Wählen Sie auf der Registerkarte " Aktion ausführen " die Option "Ablehnen" aus.
Legen Sie den Bereich fest.
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 eine konforme Bereitstellung
Die folgende Bereitstellung verwendet eine vertrauenswürdige Container-Registry, setzt CPU- und Speicherbeschränkungen durch und wendet einen restriktiven Sicherheitskontext an, der die Eskalation von Privilegien deaktiviert und als Nicht-Root-Nutzer ausgeführt wird.
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
Die folgende Bereitstellung verstößt absichtlich gegen mehrere Data Plane Hardening-Richtlinien, darunter das Ausführen eines privilegierten Containers als Root, das Aktivieren von Host-Netzwerken und gemeinsamen Namespaces sowie das Einbinden eines Host-Pfadvolumens.
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