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.
Sie können integrierte Sicherheitsrichtlinien auf Ihre Azure Kubernetes Service (AKS) Cluster anwenden und erzwingen, indem Sie Azure Policy verwenden. Azure Policy unterstützt Sie bei der Durchsetzung von Organisationsstandards und der Bewertung der Compliance im großen Stil. Nachdem Sie das Azure Policy-Add-On für AKS installiert haben, können Sie einzelne Richtliniendefinitionen oder als Initiativen bezeichnete Gruppen von Richtliniendefinitionen (mitunter als Richtliniensätze bezeichnet) auf Ihren Cluster anwenden. Eine vollständige Liste der AKS-Richtlinien- und Initiativdefinitionen finden Sie unter Azure Policy integrierten Definitionen für AKS.
In diesem Artikel erfahren Sie, wie Sie Richtliniendefinitionen auf Ihren Cluster anwenden und überprüfen, ob die Zuweisungen erzwungen werden.
Voraussetzungen
- In diesem Artikel wird vorausgesetzt, dass Sie über einen AKS-Cluster verfügen. Wenn Sie einen AKS-Cluster benötigen, können Sie einen mithilfe der Azure-Befehlszeilenschnittstelle, mit Azure PowerShell oder über das Azure-Portal erstellen.
- Sie benötigen die Installation des Azure Policy-Add-Ons für AKS auf Ihrem AKS-Cluster.
Sie benötigen die folgenden Ressourcen installiert und konfiguriert, bevor Sie beginnen:
- In diesem Artikel wird vorausgesetzt, dass Sie über einen AKS-Cluster verfügen. Wenn Sie einen AKS-Cluster benötigen, können Sie einen mithilfe der Azure-Befehlszeilenschnittstelle, mit Azure PowerShell oder über das Azure-Portal erstellen.
- Sie benötigen die Installation des Azure Policy-Add-Ons für AKS auf Ihrem AKS-Cluster.
- Terraform Version 1.6.0 oder höher.
- Azure CLI, Version 2.47.0 oder höher. Informationen zum Installieren oder Aktualisieren der Azure CLI finden Sie unter Installieren der Azure CLI.
- Kubectl installiert und konfiguriert.
Zuweisung einer integrierten Richtliniendefinition oder Initiative
Sie können eine Richtliniendefinition oder Initiative im Azure-Portal anwenden, indem Sie die folgenden Schritte ausführen:
- Wechseln Sie zum Azure Policy Dienst im Azure Portal namens "Richtlinie".
- Wählen Sie im linken Bereich der Seite „Azure Policy“ die Option Definitionen aus.
- Wählen Sie unter Kategorien die Option
Kubernetesaus. - Wählen Sie die Richtliniendefinition oder -initiative aus, die Sie anwenden möchten. Wählen Sie für dieses Beispiel die Initiative Sicherheitsbasisstandards für Kubernetes-Cluster-Pods für Linux-basierte Workloads aus.
- Wählen Sie Zuweisen aus.
- Legen Sie den Bereich auf die Ressourcengruppe des AKS-Clusters fest, für den das Azure Policy-Add-On aktiviert ist.
- Wählen Sie die Registerkarte Parameter aus, und ändern Sie den Effekt von
auditindeny, um neue Bereitstellungen zu blockieren, die gegen die Basislinieninitiative verstoßen. Sie können auch zusätzliche Namespaces hinzufügen, die von der Auswertung ausgeschlossen werden sollen. Übernehmen Sie für dieses Beispiel die Standardwerte. - Wählen Sie Überprüfen + erstellen>Erstellen aus, um die Richtlinienzuweisung zu übermitteln.
Erstellen Sie ein Verzeichnis für die Terraform-Konfiguration.
mkdir aks-use-azure-policy
cd aks-use-azure-policy
Erstellen Sie die Terraform-Konfiguration
Erstellen Sie eine Datei mit dem Namen main.tf.
touch main.tf
Öffnen Sie die main.tf Datei, und fügen Sie die folgende Konfiguration hinzu.
Konfigurieren des Terraform-Anbieters
Die folgende Konfiguration:
- Definiert die Terraform-Version.
- Konfiguriert den AzureRM-Anbieter.
- Aktiviert Azure Anbieterfeatures, die für die Ressourcenverwaltung erforderlich sind.
terraform {
required_version = ">= 1.6.0"
required_providers {
azurerm = {
source = "hashicorp/azurerm"
version = "~> 4.0"
}
}
}
provider "azurerm" {
features {}
}
Definieren von Eingabevariablen
Verwenden Sie die folgenden Variablen, um den Namen der vorhandenen Ressourcengruppe und des AKS-Clusters während der Bereitstellung anzugeben.
variable "resource_group_name" {
description = "Name of the resource group that contains the existing AKS cluster."
type = string
}
variable "aks_cluster_name" {
description = "Name of the existing AKS cluster."
type = string
}
Verweisen auf den vorhandenen AKS-Cluster
Die folgenden Datenquellen rufen Informationen zur vorhandenen Ressourcengruppe und zum AKS-Cluster ab. Terraform verwendet diese Daten, um auf Infrastruktur zu verweisen, die bereits in Azure vorhanden ist, anstatt neue Ressourcen zu erstellen.
data "azurerm_resource_group" "aks" {
name = var.resource_group_name
}
data "azurerm_kubernetes_cluster" "aks" {
name = var.aks_cluster_name
resource_group_name = data.azurerm_resource_group.aks.name
}
Optional: Erstellen und Zuweisen einer benutzerdefinierten Richtliniendefinition
Der Abschnitt "Benutzerdefinierte Richtliniendefinition" ist informational und liegt außerhalb des Gültigkeitsbereichs dieses Artikels. Mit benutzerdefinierten Richtlinien können Sie Regeln für die Verwendung von Azure definieren. Sie können beispielsweise die folgenden Arten von Regeln erzwingen:
- Sicherheitsmaßnahmen:
- Kostenverwaltung:
- Organisationsspezifische Regeln, z. B. Benennungskonventionen oder Speicherorte.
Überprüfen Sie vor dem Erstellen einer benutzerdefinierten Richtlinie die Liste der gängigen Muster und Beispiele, um zu überprüfen, ob Ihr Anwendungsfall bereits behandelt wurde.
Benutzerdefinierte Richtliniendefinitionen werden in JSON geschrieben. Weitere Informationen zum Erstellen einer benutzerdefinierten Richtlinie finden Sie unter Azure Policy-Definitionsstruktur und Erstellen einer benutzerdefinierten Richtliniendefinition.
Hinweis
Azure Policy verwendet eine Eigenschaft namens templateInfo, mit der Sie den Quelltyp für die Einschränkungsvorlage definieren können. Wenn Sie templateInfo in Richtliniendefinitionen definieren, können Sie constraintTemplate - oder Einschränkungseigenschaften nicht verwenden. Sie müssen noch apiGroups und kinds definieren. Weitere Informationen finden Sie unter Grundlegendes zu Azure Policy Effekten.
Nachdem Sie Ihre benutzerdefinierte Richtliniendefinition erstellt haben, finden Sie unter Zuweisen einer Richtliniendefinition eine Schritt-für-Schritt-Anleitung zum Zuweisen der Richtlinie zu Ihrem Cluster.
Überprüfen, ob eine Azure-Richtlinie angewendet wird
Vergewissern Sie sich, dass die Richtlinienzuweisungen mithilfe des folgenden kubectl get Befehls auf Ihren Cluster angewendet werden.
kubectl get constrainttemplates
Hinweis
Richtlinienzuweisungen können bis zu 20 Minuten benötigen, um mit jedem Cluster synchronisiert zu werden.
Ihre Ausgabe sollte der folgenden Beispielausgabe ähneln:
NAME AGE
k8sazureallowedcapabilities 23m
k8sazureallowedusersgroups 23m
k8sazureblockhostnamespace 23m
k8sazurecontainerallowedimages 23m
k8sazurecontainerallowedports 23m
k8sazurecontainerlimits 23m
k8sazurecontainernoprivilege 23m
k8sazurecontainernoprivilegeescalation 23m
k8sazureenforceapparmor 23m
k8sazurehostfilesystem 23m
k8sazurehostnetworkingports 23m
k8sazurereadonlyrootfilesystem 23m
k8sazureserviceallowedports 23m
Überprüfen der Ablehnung eines privilegierten Pods
Testen Sie, was passiert, wenn Sie einen Pod mit dem Sicherheitskontext privileged: true planen. Dieser Sicherheitskontext weitet die Podberechtigungen aus. Die Initiative lässt keine privilegierten Pods zu, sodass die Anforderung abgelehnt wird, was wiederum zur Ablehnung der Bereitstellung führt.
Erstellen Sie eine Datei mit dem Namen „
nginx-privileged.yaml“, und fügen Sie das folgende YAML-Manifest ein.apiVersion: v1 kind: Pod metadata: name: nginx-privileged spec: containers: - name: nginx-privileged image: mcr.microsoft.com/oss/nginx/nginx:1.15.5-alpine securityContext: privileged: trueErstellen Sie den Pod mithilfe des
kubectl applyBefehls, und geben Sie den Namen Ihres YAML-Manifests an.kubectl apply -f nginx-privileged.yamlDer Pod kann wie erwartet nicht geplant werden, wie in der folgenden Beispielausgabe zu sehen:
Error from server ([denied by azurepolicy-container-no-privilege-00edd87bf80f443fa51d10910255adbc4013d590bec3d290b4f48725d4dfbdf9] Privileged container is not allowed: nginx-privileged, securityContext: {"privileged": true}): error when creating "privileged.yaml": admission webhook "validation.gatekeeper.sh" denied the request: [denied by azurepolicy-container-no-privilege-00edd87bf80f443fa51d10910255adbc4013d590bec3d290b4f48725d4dfbdf9] Privileged container is not allowed: nginx-privileged, securityContext: {"privileged": true}Der Pod erreicht die Scheduling-Phase nicht, daher gibt es keine Ressourcen, die Sie löschen müssen, bevor Sie fortfahren.
Testen der Erstellung eines nicht privilegierten Pods
Im vorherigen Beispiel hat das Containerimage automatisch versucht, Stammberechtigungen zu verwenden, um NGINX an den Port 80 zu binden. Die Richtlinieninitiative lehnt diese Anforderung ab, sodass der Pod nicht gestartet werden kann. Versuchen Sie jetzt, denselben NGINX Pod ohne privilegierten Zugriff auszuführen.
Erstellen Sie eine Datei mit dem Namen
nginx-unprivileged.yaml, und fügen Sie das folgende YAML-Manifest darin ein.apiVersion: v1 kind: Pod metadata: name: nginx-unprivileged spec: containers: - name: nginx-unprivileged image: mcr.microsoft.com/oss/nginx/nginx:1.15.5-alpineErstellen Sie den Pod mithilfe des
kubectl applyBefehls, und geben Sie den Namen Ihres YAML-Manifests an.kubectl apply -f nginx-unprivileged.yamlÜberprüfen Sie den Status des Pods mithilfe des
kubectl get podsBefehls.kubectl get podsIhre Ausgabe sollte der folgenden Beispielausgabe ähneln, was zeigt, dass der Pod erfolgreich geplant wurde und den Status Wird ausgeführt aufweist:
NAME READY STATUS RESTARTS AGE nginx-unprivileged 1/1 Running 0 18sDieses Beispiel zeigt die Baseline-Initiative, die sich nur auf Bereitstellungen auswirkt, die gegen Richtlinien in der Sammlung verstoßen. Zulässige Bereitstellungen funktionieren weiterhin.
Löschen Sie den nicht privilegierten
NGINX-Pod mit dem Befehlkubectl delete, und geben Sie den Namen Ihres YAML-Manifests an.kubectl delete -f nginx-unprivileged.yaml
Führen Sie die folgenden Schritte aus, um Ihrem AKS-Cluster mithilfe von Terraform eine integrierte Azure Policy Initiative zuzuweisen.
Abrufen der integrierten Azure Policy Initiative
Die folgende Datenquelle ruft die integrierte politische Initiative von Azure für grundlegende Sicherheitsstandards für Kubernetes-Pods ab.
data "azurerm_policy_set_definition" "aks_pod_security_baseline" {
display_name = "Kubernetes cluster pod security baseline standards for Linux-based workloads"
}
Weisen Sie die Azure Policy-Initiative zu
Die folgende Ressource weist der Ressourcengruppe, die den AKS-Cluster enthält, die integrierte Azure Policy Initiative zu.
Legen Sie die Richtlinienwirkung auf Deny fest, um Workloads zu blockieren, die gegen die definierten Richtlinienregeln verstoßen.
resource "azurerm_resource_group_policy_assignment" "aks_pod_security_baseline" {
name = "aks-pod-security-baseline"
display_name = "Kubernetes cluster pod security baseline standards for Linux-based workloads"
resource_group_id = data.azurerm_resource_group.aks.id
policy_definition_id = data.azurerm_policy_set_definition.aks_pod_security_baseline.id
parameters = jsonencode({
effect = {
value = "Deny"
}
})
}
Initialisieren Sie die Terraform-Konfiguration
Führen Sie die Schritte terraform init aus, um das Terraform-Arbeitsverzeichnis zu initialisieren und die erforderlichen Anbieter-Plug-Ins herunterzuladen.
terraform init
Formatieren und Überprüfen der Konfiguration
Führen Sie die Ausführung terraform fmt aus, um die Terraform-Konfiguration zu formatieren.
terraform fmt
Führen Sie terraform validate aus, um die Syntax der Terraform-Konfiguration zu validieren.
terraform validate
Terraform-Konfiguration anwenden
Stellen Sie vor der Bereitstellung der Konfiguration Werte für die folgenden Variablen bereit:
resource_group_nameaks_cluster_name
Führen Sie terraform apply aus, um die Azure Policy-Zuweisung bereitzustellen.
terraform apply
Wenn Sie dazu aufgefordert werden, geben Sie die Eingabetaste yes ein, um die Bereitstellung zu bestätigen.
Überprüfen der Azure Policy-Installation
Überprüfen Sie nach Abschluss der Bereitstellung, ob die Azure Policy Komponenten im AKS-Cluster ausgeführt werden.
kubectl get pods -n kube-system
Stellen Sie sicher, dass die Gatekeeper-Einschränkungsvorlagen erfolgreich installiert wurden.
kubectl get constrainttemplates
Testen Sie die Azure Policy-Zuweisung
Erstellen Sie eine Datei mit dem Namen privileged-pod.yaml.
apiVersion: v1
kind: Pod
metadata:
name: privileged-pod
spec:
containers:
- name: nginx
image: nginx
securityContext:
privileged: true
Wenden Sie das Manifest auf den Cluster an.
kubectl apply -f privileged-pod.yaml
Die Bereitstellung schlägt fehl, weil die Azure-Policy-Zuweisung privilegierte Container nicht zulässt, die gegen die konfigurierten Pod-Sicherheitsbasisstandards verstoßen.
Deaktivieren einer Richtlinie oder Initiative
Entfernen Sie die Basisinitiative im Azure-Portal, indem Sie die folgenden Schritte ausführen:
- Wechseln Sie zum Richtlinienbereich im Azure-Portal.
- Klicken Sie auf Zuweisungen.
- Wählen Sie die Ellipse (
...) am Ende der Zeile für die Initiative Grundlegende Sicherheitsstandards für Kubernetes-Clusterpods für Linux-basierte Workloads aus. - Wählen Sie Zuweisung löschen aus.
Informationen zum Entfernen des Azure Policy-Add-Ons aus Ihrem AKS-Cluster finden Sie unter Entfernen des Add-Ons.
Nächste Schritte
Weitere Informationen zur Funktionsweise Azure Policy finden Sie in den folgenden Artikeln: