Azure Policy voor Kubernetes-clusters
Azure Policy breidt Gatekeeper v3, een toegangscontrollerwebhook voor Open Policy Agent (OPA) uit om afdwinging en beveiliging op schaal toe te passen op uw clusteronderdelen op een gecentraliseerde, consistente manier. Clusteronderdelen omvatten pods, containers en naamruimten.
Met Azure Policy kunt u vanaf één locatie de nalevingsstatus van uw Kubernetes-clusteronderdelen beheren en rapporteren. Door de invoegtoepassing of extensie van Azure Policy te gebruiken, wordt het beheren van uw clusteronderdelen uitgebreid met Azure Policy-functies, zoals de mogelijkheid om selectors en onderdrukkingen te gebruiken voor veilige beleidsrollout en rollback.
Azure Policy voor Kubernetes ondersteunt de volgende typen clusteromgevingen:
- Azure Kubernetes Service (AKS) via de invoegtoepassing van Azure Policy voor AKS
- Kubernetes met Azure Arc, via de extensie van Azure Policy voor Arc
Belangrijk
Het Helm-model van de Azure Policy-invoegtoepassing en de invoegtoepassing voor de AKS-engine zijn afgeschaft. Volg de instructies om de invoegtoepassingen te verwijderen.
Overzicht
Door de invoegtoepassing of extensie van Azure Policy te installeren op uw Kubernetes-clusters, voert Azure Policy de volgende functies uit:
- Hiermee wordt gecontroleerd met de Azure Policy-service voor beleidstoewijzingen aan het cluster.
- Hiermee worden beleidsdefinities in het cluster geïmplementeerd als beperkingssjabloon en aangepaste resources beperkt of als mutatiesjabloonresource (afhankelijk van inhoud van beleidsdefinitie).
- Rapporteert controle- en nalevingsgegevens terug naar de Azure Policy-service.
Voer de volgende acties uit om Azure Policy in te schakelen en te gebruiken met uw Kubernetes-cluster:
Configureer uw Kubernetes-cluster en installeer de invoegtoepassing Azure Kubernetes Service (AKS) of de extensie van Azure Policy voor Kubernetes-clusters met Arc (afhankelijk van uw clustertype).
Notitie
Zie Problemen oplossen - Azure Policy-invoegtoepassing voor veelvoorkomende problemen met de installatie.
Een Azure Policy-voorbeelddefinitie voor Kubernetes maken of gebruiken
Bekijk beperkingen en aanbevelingen in de sectie Veelgestelde vragen
Azure Policy-invoegtoepassing voor AKS installeren
De Azure Policy-invoegtoepassing voor AKS maakt deel uit van Kubernetes versie 1.27 met langetermijnondersteuning (LTS).
Vereisten
Registreer de resourceproviders en preview-functies.
Azure Portal:
Registreer de
Microsoft.PolicyInsights
resourceproviders. Zie Resourceproviders en -typen voor stappen.Azure CLI:
# Log in first with az login if you're not using Cloud Shell # Provider register: Register the Azure Policy provider az provider register --namespace Microsoft.PolicyInsights
U hebt Azure CLI versie 2.12.0 of hoger geïnstalleerd en geconfigureerd. Voer de
az --version
opdracht uit om de versie te vinden. Als u de Azure CLI wilt installeren of upgraden, raadpleegt u Hoe u de Azure CLI installeert.Het AKS-cluster moet een ondersteunde Kubernetes-versie in Azure Kubernetes Service (AKS) zijn. Gebruik het volgende script om de versie van uw AKS-cluster te valideren:
# Log in first with az login if you're not using Cloud Shell # Look for the value in kubernetesVersion az aks list
Open poorten voor de Azure Policy-extensie. De Azure Policy-extensie maakt gebruik van deze domeinen en poorten om beleidsdefinities en toewijzingen op te halen en naleving van het cluster te rapporteren aan Azure Policy.
Domain Poort data.policy.core.windows.net
443
store.policy.core.windows.net
443
login.windows.net
443
dc.services.visualstudio.com
443
Nadat de vereisten zijn voltooid, installeert u de Azure Policy-invoegtoepassing in het AKS-cluster dat u wilt beheren.
Azure Portal
Start de AKS-service in Azure Portal door Alle services te selecteren en vervolgens Kubernetes-services te zoeken en te selecteren.
Selecteer een van uw AKS-clusters.
Selecteer Beleidsregels aan de linkerkant van de Kubernetes-servicepagina.
Selecteer op de hoofdpagina de knop Invoegtoepassing inschakelen.
Azure-CLI
# Log in first with az login if you're not using Cloud Shell az aks enable-addons --addons azure-policy --name MyAKSCluster --resource-group MyResourceGroup
Voer de volgende opdracht uit om te controleren of de installatie van de invoegtoepassing is geslaagd en of de azure-policy - en gatekeeper-pods worden uitgevoerd:
# azure-policy pod is installed in kube-system namespace
kubectl get pods -n kube-system
# gatekeeper pod is installed in gatekeeper-system namespace
kubectl get pods -n gatekeeper-system
Controleer ten slotte of de nieuwste invoegtoepassing is geïnstalleerd door deze Azure CLI-opdracht uit te voeren, waarbij u <rg>
de naam van uw resourcegroep en <cluster-name>
de naam van uw AKS-cluster vervangt: az aks show --query addonProfiles.azurepolicy -g <rg> -n <cluster-name>
Het resultaat moet er ongeveer uitzien als de volgende uitvoer voor clusters met behulp van service-principals:
{
"config": null,
"enabled": true,
"identity": null
}
En de volgende uitvoer voor clusters met beheerde identiteit:
{
"config": null,
"enabled": true,
"identity": {
"clientId": "########-####-####-####-############",
"objectId": "########-####-####-####-############",
"resourceId": "<resource-id>"
}
}
Azure Policy-extensie installeren voor Kubernetes met Azure Arc
Met Azure Policy voor Kubernetes kunt u vanaf één locatie de nalevingsstatus van uw Kubernetes-clusters beheren en rapporteren. Met de extensie van Azure Policy voor Kubernetes-clusters met Arc kunt u de kubernetes-clusteronderdelen met Arc beheren, zoals pods en containers.
In dit artikel wordt beschreven hoe u de extensiestatus maakt, weergeeft en de Azure Policy voor Kubernetes-extensie verwijdert.
Zie Azure Arc-clusterextensies voor een overzicht van het uitbreidingsplatform.
Vereisten
Als u Azure Policy voor Kubernetes al hebt geïmplementeerd in een Azure Arc-cluster met behulp van Helm rechtstreeks zonder extensies, volgt u de instructies om de Helm-grafiek te verwijderen. Nadat het verwijderen is voltooid, kunt u doorgaan.
Zorg ervoor dat uw Kubernetes-cluster een ondersteunde distributie is.
Notitie
Azure Policy voor Arc-extensie wordt ondersteund in de volgende Kubernetes-distributies.
Zorg ervoor dat u voldoet aan alle algemene vereisten voor Kubernetes-extensies die hier worden vermeld, inclusief het verbinden van uw cluster met Azure Arc.
Notitie
Azure Policy-extensie wordt ondersteund voor Kubernetes-clusters met Arc in deze regio's.
Open poorten voor de Azure Policy-extensie. De Azure Policy-extensie maakt gebruik van deze domeinen en poorten om beleidsdefinities en toewijzingen op te halen en naleving van het cluster te rapporteren aan Azure Policy.
Domain Poort data.policy.core.windows.net
443
store.policy.core.windows.net
443
login.windows.net
443
dc.services.visualstudio.com
443
Voordat u de Azure Policy-extensie installeert of een van de servicefuncties inschakelt, moet uw abonnement de
Microsoft.PolicyInsights
resourceproviders inschakelen.Notitie
Als u de resourceprovider wilt inschakelen, volgt u de stappen in resourceproviders en typen of voert u de Azure CLI- of Azure PowerShell-opdracht uit.
Azure-CLI
# Log in first with az login if you're not using Cloud Shell # Provider register: Register the Azure Policy provider az provider register --namespace 'Microsoft.PolicyInsights'
Azure PowerShell
# Log in first with Connect-AzAccount if you're not using Cloud Shell # Provider register: Register the Azure Policy provider Register-AzResourceProvider -ProviderNamespace 'Microsoft.PolicyInsights'
Azure Policy-extensie maken
Notitie
Let op het volgende voor het maken van de Azure Policy-extensie:
- Automatische upgrade is standaard ingeschakeld, waardoor de secundaire versie van de Azure Policy-extensie wordt bijgewerkt als er nieuwe wijzigingen worden geïmplementeerd.
- Proxyvariabelen die als parameters
connectedk8s
worden doorgegeven, worden doorgegeven aan de Azure Policy-extensie ter ondersteuning van uitgaande proxy.
Als u een extensie-exemplaar wilt maken, voert u voor uw cluster met Arc de volgende opdracht uit, waarbij <>
u de waarden vervangt:
az k8s-extension create --cluster-type connectedClusters --cluster-name <CLUSTER_NAME> --resource-group <RESOURCE_GROUP> --extension-type Microsoft.PolicyInsights --name <EXTENSION_INSTANCE_NAME>
Voorbeeld:
az k8s-extension create --cluster-type connectedClusters --cluster-name my-test-cluster --resource-group my-test-rg --extension-type Microsoft.PolicyInsights --name azurepolicy
Voorbeelduitvoer:
{
"aksAssignedIdentity": null,
"autoUpgradeMinorVersion": true,
"configurationProtectedSettings": {},
"configurationSettings": {},
"customLocationSettings": null,
"errorInfo": null,
"extensionType": "microsoft.policyinsights",
"id": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/my-test-rg/providers/Microsoft.Kubernetes/connectedClusters/my-test-cluster/providers/Microsoft.KubernetesConfiguration/extensions/azurepolicy",
"identity": {
"principalId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"tenantId": null,
"type": "SystemAssigned"
},
"location": null,
"name": "azurepolicy",
"packageUri": null,
"provisioningState": "Succeeded",
"releaseTrain": "Stable",
"resourceGroup": "my-test-rg",
"scope": {
"cluster": {
"releaseNamespace": "kube-system"
},
"namespace": null
},
"statuses": [],
"systemData": {
"createdAt": "2021-10-27T01:20:06.834236+00:00",
"createdBy": null,
"createdByType": null,
"lastModifiedAt": "2021-10-27T01:20:06.834236+00:00",
"lastModifiedBy": null,
"lastModifiedByType": null
},
"type": "Microsoft.KubernetesConfiguration/extensions",
"version": "1.1.0"
}
Azure Policy-extensie weergeven
Als u wilt controleren of het maken van het extensie-exemplaar is geslaagd en de metagegevens van de extensie wilt controleren, voert u de volgende opdracht uit die vervangt <>
door uw waarden:
az k8s-extension show --cluster-type connectedClusters --cluster-name <CLUSTER_NAME> --resource-group <RESOURCE_GROUP> --name <EXTENSION_INSTANCE_NAME>
Voorbeeld:
az k8s-extension show --cluster-type connectedClusters --cluster-name my-test-cluster --resource-group my-test-rg --name azurepolicy
Voer de volgende opdracht uit om te controleren of de installatie van de extensie is geslaagd en of de azure-policy- en gatekeeper-pods worden uitgevoerd:
# azure-policy pod is installed in kube-system namespace
kubectl get pods -n kube-system
# gatekeeper pod is installed in gatekeeper-system namespace
kubectl get pods -n gatekeeper-system
Azure Policy-extensie verwijderen
Als u het extensie-exemplaar wilt verwijderen, voert u de volgende opdracht uit die vervangt <>
door uw waarden:
az k8s-extension delete --cluster-type connectedClusters --cluster-name <CLUSTER_NAME> --resource-group <RESOURCE_GROUP> --name <EXTENSION_INSTANCE_NAME>
Een beleidsdefinitie maken
De Taalstructuur van Azure Policy voor het beheren van Kubernetes volgt die van bestaande beleidsdefinities. Er zijn voorbeelddefinitiebestanden beschikbaar om toe te wijzen in de ingebouwde beleidsbibliotheek van Azure Policy die kan worden gebruikt om uw clusteronderdelen te beheren.
Azure Policy voor Kubernetes biedt ook ondersteuning voor het maken van aangepaste definities op onderdeelniveau voor zowel Azure Kubernetes Service-clusters als Kubernetes-clusters met Azure Arc. Beperkte sjabloon- en mutatiesjabloonvoorbeelden zijn beschikbaar in de Gatekeeper-communitybibliotheek. De Visual Studio Code-extensie van Azure Policy kan worden gebruikt om een bestaande beperkingssjabloon of mutatiesjabloon te vertalen naar een aangepaste Azure Policy-beleidsdefinitie.
Met de resourceprovidermodus van Microsoft.Kubernetes.Data
worden de effectencontrole, weigeren, uitgeschakeld en muteren gebruikt om uw Kubernetes-clusters te beheren.
Controle en weigeren moeten eigenschappen bieden details
die specifiek zijn voor het werken met OPA Constraint Framework en Gatekeeper v3.
Als onderdeel van de eigenschappen details.templateInfo of details.constraintInfo in de beleidsdefinitie geeft Azure Policy de URI of Base64Encoded
waarde van deze CustomResourceDefinitions(CRD) door aan de invoegtoepassing. Rego is de taal die OPA en Gatekeeper ondersteunen om een aanvraag voor het Kubernetes-cluster te valideren. Door ondersteuning te bieden voor een bestaande standaard voor Kubernetes-beheer, maakt Azure Policy het mogelijk om bestaande regels opnieuw te gebruiken en deze te koppelen aan Azure Policy voor een uniforme rapportage-ervaring voor cloudcompatibiliteit. Zie Wat is Rego? voor meer informatie.
Een beleidsdefinitie toewijzen
Als u een beleidsdefinitie wilt toewijzen aan uw Kubernetes-cluster, moet u de juiste azure RBAC-beleidstoewijzingsbewerkingen (op rollen gebaseerd toegangsbeheer) van Azure toewijzen. De ingebouwde Azure-rollen Resource Policy Inzender en Eigenaar hebben deze bewerkingen. Zie Azure RBAC-machtigingen in Azure Policy voor meer informatie.
Zoek de ingebouwde beleidsdefinities voor het beheren van uw cluster met behulp van Azure Portal met de volgende stappen. Als u een aangepaste beleidsdefinitie gebruikt, zoekt u ernaar op naam of de categorie waarmee u deze hebt gemaakt.
Start de Azure Policy-service in Azure Portal. Selecteer Alle services in het linkerdeelvenster en zoek en selecteer Beleid.
Selecteer Definities in het linkerdeelvenster van de pagina Azure Policy.
Gebruik alles selecteren in de vervolgkeuzelijst Categorie om het filter te wissen en selecteer vervolgens Kubernetes.
Selecteer de beleidsdefinitie en selecteer vervolgens de knop Toewijzen .
Stel het bereik in op de beheergroep, het abonnement of de resourcegroep van het Kubernetes-cluster waarop de beleidstoewijzing van toepassing is.
Notitie
Wanneer u de Azure Policy voor Kubernetes-definitie toewijst, moet het bereik de clusterresource bevatten.
Geef de beleidstoewijzing een naam en beschrijving die u kunt gebruiken om deze eenvoudig te identificeren.
Stel het afdwingen van beleid in op een van de volgende waarden:
Ingeschakeld : dwing het beleid op het cluster af. Kubernetes-toegangsaanvragen met schendingen worden geweigerd.
Uitgeschakeld : dwing het beleid op het cluster niet af. Kubernetes-toegangsaanvragen met schendingen worden niet geweigerd. De resultaten van de nalevingsevaluatie zijn nog steeds beschikbaar. Wanneer u nieuwe beleidsdefinities implementeert voor het uitvoeren van clusters, is de optie Uitgeschakeld handig voor het testen van de beleidsdefinitie omdat toegangsaanvragen met schendingen niet worden geweigerd.
Selecteer Volgende.
Parameterwaarden instellen
- Als u Kubernetes-naamruimten wilt uitsluiten van beleidsevaluatie, geeft u de lijst met naamruimten op in uitsluitingen van parameternaamruimten. De aanbeveling is om uit te sluiten: kube-system, gatekeeper-system en azure-arc.
Selecteer Controleren + maken.
U kunt ook de quickstart Een beleid toewijzen - Portal gebruiken om een Kubernetes-beleid te zoeken en toe te wijzen. Zoek naar een Kubernetes-beleidsdefinitie in plaats van de voorbeeldcontrole-VM's.
Belangrijk
Ingebouwde beleidsdefinities zijn beschikbaar voor Kubernetes-clusters in categorie Kubernetes. Zie Kubernetes-voorbeelden voor een lijst met ingebouwde beleidsdefinities.
Beleidsevaluatie
De invoegtoepassing controleert elke 15 minuten de Azure Policy-service op wijzigingen in beleidstoewijzingen. Tijdens deze vernieuwingscyclus controleert de invoegtoepassing op wijzigingen. Met deze wijzigingentrigger worden de beperkingssjablonen en beperkingen gemaakt, bijgewerkt of verwijderd.
Als in een Kubernetes-cluster een naamruimte het juiste label voor het cluster heeft, worden de toegangsaanvragen met schendingen niet geweigerd. De resultaten van de nalevingsevaluatie zijn nog steeds beschikbaar.
- Kubernetes-cluster met Azure Arc:
admission.policy.azure.com/ignore
Notitie
Hoewel een clusterbeheerder mogelijk gemachtigd is om sjablonen voor beperkingen te maken en bij te werken en beperkingen te installeren door de Azure Policy-invoegtoepassing, worden deze scenario's niet ondersteund omdat handmatige updates worden overschreven. Gatekeeper blijft beleidsregels evalueren die bestonden voordat u de invoegtoepassing installeert en Azure Policy-beleidsdefinities toewijst.
Elke 15 minuten roept de invoegtoepassing een volledige scan van het cluster aan. Na het verzamelen van details van de volledige scan, en eventuele evaluaties in realtime door Gatekeeper van geprobeerde wijzigingen in het cluster, rapporteert de invoegtoepassing de resultaten terug naar Azure Policy voor opname in nalevingsgegevens, zoals elke Azure Policy-toewijzing. Alleen resultaten voor actieve beleidstoewijzingen worden geretourneerd tijdens de controlecyclus. Controleresultaten kunnen ook worden gezien als schendingen die worden vermeld in het statusveld van de mislukte beperking. Zie Onderdeeldetails voor resourceprovidermodi voor meer informatie over niet-compatibele resources.
Notitie
Elk nalevingsrapport in Azure Policy voor uw Kubernetes-clusters omvat alle schendingen in de afgelopen 45 minuten. De tijdstempel geeft aan wanneer er een schending is opgetreden.
Enkele andere overwegingen:
Als het clusterabonnement is geregistreerd bij Microsoft Defender voor Cloud, worden Microsoft Defender voor Cloud Kubernetes-beleid automatisch toegepast op het cluster.
Wanneer een beleid voor weigeren wordt toegepast op een cluster met bestaande Kubernetes-resources, blijft elke bestaande resource die niet compatibel is met het nieuwe beleid, nog steeds actief. Wanneer de niet-compatibele resource opnieuw wordt gepland op een ander knooppunt, blokkeert Gatekeeper het maken van de resource.
Wanneer een cluster een beleid voor weigeren heeft waarmee resources worden gevalideerd, krijgt de gebruiker geen afwijzingsbericht bij het maken van een implementatie. Denk bijvoorbeeld aan een Kubernetes-implementatie die pods bevat
replicasets
en bevat. Wanneer een gebruiker wordt uitgevoerdkubectl describe deployment $MY_DEPLOYMENT
, wordt er geen afwijzingsbericht geretourneerd als onderdeel van gebeurtenissen.kubectl describe replicasets.apps $MY_DEPLOYMENT
Retourneert echter de gebeurtenissen die zijn gekoppeld aan afwijzing.
Notitie
Init-containers kunnen worden opgenomen tijdens de beleidsevaluatie. Als u wilt zien of init-containers zijn opgenomen, raadpleegt u de CRD voor de volgende of een vergelijkbare declaratie:
input_containers[c] {
c := input.review.object.spec.initContainers[_]
}
Conflicten met beperkingssjablonen
Als beperkingssjablonen dezelfde naam voor de metagegevens van de resource hebben, maar de beleidsdefinitie verwijst naar de bron op verschillende locaties, worden de beleidsdefinities beschouwd als conflicterend. Voorbeeld: Twee beleidsdefinities verwijzen naar hetzelfde template.yaml
bestand dat is opgeslagen op verschillende bronlocaties, zoals het Azure Policy-sjabloonarchief (store.policy.core.windows.net
) en GitHub.
Wanneer beleidsdefinities en de bijbehorende beperkingssjablonen zijn toegewezen, maar nog niet op het cluster zijn geïnstalleerd en conflicteren, worden ze gerapporteerd als een conflict en worden ze pas in het cluster geïnstalleerd nadat het conflict is opgelost. Op dezelfde manier blijven bestaande beleidsdefinities en de bijbehorende beperkingssjablonen die zich al in het cluster bevinden die conflicteren met nieuw toegewezen beleidsdefinities normaal functioneren. Als een bestaande toewijzing wordt bijgewerkt en de beperkingssjabloon niet kan worden gesynchroniseerd, wordt het cluster ook gemarkeerd als een conflict. Zie de nalevingsredenen voor de AKS-resourceprovidermodus voor alle conflictberichten
Logboekregistratie
Als Kubernetes-controller/-container bewaren zowel de azure-policy - als gatekeeper-pods logboeken in het Kubernetes-cluster. In het algemeen kunnen azure-policy-logboeken worden gebruikt om problemen met beleidsopname op het cluster en nalevingsrapportage op te lossen. De gatekeeper-controller-manager-podlogboeken kunnen worden gebruikt om problemen met runtime op te lossen. De gatekeeper-audit podlogboeken kunnen worden gebruikt om problemen met controles van bestaande resources op te lossen. De logboeken kunnen worden weergegeven op de pagina Inzichten van het Kubernetes-cluster. Zie De prestaties van uw Kubernetes-cluster bewaken met Azure Monitor voor containers voor meer informatie.
Als u de invoegtoepassingslogboeken wilt weergeven, gebruikt u kubectl
:
# Get the azure-policy pod name installed in kube-system namespace
kubectl logs <azure-policy pod name> -n kube-system
# Get the gatekeeper pod name installed in gatekeeper-system namespace
kubectl logs <gatekeeper pod name> -n gatekeeper-system
Als u probeert problemen met een bepaalde ComplianceReasonCode op te lossen die wordt weergegeven in de nalevingsresultaten, kunt u in de podlogboeken van Azure Policy naar die code zoeken om de volledige bijbehorende fout te zien.
Raadpleeg Foutopsporing voor Gatekeeper in de Gatekeeper-documentatie voor meer informatie.
Gatekeeper-artefacten weergeven
Nadat de invoegtoepassing de beleidstoewijzingen heeft gedownload en de beperkingssjablonen en beperkingen voor het cluster hebt geïnstalleerd, worden er aantekeningen gemaakt bij azure Policy-informatie, zoals de beleidstoewijzings-id en de beleidsdefinitie-id. Voer de volgende stappen uit om uw client te configureren om de gerelateerde artefacten van de invoegtoepassing weer te geven:
kubeconfig
Instellen voor het cluster.Gebruik de volgende Azure CLI voor een Azure Kubernetes Service-cluster:
# Set context to the subscription az account set --subscription <YOUR-SUBSCRIPTION> # Save credentials for kubeconfig into .kube in your home folder az aks get-credentials --resource-group <RESOURCE-GROUP> --name <CLUSTER-NAME>
Test de clusterverbinding.
Voer de opdracht
kubectl cluster-info
uit. Bij een geslaagde uitvoering reageert elke service met een URL van waar deze wordt uitgevoerd.
De sjablonen voor beperkingen voor invoegtoepassingen weergeven
Als u beperkingensjablonen wilt weergeven die zijn gedownload door de invoegtoepassing, voert u de opdracht uit kubectl get constrainttemplates
.
Beperkingssjablonen die beginnen, k8sazure
zijn de sjablonen die door de invoegtoepassing zijn geïnstalleerd.
Bekijk de mutatiesjablonen voor invoegtoepassingen
Als u mutatiesjablonen wilt bekijken die zijn gedownload door de invoegtoepassing, voert u uit kubectl get assign
en kubectl get assignmetadata
kubectl get modifyset
.
Azure Policy-toewijzingen ophalen
Als u de toewijzing wilt identificeren tussen een beperkingssjabloon die is gedownload naar het cluster en de beleidsdefinitie, gebruikt u kubectl get constrainttemplates <TEMPLATE> -o yaml
. De resultaten zien er ongeveer als volgt uit:
apiVersion: templates.gatekeeper.sh/v1beta1
kind: ConstraintTemplate
metadata:
annotations:
azure-policy-definition-id: /subscriptions/<SUBID>/providers/Microsoft.Authorization/policyDefinitions/<GUID>
constraint-template-installed-by: azure-policy-addon
constraint-template: <URL-OF-YAML>
creationTimestamp: "2021-09-01T13:20:55Z"
generation: 1
managedFields:
- apiVersion: templates.gatekeeper.sh/v1beta1
fieldsType: FieldsV1
...
<SUBID>
is de abonnements-id en <GUID>
is de id van de toegewezen beleidsdefinitie.
<URL-OF-YAML>
is de bronlocatie van de beperkingssjabloon die door de invoegtoepassing is gedownload om op het cluster te installeren.
Beperkingen weergeven met betrekking tot een beperkingssjabloon
Zodra u de namen van de gedownloade beperkingssjablonen voor de invoegtoepassing hebt, kunt u de naam gebruiken om de gerelateerde beperkingen te bekijken. Gebruik kubectl get <constraintTemplateName>
dit om de lijst op te halen.
Beperkingen die door de invoegtoepassing zijn geïnstalleerd, beginnen met azurepolicy-
.
Details van beperking weergeven
De beperking bevat details over schendingen en toewijzingen aan de beleidsdefinitie en toewijzing. Als u de details wilt bekijken, gebruikt u kubectl get <CONSTRAINT-TEMPLATE> <CONSTRAINT> -o yaml
. De resultaten zien er ongeveer als volgt uit:
apiVersion: constraints.gatekeeper.sh/v1beta1
kind: K8sAzureContainerAllowedImages
metadata:
annotations:
azure-policy-assignment-id: /subscriptions/<SUB-ID>/resourceGroups/<RG-NAME>/providers/Microsoft.Authorization/policyAssignments/<ASSIGNMENT-GUID>
azure-policy-definition-id: /providers/Microsoft.Authorization/policyDefinitions/<DEFINITION-GUID>
azure-policy-definition-reference-id: ""
azure-policy-setdefinition-id: ""
constraint-installed-by: azure-policy-addon
constraint-url: <URL-OF-YAML>
creationTimestamp: "2021-09-01T13:20:55Z"
spec:
enforcementAction: deny
match:
excludedNamespaces:
- kube-system
- gatekeeper-system
- azure-arc
parameters:
imageRegex: ^.+azurecr.io/.+$
status:
auditTimestamp: "2021-09-01T13:48:16Z"
totalViolations: 32
violations:
- enforcementAction: deny
kind: Pod
message: Container image nginx for container hello-world has not been allowed.
name: hello-world-78f7bfd5b8-lmc5b
namespace: default
- enforcementAction: deny
kind: Pod
message: Container image nginx for container hello-world has not been allowed.
name: hellow-world-89f8bfd6b9-zkggg
Problemen met de invoegtoepassing oplossen
Zie de sectie Kubernetes van het artikel over probleemoplossing voor Azure Policy voor meer informatie over het oplossen van problemen met de invoegtoepassing voor Kubernetes.
Voor problemen met de Azure Policy-extensie voor arc-extensies gaat u naar:
Voor problemen met betrekking tot Azure Policy gaat u naar:
Azure Policy-invoegtoepassing voor AKS-wijzigingenlogboek
De invoegtoepassing van Azure Policy voor AKS heeft een versienummer dat de installatiekopieënversie van de invoegtoepassing aangeeft. Naarmate de functieondersteuning nieuw is geïntroduceerd in de invoegtoepassing, wordt het versienummer verhoogd.
In deze sectie kunt u zien welke invoegtoepassingsversie op uw cluster is geïnstalleerd en ook een historische tabel delen van de Versie van de Azure Policy-invoegtoepassing die per AKS-cluster is geïnstalleerd.
Bepalen welke invoegtoepassingsversie op uw cluster is geïnstalleerd
De Azure Policy-invoegtoepassing maakt gebruik van het standaard Semantische versiebeheerschema voor elke versie. U kunt de volgende opdracht uitvoeren om de gebruikte Versie van de Azure Policy-invoegtoepassing te identificeren: kubectl get pod azure-policy-<unique-pod-identifier> -n kube-system -o json | jq '.spec.containers[0].image'
Als u de Gatekeeper-versie wilt identificeren die door uw Azure Policy-invoegtoepassing wordt gebruikt, kunt u de volgende opdracht uitvoeren: kubectl get pod gatekeeper-controller-<unique-pod-identifier> -n gatekeeper-system -o json | jq '.spec.containers[0].image'
Als u ten slotte de AKS-clusterversie wilt identificeren die u gebruikt, volgt u de gekoppelde AKS-richtlijnen.
Beschikbare invoegtoepassingsversies per AKS-clusterversie
1.7.1
Inleiding tot CEL en VAPOR. Common Expression Language (CEL) is een systeemeigen kubernetes-expressietaal die kan worden gebruikt om validatieregels van een beleid te declareren. Het valideren van de functie Toelatingsbeleid (DAMP) biedt evaluatie van beleid in de structuur, vermindert de latentie van de toegangsaanvraag en verbetert de betrouwbaarheid en beschikbaarheid. De ondersteunde validatieacties omvatten Weigeren, Waarschuwen en Controleren. Aangepaste beleidscreatie voor CEL/VAPOR is toegestaan en bestaande gebruikers hoeven hun Rego niet te converteren naar CEL, omdat ze beide worden ondersteund en worden gebruikt om beleid af te dwingen. Als u CEL en VAPOR wilt gebruiken, moeten gebruikers zich inschrijven bij de functievlag AKS-AzurePolicyK8sNativeValidation
in de Microsoft.ContainerService
naamruimte. Raadpleeg de Gatekeeper-documentatie voor meer informatie.
Beveiligingsverbeteringen.
- Uitgebracht september 2024
- Kubernetes 1.27+ (DAMP-generatie wordt alleen ondersteund op 1.30+)
- Gatekeeper 3.17.1
1.7.0
Introductie van uitbreiding, een functie links naar links die u vooraf laat weten of uw workloadresources (implementaties, replicasets, taken, enzovoort) toelaatbare pods produceren. Uitbreiding mag het gedrag van uw beleid niet wijzigen; In plaats daarvan wordt de evaluatie van het beleid voor podbereik van Gatekeeper verschoven naar de toegangstijd van de workload in plaats van de toegangstijd van pods. Als u deze evaluatie wilt uitvoeren, moet er echter een what-if-pod worden gegenereerd en geëvalueerd die is gebaseerd op de podspecificatie die is gedefinieerd in de workload, die mogelijk onvolledige metagegevens bevat. De what-if-pod bevat bijvoorbeeld niet de juiste verwijzingen naar de eigenaar. Vanwege dit kleine risico dat beleidsgedrag verandert, introduceren we standaard uitbreiding als uitgeschakeld. Als u uitbreiding voor een bepaalde beleidsdefinitie wilt inschakelen, stelt u in op .policyRule.then.details.source
All
. Ingebouwde elementen worden binnenkort bijgewerkt om parameters van dit veld in te schakelen. Als u uw beleidsdefinitie test en ontdekt dat de wat-als-pod die wordt gegenereerd voor evaluatiedoeleinden onvolledig is, kunt u ook een mutatie met bron Generated
gebruiken om de wat-als-pods te muteren. Raadpleeg de Gatekeeper-documentatie voor meer informatie over deze optie.
Beveiligingsverbeteringen.
- Uitgebracht in juli 2024
- Kubernetes 1.27+
- Gatekeeper 3.16.3
1.6.1
Beveiligingsverbeteringen.
- Uitgebracht in mei 2024
- Gatekeeper 3.14.2
1.5.0
Beveiligingsverbeteringen.
- Uitgebracht in mei 2024
- Kubernetes 1.27+
- Gatekeeper 3.16.3
1.4.0
Maakt mutatie en externe gegevens standaard mogelijk. De extra muterende webhook en de verhoogde validatie van time-outlimiet voor webhook kan latentie toevoegen aan aanroepen in het ergste geval. Introduceert ook ondersteuning voor het weergeven van beleidsdefinities en het instellen van definitieversies in nalevingsresultaten.
- Uitgebracht in mei 2024
- Kubernetes 1.25+
- Gatekeeper 3.14.0
1.3.0
Introduceert foutstatus voor beleidsregels die fouten veroorzaken, zodat ze kunnen worden onderscheiden van beleidsregels in niet-compatibele statussen. Voegt ondersteuning toe voor v1-beperkingssjablonen en het gebruik van de parameter excludedNamespaces in mutatiebeleid. Hiermee wordt een foutstatuscontrole toegevoegd voor beperkingssjablonen na de installatie.
- Uitgebracht in februari 2024
- Kubernetes 1.25+
- Gatekeeper 3.14.0
1.2.1
- Uitgebracht in oktober 2023
- Kubernetes 1.25+
- Gatekeeper 3.13.3
1.1.0
- Uitgebracht in juli 2023
- Kubernetes 1.27+
- Gatekeeper 3.11.1
1.0.1
- Uitgebracht in juni 2023
- Kubernetes 1.24+
- Gatekeeper 3.11.1
1.0.0
Azure Policy voor Kubernetes ondersteunt nu mutatie om AKS-clusters op schaal te herstellen.
De invoegtoepassing verwijderen
De invoegtoepassing verwijderen uit AKS
Als u de Azure Policy-invoegtoepassing wilt verwijderen uit uw AKS-cluster, gebruikt u Azure Portal of Azure CLI:
Azure Portal
Start de AKS-service in Azure Portal door Alle services te selecteren en vervolgens Kubernetes-services te zoeken en te selecteren.
Selecteer uw AKS-cluster waar u de Azure Policy-invoegtoepassing wilt uitschakelen.
Selecteer Beleidsregels aan de linkerkant van de Kubernetes-servicepagina.
Selecteer op de hoofdpagina de knop Invoegtoepassing uitschakelen.
Azure-CLI
# Log in first with az login if you're not using Cloud Shell az aks disable-addons --addons azure-policy --name MyAKSCluster --resource-group MyResourceGroup
De invoegtoepassing verwijderen uit Kubernetes met Azure Arc
Notitie
Het Helm-model van de Azure Policy-invoegtoepassing is nu afgeschaft. U moet in plaats daarvan kiezen voor de Azure Policy-extensie voor Kubernetes met Azure Arc.
Als u de Azure Policy-invoegtoepassing en Gatekeeper wilt verwijderen uit uw Kubernetes-cluster met Azure Arc, voert u de volgende Helm-opdracht uit:
helm uninstall azure-policy-addon
De invoegtoepassing verwijderen uit de AKS-engine
Notitie
Het AKS Engine-product is nu afgeschaft voor klanten in de openbare Azure-cloud. Overweeg om Azure Kubernetes Service (AKS) te gebruiken voor beheerde Kubernetes of Cluster API Provider Azure voor zelfbeheerde Kubernetes. Er zijn geen nieuwe functies gepland; dit project wordt alleen bijgewerkt voor CVE's en vergelijkbaar, met Kubernetes 1.24 als de definitieve versie voor het ontvangen van updates.
Als u de Azure Policy-invoegtoepassing en Gatekeeper wilt verwijderen uit uw AKS Engine-cluster, gebruikt u de methode die overeenkomt met de manier waarop de invoegtoepassing is geïnstalleerd:
Als deze is geïnstalleerd door de eigenschap addons in te stellen in de clusterdefinitie voor AKS Engine:
Implementeer de clusterdefinitie opnieuw naar AKS Engine nadat u de eigenschap addons voor azure-policy hebt gewijzigd in false:
"addons": [ { "name": "azure-policy", "enabled": false } ]
Zie AKS Engine - Azure Policy-invoegtoepassing uitschakelen voor meer informatie.
Als deze is geïnstalleerd met Helm Charts, voert u de volgende Helm-opdracht uit:
helm uninstall azure-policy-addon
Beperkingen
- Raadpleeg de gedocumenteerde limieten van Azure Policy voor algemene Azure Policy-definities en toewijzingslimieten
- Azure Policy-invoegtoepassing voor Kubernetes kan alleen worden geïmplementeerd in Linux-knooppuntgroepen.
- Maximum aantal pods dat wordt ondersteund door de Azure Policy-invoegtoepassing per cluster: 10.000
- Maximum aantal niet-compatibele records per beleid per cluster: 500
- Maximum aantal niet-compatibele records per abonnement: 1 miljoen
- Installaties van Gatekeeper buiten de Azure Policy-invoegtoepassing worden niet ondersteund. Verwijder alle onderdelen die zijn geïnstalleerd door een eerdere Gatekeeper-installatie voordat u de Azure Policy-invoegtoepassing inschakelt.
- Redenen voor niet-naleving zijn niet beschikbaar voor de modus Microsoft.Kubernetes.Data Resource Provider. Gebruik onderdeeldetails.
- Uitzonderingen op onderdeelniveau worden niet ondersteund voor resourceprovidermodi. Ondersteuning voor parameters is beschikbaar in Azure Policy-definities om bepaalde naamruimten uit te sluiten en op te nemen.
- Het gebruik van de
metadata.gatekeeper.sh/requires-sync-data
aantekening in een beperkingssjabloon om de replicatie van gegevens van uw cluster in de OPA-cache te configureren, is momenteel alleen toegestaan voor ingebouwd beleid. De reden hiervoor is dat het resourcegebruik van Gatekeeper-pods aanzienlijk kan toenemen als dit niet zorgvuldig wordt gebruikt.
De Gatekeeper-configuratie configureren
Het wijzigen van de Gatekeeper-configuratie wordt niet ondersteund, omdat deze essentiële beveiligingsinstellingen bevat. Bewerkingen in de configuratie worden afgestemd.
Data.inventory gebruiken in beperkingssjablonen
Op dit moment maken verschillende ingebouwde beleidsregels gebruik van gegevensreplicatie, waarmee gebruikers bestaande on-clusterresources kunnen synchroniseren met de OPA-cache en ernaar kunnen verwijzen tijdens de evaluatie van een AdmissionReview
aanvraag. Beleidsregels voor gegevensreplicatie kunnen worden onderscheiden door de aanwezigheid van data.inventory
Rego en de aanwezigheid van de metadata.gatekeeper.sh/requires-sync-data
aantekening, die de Azure Policy-invoegtoepassing informeert welke resources in de cache moeten worden opgeslagen om beleidsevaluatie goed te laten werken. Dit proces verschilt van zelfstandige Gatekeeper, waarbij deze aantekening beschrijvend is, niet prescriptief.
Gegevensreplicatie wordt momenteel geblokkeerd voor gebruik in aangepaste beleidsdefinities, omdat het repliceren van resources met een hoog aantal exemplaren het resourcegebruik van Gatekeeper-pods aanzienlijk kan verhogen als ze niet zorgvuldig worden gebruikt. Er wordt een ConstraintTemplateInstallFailed
fout weergegeven bij het maken van een aangepaste beleidsdefinitie met een beperkingssjabloon met deze aantekening.
Als u de aantekening verwijdert, kan de fout die u ziet worden beperkt, maar de beleidsinvoegtoepassing synchroniseert geen vereiste resources voor die beperkingssjabloon in de cache. Uw beleid wordt dus geëvalueerd op basis van een lege data.inventory
waarde (ervan uitgaande dat er geen ingebouwde resources worden toegewezen waarmee de vereiste resources worden gerepliceerd). Dit leidt tot misleidende nalevingsresultaten. Zoals eerder vermeld, is het handmatig bewerken van de configuratie om de vereiste resources in de cache op te slaan ook niet toegestaan.
De volgende beperkingen gelden alleen voor de Azure Policy-invoegtoepassing voor AKS:
- Beveiligingsbeleid voor AKS-pods en de Azure Policy-invoegtoepassing voor AKS kunnen niet beide worden ingeschakeld. Zie AKS-podbeveiligingsbeperking voor meer informatie.
- Naamruimten die automatisch worden uitgesloten door de Azure Policy-invoegtoepassing voor evaluatie: kube-system en gatekeeper-system.
Veelgestelde vragen
Wat implementeert de Azure Policy-invoegtoepassing/Azure Policy-extensie bij de installatie op mijn cluster?
Voor de Azure Policy-invoegtoepassing moeten drie Gatekeeper-onderdelen worden uitgevoerd: één auditpod en twee webhookpodreplica's. Er is ook één Azure Policy-pod en één Azure Policy-webhookpod geïnstalleerd.
Hoeveel resourceverbruik moet ik verwachten van de Azure Policy-invoegtoepassing/-extensie voor elk cluster?
De Azure Policy voor Kubernetes-onderdelen die op uw cluster worden uitgevoerd, verbruiken meer resources naarmate het aantal Kubernetes-resources en beleidstoewijzingen toeneemt in het cluster, waarvoor controle- en afdwingingsbewerkingen vereist zijn.
Hieronder vindt u schattingen om u te helpen bij het plannen:
- Voor minder dan 500 pods in één cluster met maximaal 20 beperkingen: twee vCPU's en 350 MB geheugen per onderdeel.
- Voor meer dan 500 pods in één cluster met een maximum van 40 beperkingen: drie vCPU's en 600 MB geheugen per onderdeel.
Kunnen Azure Policy voor Kubernetes-definities worden toegepast op Windows-pods?
Windows-pods bieden geen ondersteuning voor beveiligingscontexten. Sommige Azure Policy-definities, zoals het niet toewijzen van basisbevoegdheden, kunnen dus niet worden geëscaleerd in Windows-pods en zijn alleen van toepassing op Linux-pods.
Welk type diagnostische gegevens wordt verzameld door de Azure Policy-invoegtoepassing?
De Azure Policy-invoegtoepassing voor Kubernetes verzamelt beperkte diagnostische gegevens voor clusters. Deze diagnostische gegevens zijn essentiële technische gegevens met betrekking tot software en prestaties. De gegevens worden op de volgende manieren gebruikt:
- Houd de Azure Policy-invoegtoepassing up-to-date.
- Zorg ervoor dat de Azure Policy-invoegtoepassing veilig, betrouwbaar en goed presteert.
- Azure Policy-invoegtoepassing verbeteren: via de statistische analyse van het gebruik van de invoegtoepassing.
De gegevens die door de invoegtoepassing worden verzameld, zijn geen persoonlijke gegevens. De volgende gegevens worden momenteel verzameld:
- Azure Policy-agentversie
- Clustertype
- Clusterregio
- Clusterresourcegroep
- Clusterresource-id
- Clusterabonnement-id
- Cluster-besturingssysteem (voorbeeld: Linux)
- Clusterstad (voorbeeld: Seattle)
- Clusterstatus of provincie (voorbeeld: Washington)
- Clusterland of -regio (voorbeeld: Verenigde Staten)
- Uitzonderingen/fouten die zijn opgetreden door de Azure Policy-invoegtoepassing tijdens de installatie van de agent bij beleidsevaluatie
- Aantal Gatekeeper-beleidsdefinities dat niet is geïnstalleerd door de Azure Policy-invoegtoepassing
Wat zijn algemene aanbevolen procedures om rekening mee te houden bij het installeren van de Azure Policy-invoegtoepassing?
- Gebruik een systeemknooppuntgroep met
CriticalAddonsOnly
taint om Gatekeeper-pods te plannen. Zie Systeemknooppuntgroepen gebruiken voor meer informatie. - Uitgaand verkeer van uw AKS-clusters beveiligen. Zie Uitgaand verkeer voor clusterknooppunten beheren voor meer informatie.
- Als het cluster is
aad-pod-identity
ingeschakeld, wijzigen NMI-pods (Node Managed Identity) de knooppunteniptables
om aanroepen naar het Azure Instance Metadata-eindpunt te onderscheppen. Deze configuratie betekent dat elke aanvraag die is ingediend bij het eindpunt metagegevens wordt onderschept door NMI, zelfs als de pod niet wordt gebruiktaad-pod-identity
. AzurePodIdentityException
CRD kan worden geconfigureerd om te informerenaad-pod-identity
dat aanvragen naar het eindpunt metagegevens afkomstig van een pod die overeenkomt met labels die zijn gedefinieerd in CRD, moeten worden geproxied zonder dat er verwerking in NMI wordt uitgevoerd. De systeempods metkubernetes.azure.com/managedby: aks
label in kube-system-naamruimte moeten worden uitgeslotenaad-pod-identity
door deAzurePodIdentityException
CRD te configureren. Zie Aad-pod-identity uitschakelen voor een specifieke pod of toepassing voor meer informatie. Als u een uitzondering wilt configureren, installeert u de YAML van de microfoon-uitzondering.
Volgende stappen
- Bekijk voorbeelden in Azure Policy-voorbeelden.
- Bekijk de structuur van Azure Policy-definities.
- Lees Informatie over de effecten van het beleid.
- Meer informatie over het programmatisch maken van beleid.
- Meer informatie over het ophalen van nalevingsgegevens.
- Ontdek hoe u niet-compatibele resources kunt herstellen.
- Bekijk wat een beheergroep is met Uw resources organiseren met Azure-beheergroepen.