Delen via


Implementatiebeveiligingen gebruiken om best practices af te dwingen in Azure Kubernetes Service (AKS) (preview)

In dit artikel leest u hoe u implementatiebeveiligingen gebruikt om best practices af te dwingen voor een AKS-cluster (Azure Kubernetes Service).

Overzicht

Tijdens de ontwikkelingslevenscyclus is het gebruikelijk dat er fouten, problemen en andere problemen optreden als de eerste implementatie van uw Kubernetes-resources onjuiste configuraties bevat. Om de belasting van Kubernetes-ontwikkeling te vereenvoudigen, biedt Azure Kubernetes Service (AKS) implementatiebeveiligingen (preview). Met implementatiebeveiligingen worden aanbevolen procedures voor Kubernetes in uw AKS-cluster afgedwongen via Azure Policy-besturingselementen.

Implementatiebeveiligingen bieden twee configuratieniveaus:

  • Warning: Geeft waarschuwingsberichten weer in de codeterminal om u te waarschuwen voor eventuele niet-compatibele clusterconfiguraties, maar staat de aanvraag nog steeds toe.
  • Enforcement: Dwingt compatibele configuraties af door implementaties te weigeren en dempen als ze niet voldoen aan de aanbevolen procedures.

Nadat u de implementatiebeveiligingen voor 'Waarschuwing' of 'Afdwingen' hebt geconfigureerd, worden uw clusters programmatisch gecontroleerd tijdens het maken of bijwerken van uw clusters voor naleving. Implementatiebeveiligingen geven ook geaggregeerde nalevingsgegevens weer voor uw workloads op resourceniveau via het nalevingsdashboard van Azure Policy in Azure Portal of in uw CLI of terminal. Het uitvoeren van een niet-compatibele workload geeft aan dat uw cluster geen aanbevolen procedures volgt en dat workloads in uw cluster risico lopen op problemen die worden veroorzaakt door de clusterconfiguratie.

Belangrijk

AKS preview-functies zijn beschikbaar op selfservice, opt-in basis. Previews worden geleverd 'zoals is' en 'als beschikbaar' en ze worden uitgesloten van de serviceovereenkomsten en beperkte garantie. AKS-previews worden gedeeltelijk gedekt door klantondersteuning op basis van best effort. Daarom zijn deze functies niet bedoeld voor productiegebruik. Zie de volgende ondersteuningsartikelen voor meer informatie:

Vereisten

  • U moet de Azure Policy-invoegtoepassing voor AKS inschakelen. Zie Azure Policy inschakelen in uw AKS-cluster voor meer informatie.

  • Als u de implementatiebeveiligingen wilt configureren, moet u versie 2.0.0b1 of hoger van de aks-preview extensie hebben. Zie De CLI-extensie aks-preview installeren om de extensie te installeren. We raden u ook aan om de Azure CLI bij te werken om ervoor te zorgen dat u de nieuwste versie hebt geïnstalleerd.

  • Als u de configuratie voor implementatiebeveiligingen wilt maken en wijzigen, hebt u een abonnement met de volgende machtigingen voor uw AKS-cluster nodig:

    • Microsoft.Authorization/policyAssignments/write
    • Microsoft.Authorization/policyAssignments/read
  • U moet de functievlag voor de implementatiebeveiliging registreren. Als u de functievlag wilt registreren, raadpleegt u De functievlag registreren voor de implementatiebeveiliging.

De CLI-extensie aks-preview installeren

  1. Installeer de aks-preview CLI-extensie met behulp van de az extension add opdracht.

    az extension add --name aks-preview
    
  2. Werk de extensie bij om ervoor te zorgen dat u de nieuwste versie hebt geïnstalleerd met behulp van de az extension update opdracht.

    az extension update --name aks-preview
    

De functievlag voor de implementatiebeveiliging registreren

  1. Registreer de SafeguardsPreview functievlag met behulp van de az feature register opdracht.

    az feature register --namespace Microsoft.ContainerService --name SafeguardsPreview
    

    Het duurt enkele minuten voordat de status Geregistreerd wordt weergegeven.

  2. Controleer de registratiestatus met behulp van de az feature show opdracht.

    az feature show --namespace Microsoft.ContainerService --name SafeguardsPreview
    
  3. Wanneer de status Geregistreerd weergeeft, vernieuwt u de registratie van de Microsoft.ContainerService-resourceprovider met behulp van de az provider register opdracht.

    az provider register --namespace Microsoft.ContainerService
    

Beveiligingsbeleid voor implementaties

Notitie

De ReadOnlyRootFilesystem beleidsregels en RootfilesystemInitContainers beleidsregels zijn momenteel alleen beschikbaar in Linux.

De volgende tabel bevat de beleidsregels die actief worden en de Kubernetes-resources waarop ze zijn gericht wanneer u implementatiebeveiligingen inschakelt. U kunt de momenteel beschikbare implementatiebeveiligingen in Azure Portal weergeven als een Azure Policy-definitie of in ingebouwde Azure Policy-definities voor Azure Kubernetes Service. De bedoeling achter deze verzameling is om een algemene en algemene lijst met aanbevolen procedures te maken die van toepassing zijn op de meeste gebruikers en gebruiksvoorbeelden.

Beveiligingsbeleid voor implementaties Doel-Kubernetes-resource Mutatieresultaat indien beschikbaar
[Preview]: Kan afzonderlijke knooppunten niet bewerken Knooppunt N.v.t.
Cpu- en geheugenresourcelimieten voor Kubernetes-clustercontainers mogen niet groter zijn dan de opgegeven limieten Pod Stelt cpu-resourcelimieten in op 500 m als dit niet is ingesteld en stelt geheugenlimieten in op 500Mi als er geen pad aanwezig is
[Preview]: er moeten antiaffiniteitsregels zijn ingesteld Implementatie, StatefulSet, ReplicationController, ReplicaSet N.v.t.
[Preview]: geen specifieke AKS-labels Implementatie, StatefulSet, Replicaset N.v.t.
Kubernetes-clustercontainers mogen alleen toegestane installatiekopieën gebruiken Pod N.v.t.
[Preview]: Taints van gereserveerde systeemgroep Knooppunt Hiermee verwijdert u de CriticalAddonsOnly taint uit een gebruikersknooppuntgroep als deze niet is ingesteld. AKS gebruikt de CriticalAddonsOnly taint om klantpods weg te houden van de systeemgroep. Deze configuratie zorgt voor een duidelijke scheiding tussen AKS-onderdelen en klantpods en voorkomt verwijdering van klantpods die de CriticalAddonsOnly taint niet tolereren.
Zorg ervoor dat clustercontainers gereedheids- of livenesstests hebben geconfigureerd Pod N.v.t.
Kubernetes-clusters moeten gebruikmaken van het CSI-stuurprogramma StorageClass (Container Storage Interface) StorageClass N.v.t.
[Preview]: Kubernetes-clustercontainers mogen alleen installatiekopieën ophalen wanneer er pull-geheimen voor installatiekopieën aanwezig zijn Pod N.v.t.
[Preview]: Kubernetes-cluster moet nauwkeurige budgetten voor podonderbreking implementeren Implementatie, ReplicaSet, StatefulSet Stelt maxUnavailable in PodDisruptionBudget-resource in op 1.
[Preview]: Kubernetes-clusterservices moeten gebruikmaken van unieke selectors Service N.v.t.
[Preview]: ReadOnlyRootFilesystem in podspecificatie is ingesteld op waar Pod Hiermee stelt u readOnlyRootFilesystem in de podspecificatie in op true als deze niet is ingesteld. Deze configuratie voorkomt dat containers naar het hoofdbestandssysteem schrijven.
[Preview]: RootfilesystemInitContainers in podspecificatie is ingesteld op waar Pod Hiermee stelt u rootFilesystemInitContainers in de podspecificatie in op true als deze niet is ingesteld.
[Preview]: Containerinstallatiekopieën van Kubernetes-clusters mogen geen meest recente installatiekopieën tag bevatten Implementatie, StatefulSet, ReplicationController, ReplicaSet N.v.t.
[Preview]: Kubernetes-clustercontainerinstallatiekopieën moeten de preStop-hook bevatten Implementatie, StatefulSet, ReplicationController, ReplicaSet N.v.t.

Als u een idee of aanvraag voor implementatiebeveiliging wilt indienen, opent u een probleem in de GitHub-opslagplaats van AKS en voegt u dit toe [deployment safeguards request] aan het begin van de titel.

Implementatiebeveiligingen inschakelen

Notitie

Als u Azure Policy voor het eerst hebt ingeschakeld voor het gebruik van implementatiebeveiligingen, moet u mogelijk maximaal 20 minuten wachten totdat Azure Policy van kracht wordt.

Als u het beveiligingsniveau van de implementatie Enforcement gebruikt, betekent dit dat u zich aanmeldt voor implementaties die worden geblokkeerd en gemuteerd. Houd er rekening mee hoe dit beleid kan werken met uw AKS-cluster voordat u dit inschakelt Enforcement.

Implementatiebeveiligingen inschakelen op een nieuw cluster

Schakel de implementatiebeveiligingen in op een nieuw cluster met behulp van de az aks create opdracht met de --safeguards-level en --safeguards-version vlaggen.

Als u waarschuwingen voor niet-naleving wilt ontvangen, stelt u de --safeguards-level optie in op Warning. Als u alle niet-compatibele implementaties wilt weigeren of dempen, stelt u deze in op Enforcement. Als u waarschuwingen wilt ontvangen, stelt u de knop --safeguards-level 'Waarschuwing' in. Als u alle implementaties wilt weigeren of dempen die niet voldoen aan de implementatiebeveiligingen, stelt u het in --safeguards-level op 'Afdwingen'. Als u de versie van de implementatiebeveiliging wilt instellen, gebruikt u de --safeguards-version vlag. Momenteel is V2.0.0 de nieuwste versie van de implementatiebeveiligingen.

az aks create \
    --name myAKSCluster \
    --resource-group myResourceGroup \
    --enable-addons azure-policy \
    --safeguards-level Warning \
    --safeguards-version v2.0.0 \
    --generate-ssh-keys

Implementatiebeveiligingen inschakelen op een bestaand cluster

Schakel de implementatiebeveiligingen in op een bestaand cluster waarvoor de Azure Policy-invoegtoepassing is ingeschakeld met behulp van de az aks update opdracht en --safeguards-level --safeguards-version vlaggen. Als u waarschuwingen voor niet-naleving wilt ontvangen, stelt u de --safeguards-level optie in op Warning. Als u alle niet-compatibele implementaties wilt weigeren of dempen, stelt u deze in op Enforcement.

az aks update --name myAKSCluster --resource-group myResourceGroup --safeguards-level Enforcement --safeguards-version v2.0.0

Als u het niveau van de implementatiebeveiliging van een bestaand cluster wilt bijwerken, gebruikt u de az aks update opdracht waarbij de --safeguards-level vlag is ingesteld op Warning of Enforcement.

az aks update --name myAKSCluster --resource-group myResourceGroup --safeguards-level Enforcement

Naamruimten uitsluiten

U kunt ook bepaalde naamruimten uitsluiten van implementatiebeveiligingen. Wanneer u een naamruimte uitsluit, wordt de activiteit in die naamruimte niet beïnvloed door implementatiewaarschuwingen of afdwingingswaarschuwingen.

Als u bijvoorbeeld de naamruimten wilt uitsluiten en ns2een door komma's gescheiden lijst met naamruimten ns1 met de --safeguards-excluded-ns vlag wilt gebruiken, zoals wordt weergegeven in het volgende voorbeeld:

az aks update --name myAKSCluster --resource-group myResourceGroup --safeguards-level Warning --safeguards-version v2.0.0 --safeguards-excluded-ns ns1,ns2 

De beveiligingsversie van uw implementatie bijwerken

Notitie

v2.0.0 is de nieuwste versie van de implementatiebeveiligingen.

Werk de versie van uw implementatiebeveiliging bij met behulp van de az aks update opdracht, waarbij de --safeguards-version vlag is ingesteld op de nieuwe versie. In het volgende voorbeeld wordt een bestaand cluster bijgewerkt om versie 2.0.0 te gebruiken:

az aks update --name myAKSCluster --resource-group myResourceGroup --safeguards-version v2.0.0

Naleving tussen clusters controleren

Nadat u uw Kubernetes-manifest hebt geïmplementeerd, ziet u waarschuwingen of een mogelijk denial-bericht in uw CLI of terminal als het cluster niet voldoet aan de implementatiebeveiligingen, zoals wordt weergegeven in de volgende voorbeelden:

Waarschuwing

$ kubectl apply -f pod.yml
Warning: [azurepolicy-k8sazurev2containerenforceprob-0e8a839bcd103e7b96a8] Container <my-container> in your Pod <my-pod> has no <livenessProbe>. Required probes: ["readinessProbe", "livenessProbe"]
Warning: [azurepolicy-k8sazurev2containerenforceprob-0e8a839bcd103e7b96a8] Container <my-container> in your Pod <my-pod> has no <readinessProbe>. Required probes: ["readinessProbe", "livenessProbe"]
Warning: [azurepolicy-k8sazurev1restrictedlabels-67c4210cc58f28acdfdb] Label <{"kubernetes.azure.com"}> is reserved for AKS use only
Warning: [azurepolicy-k8sazurev3containerlimits-a8754961dbd4c1d8b49d] container <my-container> has no resource limits
Warning: [azurepolicy-k8sazurev1containerrestrictedi-bde07e1776cbcc9aa8b8] my-pod in default does not have imagePullSecrets. Unauthenticated image pulls are not recommended.
pod/my-pod created

Handhaving

Met implementatiebeveiligingsmutaties muteert het Enforcement niveau uw Kubernetes-resources indien van toepassing. Uw Kubernetes-resources moeten echter nog steeds alle beveiligingsmaatregelen doorgeven om te kunnen worden geïmplementeerd. Als een beveiligingsbeleid mislukt, wordt uw resource geweigerd en wordt deze niet geïmplementeerd.

$ kubectl apply -f pod.yml
Error from server (Forbidden): error when creating ".\pod.yml": admission webhook "validation.gatekeeper.sh" denied the request: [azurepolicy-k8sazurev2containerenforceprob-0e8a839bcd103e7b96a8] Container <my-container> in your Pod <my-pod> has no <livenessProbe>. Required probes: ["readinessProbe", "livenessProbe"]
[azurepolicy-k8sazurev2containerenforceprob-0e8a839bcd103e7b96a8] Container <my-container> in your Pod <my-pod> has no <readinessProbe>. Required probes: ["readinessProbe", "livenessProbe"]
[azurepolicy-k8sazurev2containerallowedimag-1ff6d14b2f8da22019d7] Container image my-image for container my-container has not been allowed.
[azurepolicy-k8sazurev1restrictedlabels-67c4210cc58f28acdfdb] Label <{"kubernetes.azure.com"}> is reserved for AKS use only
[azurepolicy-k8sazurev1containerrestrictedi-bde07e1776cbcc9aa8b8] my-pod in default does not have imagePullSecrets. Unauthenticated image pulls are not recommended.

Als uw Kubernetes-resources voldoen aan de toepasselijke mutatiebeveiligingen en aan alle andere veiligheidsvereisten voldoen, worden ze geïmplementeerd, zoals wordt weergegeven in het volgende voorbeeld:

$ kubectl apply -f pod.yml
pod/my-pod created

Naleving controleren in clusters met behulp van het Azure Policy-dashboard

Als u wilt controleren of de implementatiebeveiligingen zijn toegepast en om de naleving van uw cluster te controleren, gaat u naar de azure-portalpagina voor uw cluster en selecteert u Beleid en gaat u vervolgens naar Azure Policy.

Selecteer in de lijst met beleidsregels en initiatieven het initiatief dat is gekoppeld aan de implementatiebeveiligingen. U ziet een dashboard met de nalevingsstatus in uw AKS-cluster.

Notitie

Als u de naleving in uw AKS-cluster goed wilt beoordelen, moet het Azure Policy-initiatief zijn afgestemd op de resourcegroep van uw cluster.

Implementatiebeveiligingen uitschakelen

Schakel de implementatiebeveiligingen op uw cluster uit met behulp van de az aks update opdracht en stel de opdracht in --safeguards-level op Off.

az aks update --name myAKSCluster --resource-group myResourceGroup --safeguards-level Off

--

Veelgestelde vragen

Ik heb implementatiebeveiligingen ingeschakeld met Azure Policy voor de eerste keer. Waarom zie ik geen waarschuwingen? Waarom worden mijn pods niet geweigerd?

Het kan tot 35 minuten duren voordat Azure Policy is gesynchroniseerd met uw cluster nadat het voor het eerst is ingeschakeld.

Ik ben net overgeschakeld van Waarschuwing naar Afdwinging. Wordt dit onmiddellijk van kracht?

Wanneer u overschakelt naar beveiligingsniveaus voor implementaties, moet u mogelijk maximaal 15 minuten wachten totdat het nieuwe niveau van kracht wordt.

Kan ik mijn eigen mutaties creëren?

Nee Als u een idee hebt voor een beveiliging, opent u een probleem in de GitHub-opslagplaats van AKS en voegt u dit toe [deployment safeguards request] aan het begin van de titel.

Kan ik kiezen en kiezen welke mutaties ik wil in Afdwinging?

Nee Implementatiebeveiligingen zijn alles of niets. Zodra u Waarschuwing of Afdwinging hebt ingeschakeld, zijn alle beveiligingsmaatregelen actief.

Waarom is mijn implementatieresource toegelaten, ook al heeft deze geen aanbevolen procedures gevolgd?

Implementatiebeveiligingen dwingen best practice-standaarden af via Azure Policy-besturingselementen en hebben beleidsregels die worden gevalideerd op basis van Kubernetes-resources. Azure Policy breidt Gatekeeper uit om clusteronderdelen te evalueren en af te dwingen. Gatekeeper-afdwinging werkt momenteel ook in een fail-open model. Omdat er geen garantie is dat Gatekeeper op onze netwerkaanroep reageert, zorgen we ervoor dat in dat geval de validatie wordt overgeslagen, zodat de weigering uw implementaties niet blokkeert.

Zie workloadvalidatie in Gatekeeper voor meer informatie.

Volgende stappen