Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
U kunt ingebouwd beveiligingsbeleid toepassen en afdwingen op uw Azure Kubernetes Service (AKS)-clusters met behulp van Azure Policy. Met Azure Policy kunt u organisatiestandaarden afdwingen en naleving op schaal beoordelen. Nadat u de Azure Policy-invoegtoepassing voor AKS hebt geïnstalleerd, kunt u afzonderlijke beleidsdefinities of groepen beleidsdefinities met de naam initiatieven (ook wel beleidssets genoemd) toepassen op uw cluster. Zie Azure Policy ingebouwde definities voor AKS-beleid en -initiatief voor een volledige lijst met AKS-beleids- en initiatiefdefinities.
In dit artikel leest u hoe u beleidsdefinities toepast op uw cluster en controleert of de toewijzingen worden afgedwongen.
Vereisten
- In dit artikel wordt ervan uitgegaan dat u een bestaand AKS-cluster hebt. Als u een AKS-cluster nodig hebt, kunt u er een maken met behulp van Azure CLI, Azure PowerShell of Azure Portal.
- U hebt de Azure Policy-invoegtoepassing voor AKS nodig die is geïnstalleerd op uw AKS-cluster.
U hebt de volgende hulpmiddelen geïnstalleerd en geconfigureerd nodig voordat u begint:
- In dit artikel wordt ervan uitgegaan dat u een bestaand AKS-cluster hebt. Als u een AKS-cluster nodig hebt, kunt u er een maken met behulp van Azure CLI, Azure PowerShell of Azure Portal.
- U hebt de Azure Policy-invoegtoepassing voor AKS nodig die is geïnstalleerd op uw AKS-cluster.
- Terraform versie 1.6.0 of hoger.
- Azure CLI versie 2.47.0 of hoger. Zie Azure CLI installeren of bijwerken om de Azure CLI te installeren of bij te werken.
- Kubectl is geïnstalleerd en geconfigureerd.
Een ingebouwde beleidsdefinitie of initiatief toewijzen
U kunt een beleidsdefinitie of initiatief toepassen in de Azure-portal met behulp van de volgende stappen:
- Ga naar de Azure Policy-service in de Azure-portal met de naam Beleid.
- Selecteer Definities in het linkerdeelvenster van de pagina Azure Policy.
- Selecteer onder Categorieën de optie
Kubernetes. - Kies de beleidsdefinitie of het initiatief dat u wilt toepassen. Selecteer voor dit voorbeeld de Pod Security Baseline-standaarden voor Kubernetes-clusters voor Linux-workloads.
- Selecteer Toewijzen.
- Stel het bereik in op de resourcegroep van het AKS-cluster waarbij de Azure Policy-add-on is ingeschakeld.
- Selecteer de pagina Parameters en wijzig het Effect van
auditnaardenyom nieuwe implementaties te blokkeren die het basisinitiatief schenden. U kunt ook extra naamruimten toevoegen om uit te sluiten van evaluatie. Behoud voor dit voorbeeld de standaardwaarden. - Selecteer Beoordelen en maken>Maken om de beleidstoewijzing in te dienen.
Maak een map voor de Terraform-configuratie.
mkdir aks-use-azure-policy
cd aks-use-azure-policy
De Terraform-configuratie maken
Maak een bestand met de naam main.tf.
touch main.tf
Open het main.tf bestand en voeg de volgende configuratie toe.
De Terraform-provider configureren
De volgende configuratie:
- Hiermee definieert u de Terraform-versie.
- Hiermee configureert u de AzureRM-provider.
- Hiermee schakelt u Azure providerfuncties in die vereist zijn voor resourcebeheer.
terraform {
required_version = ">= 1.6.0"
required_providers {
azurerm = {
source = "hashicorp/azurerm"
version = "~> 4.0"
}
}
}
provider "azurerm" {
features {}
}
Invoervariabelen definiëren
Gebruik de volgende variabelen om de naam van de bestaande resourcegroep en het AKS-cluster op te geven tijdens de implementatie.
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
}
Verwijzen naar het bestaande AKS-cluster
De volgende gegevensbronnen halen informatie op over de bestaande resourcegroep en het AKS-cluster. Terraform gebruikt deze gegevens om te verwijzen naar infrastructuur die al bestaat in Azure in plaats van nieuwe resources te maken.
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
}
Optioneel: Een aangepaste beleidsdefinitie maken en toewijzen
De sectie aangepaste beleidsdefinitie is informatief en valt buiten het bereik van dit artikel. Met aangepast beleid kunt u regels definiëren voor het gebruik van Azure. U kunt bijvoorbeeld de volgende typen regels afdwingen:
- Beveiligingsprocedures.
- Kostenbeheer.
- Organisatiespecifieke regels, zoals naamconventies of locaties.
Voordat u een aangepast beleid maakt, controleert u de lijst met veelvoorkomende patronen en voorbeelden om te zien of uw case al wordt behandeld.
Aangepaste beleidsdefinities worden geschreven in JSON. Zie de definitiestructuur van Azure Policy en een aangepaste beleidsdefinitie maken voor meer informatie over het maken van een aangepast beleid.
Notitie
Azure Policy gebruikt een eigenschap met de naam templateInfo die u kunt gebruiken om het brontype voor de beperkingssjabloon te definiëren. Wanneer u templateInfo definieert in beleidsdefinities, kunt u geen constraintTemplate - of constraint-eigenschappen gebruiken. U moet nog steeds apiGroups en kinds definiëren. Zie Inzicht in Azure Policy effecten voor meer informatie.
Nadat u de aangepaste beleidsdefinitie hebt gemaakt, raadpleegt u Een beleidsdefinitie toewijzen voor een stapsgewijze procedure om het beleid toe te wijzen aan uw cluster.
Controleren of Azure Policy actief is
Controleer of de beleidstoewijzingen zijn toegepast op uw cluster met behulp van de volgende kubectl get opdracht.
kubectl get constrainttemplates
Notitie
Het kan tot 20 minuten duren voordat beleidstoewijzingen in elk cluster worden gesynchroniseerd .
De uitvoer moet er ongeveer uitzien als in de volgende voorbeelduitvoer:
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
Afwijzing van een geprivilegieerde pod valideren
Test wat er gebeurt wanneer u een pod plant met de beveiligingscontext van privileged: true. Deze beveiligingscontext escaleert de bevoegdheden van de pod. Het initiatief staat geen geprivilegieerde pods toe, dus de aanvraag wordt geweigerd, wat resulteert in het afwijzen van de uitrol.
Maak een bestand met de naam
nginx-privileged.yamlen plak het volgende YAML-manifest.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: trueMaak de pod met behulp van de
kubectl applyopdracht en geef de naam van uw YAML-manifest op.kubectl apply -f nginx-privileged.yamlZoals verwacht kan de pod niet worden gepland, zoals wordt weergegeven in de volgende voorbeelduitvoer:
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}De pod bereikt de planningsfase niet, dus er zijn geen bronnen om te verwijderen voordat u verdergaat.
Test het maken van een niet-geprivilegieerde pod
In het vorige voorbeeld probeerde de containerimage automatisch root te gebruiken om NGINX aan poort 80 te binden. Het beleidsinitiatief weigert deze aanvraag, zodat de pod niet kan worden gestart. Probeer nu dezelfde NGINX pod uit te voeren zonder bevoegde toegang.
Maak een bestand met de naam
nginx-unprivileged.yamlen plak het volgende YAML-manifest erin.apiVersion: v1 kind: Pod metadata: name: nginx-unprivileged spec: containers: - name: nginx-unprivileged image: mcr.microsoft.com/oss/nginx/nginx:1.15.5-alpineMaak de pod met behulp van de
kubectl applyopdracht en geef de naam van uw YAML-manifest op.kubectl apply -f nginx-unprivileged.yamlControleer de status van de pod met behulp van de
kubectl get podsopdracht.kubectl get podsUw uitvoer moet vergelijkbaar zijn met de volgende voorbeelduitvoer, waarin wordt weergegeven dat de pod is gepland en de status In uitvoering heeft.
NAME READY STATUS RESTARTS AGE nginx-unprivileged 1/1 Running 0 18sIn dit voorbeeld ziet u het basislijninitiatief dat alleen van invloed is op de implementaties die het beleid in de verzameling schenden. Toegestane implementaties blijven functioneren.
Verwijder de
NGINXniet-gemachtigde pod met behulp van dekubectl deleteopdracht en geef de naam van uw YAML-manifest op.kubectl delete -f nginx-unprivileged.yaml
Gebruik de volgende stappen om een ingebouwd Azure Policy initiatief toe te wijzen aan uw AKS-cluster met behulp van Terraform.
Het ingebouwde Azure Policy-initiatief ophalen
Met de volgende gegevensbron haalt u het ingebouwde Azure Policy-initiatief op voor standaarden voor de basislijn voor podbeveiliging in Kubernetes.
data "azurerm_policy_set_definition" "aks_pod_security_baseline" {
display_name = "Kubernetes cluster pod security baseline standards for Linux-based workloads"
}
Het Azure Policy-initiatief toewijzen
Met de volgende resource wordt het ingebouwde Azure Policy initiatief toegewezen aan de resourcegroep die het AKS-cluster bevat.
Stel het effect van het beleid in op Deny om workloads te blokkeren die de gedefinieerde beleidsregels schenden.
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"
}
})
}
De Terraform-configuratie initialiseren
Voer terraform init uit om de Terraform-werkmap te initialiseren en de vereiste provider-plug-ins te downloaden.
terraform init
De configuratie opmaken en valideren
Voer terraform fmt uit om de Terraform-configuratie te formatteren.
terraform fmt
Voer deze opdracht uit terraform validate om de syntaxis van de Terraform-configuratie te valideren.
terraform validate
De Terraform-configuratie toepassen
Geef voordat u de configuratie implementeert waarden op voor de volgende variabelen:
resource_group_nameaks_cluster_name
Voer deze opdracht uit terraform apply om de Azure Policy-toewijzing te implementeren.
terraform apply
Voer desgevraagd in yes om de implementatie te bevestigen.
De installatie van de Azure Policy controleren
Nadat de implementatie is voltooid, controleert u of de Azure Policy onderdelen worden uitgevoerd in het AKS-cluster.
kubectl get pods -n kube-system
Controleer of de Gatekeeper-beperkingssjablonen zijn geïnstalleerd.
kubectl get constrainttemplates
De Azure Policy-toewijzing testen
Maak een bestand met de naam privileged-pod.yaml.
apiVersion: v1
kind: Pod
metadata:
name: privileged-pod
spec:
containers:
- name: nginx
image: nginx
securityContext:
privileged: true
Pas het manifest toe op het cluster.
kubectl apply -f privileged-pod.yaml
De implementatie mislukt omdat de Azure Policy-toewijzing containers met verhoogde bevoegdheden blokkeert die in strijd zijn met de geconfigureerde standaarden voor de podbeveiligingsbasislijn.
Een beleid of initiatief uitschakelen
Verwijder het basislijninitiatief in de Azure-portal met behulp van de volgende stappen:
- Ga naar het deelvenster Beleid in de Azure-portal.
- Selecteer Opdrachten.
- Selecteer het weglatingsteken (
...) aan het einde van de regel voor het initiatief de basislijnstandaarden voor podbeveiliging van Kubernetes-clusters voor Linux-workloads. - Selecteer Toewijzing verwijderen.
Als u de Azure Policy-invoegtoepassing uit uw AKS-cluster wilt verwijderen, raadpleegt u De invoegtoepassing verwijderen.
Volgende stappen
Zie de volgende artikelen voor meer informatie over hoe Azure Policy werkt: