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
- Fügen Sie die erforderlichen FQDN-/Anwendungsregeln für Azure Policy hinzu.
- (Für Nicht-AKS-Cluster) Herstellen einer Verbindung eines vorhandenen Kubernetes-Clusters mit Azure Arc.
Aktivieren der Härtung der Kubernetes-Datenebene
Sie können die Azure Policy für Kubernetes auf zwei Arten aktivieren:
- Aktivieren für alle aktuellen und zukünftigen Cluster mithilfe von Plan-/Connectoreinstellungen
- Bereitstellen von Azure Policy for Kubernetes in vorhandenen Clustern
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:
Melden Sie sich beim Azure-Portal an.
Navigieren Sie zu Microsoft Defender für Cloud>Umgebungseinstellungen.
Wählen Sie das relevante Abonnement aus.
Stellen Sie auf der Seite „Defender-Pläne“ sicher, dass „Container“ auf Ein umgeschaltet ist.
Wählen Sie Settingsaus.
Schalten Sie auf der Seite Einstellungen und Überwachung die Option „Azure Policy für Kubernetes“ auf An.
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:
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"
.Tipp
Die Empfehlung ist in verschiedenen Sicherheitssteuerelementen enthalten, und es spielt keine Rolle, welche Sie im nächsten Schritt auswählen.
Wählen Sie die Empfehlung in einer der Sicherheitskontrollen aus, um die Ressourcen anzuzeigen, in denen Sie das Add-On installieren können.
Wählen Sie den entsprechenden Cluster und dann Korrigieren aus.
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
Melden Sie sich beim Azure-Portal an.
Navigieren Sie zu Microsoft Defender für Cloud>Umgebungseinstellungen.
Wählen Sie das relevante Abonnement aus.
Wählen Sie im Menü von Defender für Cloud die Option Sicherheitsrichtlinie aus.
Wählen Sie die entsprechende Zuweisung aus. Die Standardzuweisung ist
ASC default
.Öffnen Sie die Registerkarte Parameter, und ändern Sie die Werte nach Bedarf.
Klicken Sie auf Überprüfen + speichern.
Wählen Sie Speichern aus.
So erzwingen Sie eine der Empfehlungen
Öffnen Sie die Seite mit den Details zur Empfehlung, und wählen Sie Ablehnen aus:
Der Bereich zum Festlegen des Umfangs wird geöffnet.
Legen Sie den Umfang fest, und wählen Sie In „Ablehnen“ ändern.
So zeigen Sie die Empfehlungen an, die Ihre Cluster betreffen
Öffnen Sie die Seite Ressourcenbestand von Defender for Cloud, und legen Sie den Ressourcentypfilter Kubernetes-Dienste fest.
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.
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: