Förstå Azure Policy för Kubernetes-kluster

Azure Policy utökar Gatekeeper v3, en webhook för antagningskontrollant för Open Policy Agent (OPA), för att tillämpa framtvinganden och skydd i stor skala på dina kluster på ett centraliserat och konsekvent sätt. Azure Policy gör det möjligt att hantera och rapportera om kompatibilitetstillståndet för kubernetes-kluster från en och samma plats. Tillägget har följande funktioner:

  • Kontrollerar Azure Policy tjänst för principtilldelningar till klustret.
  • Distribuerar principdefinitioner till klustret som begränsningsmall och begränsar anpassade resurser.
  • Rapporterar gransknings- och efterlevnadsinformation tillbaka Azure Policy tjänsten.

Azure Policy för Kubernetes stöder följande klustermiljöer:

Viktigt

Tilläggen för AKS Engine och Arc-aktiverade Kubernetes finns som förhandsversion. Azure Policy kubernetes stöder endast Linux-nodpooler och inbyggda principdefinitioner (anpassade principdefinitioner är en offentlig förhandsversionsfunktion). Inbyggda principdefinitioner finns i Kubernetes-kategorin. De begränsade principdefinitionerna för förhandsversionen med EnforceOPAConstraint- och EnforceRegoPolicy-effekten och den relaterade Kubernetes Service-kategorin är inaktuella. Använd i stället effekterna granska och neka med resursproviderläget Microsoft.Kubernetes.Data .

Översikt

Aktivera och använda Azure Policy med kubernetes-klustret genom att utföra följande åtgärder:

  1. Konfigurera Kubernetes-klustret och installera tillägget:

    Anteckning

    Vanliga problem med installationen finns i Felsöka Azure Policy-tillägget.

  2. Förstå Azure Policy för Kubernetes

  3. Tilldela en definition till ditt Kubernetes-kluster

  4. Vänta på validering

Begränsningar

Följande allmänna begränsningar gäller för Azure Policy för Kubernetes-kluster:

  • Azure Policy-tillägg för Kubernetes stöds på Kubernetes version 1.14 eller senare.
  • Azure Policy-tillägg för Kubernetes kan bara distribueras till Linux-nodpooler.
  • Endast inbyggda principdefinitioner stöds. Anpassade principdefinitioner är en offentlig förhandsgranskningsfunktion.
  • Maximalt antal poddar som stöds av Azure Policy-tillägget: 10 000
  • Maximalt antal icke-kompatibla poster per princip per kluster: 500
  • Maximalt antal icke-kompatibla poster per prenumeration: 1 miljon
  • Installationer av Gatekeeper utanför Azure Policy-tillägget stöds inte. Avinstallera alla komponenter som installerats av en tidigare Gatekeeper-installation innan Azure Policy-tillägget.
  • Orsaker till in kompatibilitet är inte tillgängliga för Microsoft.Kubernetes.Data resursproviderläget. Använd komponentinformation.
  • Undantag på komponentnivå stöds inte för resursproviderlägen.

Följande begränsningar gäller endast för Azure Policy för AKS:

Rekommendationer

Följande är allmänna rekommendationer för att använda Azure Policy-tillägget:

  • Tillägget Azure Policy kräver tre Gatekeeper-komponenter för körning: en granskningspodd och två webhook-poddrepliker. Dessa komponenter förbrukar fler resurser när antalet Kubernetes-resurser och principtilldelningar ökar i klustret, vilket kräver gransknings- och tvingande åtgärder.

    • För färre än 500 poddar i ett enda kluster med högst 20 begränsningar: två virtuella processorer och 350 MB minne per komponent.
    • För fler än 500 poddar i ett enda kluster med högst 40 begränsningar: tre virtuella processorer och 600 MB minne per komponent.
  • Windows poddar stöder inte säkerhetskontexterna. Därför kan vissa Azure Policy-definitioner, till exempel att inte tillåta rotprivilegier, inte eskaleras i Windows poddar och endast tillämpas på Linux-poddar.

Följande rekommendation gäller endast för AKS och Azure Policy-tillägget:

  • Använd systemnodpoolen med CriticalAddonsOnly taint för att schemalägga Gatekeeper-poddar. Mer information finns i Använda systemnodpooler.
  • Skydda utgående trafik från dina AKS-kluster. Mer information finns i Kontrollera utgående trafik för klusternoder.
  • Om klustret har aad-pod-identity aktiverats ändrar Hanterad identitet för noder (NMI) noderna iptables för att fånga upp anrop till Azure Instance Metadata-slutpunkten. Den här konfigurationen innebär att alla förfrågningar som görs till metadataslutpunkten fångas upp av NMI även om podden inte använder aad-pod-identity . AzurePodIdentityException CRD kan konfigureras för att informera om att alla begäranden till metadataslutpunkten som kommer från en podd som matchar etiketter som definierats i CRD ska proxyas utan någon bearbetning i aad-pod-identity NMI. Systempoddar med etiketten kubernetes.azure.com/managedby: aks i kube-system-namnområdet bör undantas i genom att aad-pod-identity konfigurera CRD för AzurePodIdentityException. Mer information finns i Inaktivera aad-pod-identity för en specifik podd eller ett visst program. Om du vill konfigurera ett undantag installerar du YAML-undantagsfelet mic.

Installera Azure Policy för AKS

Innan du installerar Azure Policy-tillägget eller aktiverar någon av tjänstfunktionerna måste din prenumeration aktivera Resursproviders för Microsoft.PolicyInsights.

  1. Azure CLI version 2.12.0 eller senare måste vara installerat och konfigurerat. Kör az --version för att hitta versionen. Om du behöver installera eller uppgradera kan du läsa informationen i Installera Azure CLI.

  2. Registrera resursproviders och förhandsgranskningsfunktioner.

    • Azure Portal:

      Registrera resursproviders för Microsoft.PolicyInsights. Anvisningar finns i Resursproviders och typer.

    • 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
      
  3. Om begränsade principdefinitioner för förhandsversionen har installerats tar du bort tillägget med knappen Inaktivera i AKS-klustret under sidan Principer.

  4. AKS-klustret måste vara version 1.14 eller senare. Använd följande skript för att verifiera din AKS-klusterversion:

    # Log in first with az login if you're not using Cloud Shell
    
    # Look for the value in kubernetesVersion
    az aks list
    
  5. Installera version 2.12.0 eller senare av Azure CLI. Mer information finns i Installera Azure CLI.

När ovanstående nödvändiga steg har slutförts installerar du Azure Policy-tillägget i det AKS-kluster som du vill hantera.

  • Azure Portal

    1. Starta AKS-tjänsten i Azure Portal genom att välja Alla tjänster och sedan söka efter och välja Kubernetes-tjänster.

    2. Välj ett av dina AKS-kluster.

    3. Välj Principer till vänster på Kubernetes-tjänstsidan.

    4. På huvudsidan väljer du knappen Aktivera tillägg.

  • 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
    

Kontrollera att installationen av tillägget lyckades och att poddarna azure-policy och gatekeeper körs genom att köra följande kommando:

# 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

Kontrollera slutligen att det senaste tillägget är installerat genom att köra det här Azure CLI-kommandot. Ersätt med namnet på resursgruppen och med namnet på <rg> <cluster-name> ditt AKS-kluster: az aks show --query addonProfiles.azurePolicy -g <rg> -n <cluster-name> . Resultatet bör se ut ungefär som följande utdata:

{
        "config": null,
        "enabled": true,
        "identity": null
}

Installera Azure Policy för Azure Arc aktiverat Kubernetes (förhandsversion)

Azure Policy för Kubernetes gör det möjligt att hantera och rapportera om kompatibilitetstillståndet för kubernetes-kluster från en och samma plats.

Den här artikeln beskriver hur du skapar, visar tilläggsstatusoch tar bort Azure Policy för Kubernetes-tillägget.

En översikt över tilläggsplattformen finns i Azure Arc klustertillägg.

Förutsättningar

Obs! Om du redan har distribuerat Azure Policy för Kubernetes i ett Azure Arc-kluster med Hjälp av Helm direkt utan tillägg följer du anvisningarna i listan för att ta bort Helm-diagrammet. När borttagningen är klar kan du fortsätta.

  1. Se till att Kubernetes-klustret är en distribution som stöds.

    Obs! Azure Policy för Arc-tillägg stöds på följande Kubernetes-distributioner.

  2. Kontrollera att du har uppfyllt alla vanliga krav för Kubernetes-tillägg som anges här, inklusive att ansluta klustret till Azure Arc.

    Obs! Azure Policy stöds för Arc-aktiverade Kubernetes-kluster i dessa regioner.

  3. Öppna portar för Azure Policy tillägget. Tillägget Azure Policy använder dessa domäner och portar för att hämta principdefinitioner och tilldelningar och rapportera kompatibilitet för klustret tillbaka till Azure Policy.

    Domain Port
    data.policy.core.windows.net 443
    store.policy.core.windows.net 443
    login.windows.net 443
    dc.services.visualstudio.com 443
  4. Innan du installerar Azure Policy-tillägget eller aktiverar någon av tjänstfunktionerna måste din prenumeration aktivera resursproviders för Microsoft.PolicyInsights.

    Obs! Om du vill aktivera resursprovidern följer du stegen i Resursproviders och resurstyper eller kör antingen Azure CLI eller Azure PowerShell kommandot:

    • 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'
      

Skapa Azure Policy tillägg

Observera följande när du Azure Policy när du skapar tillägget:

  • Automatisk uppgradering är aktiverat som standard, vilket uppdaterar Azure Policy delversion av tillägget om några nya ändringar distribueras.
  • Alla proxyvariabler som skickas som connectedk8s parametrar till sprids till Azure Policy för att stödja utgående proxy.

Om du vill skapa en tilläggsinstans för ditt Arc-aktiverade kluster kör du följande kommando och <> ersätter med dina värden:

az k8s-extension create --cluster-type connectedClusters --cluster-name <CLUSTER_NAME> --resource-group <RESOURCE_GROUP> --extension-type Microsoft.PolicyInsights --name <EXTENSION_INSTANCE_NAME>

Exempel:

az k8s-extension create --cluster-type connectedClusters --cluster-name my-test-cluster --resource-group my-test-rg --extension-type Microsoft.PolicyInsights --name azurepolicy

Exempel på utdata:

{
  "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"
}

Visa Azure Policy tillägg

Kontrollera att tilläggsinstansen har skapats och inspektera tilläggsmetadata genom att köra följande kommando och <> ersätta med dina värden:

az k8s-extension show --cluster-type connectedClusters --cluster-name <CLUSTER_NAME> --resource-group <RESOURCE_GROUP> --name <EXTENSION_INSTANCE_NAME>

Exempel:

az k8s-extension show --cluster-type connectedClusters --cluster-name my-test-cluster --resource-group my-test-rg --name azurepolicy

Kontrollera att tilläggsinstallationen lyckades och att poddarna azure-policy och gatekeeper körs genom att köra följande kommando:

# 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

Ta bort Azure Policy tillägg

Om du vill ta bort tilläggsinstansen kör du följande kommando och <> ersätter med dina värden:

az k8s-extension delete --cluster-type connectedClusters --cluster-name <CLUSTER_NAME> --resource-group <RESOURCE_GROUP> --name <EXTENSION_INSTANCE_NAME>

Installera Azure Policy-tillägg med Helm för Azure Arc aktiverat Kubernetes (förhandsversion)

Anteckning

Azure Policy Helm-modellen börjar snart att bli utfasning. Välj alternativet för Azure Policy för Azure Arc Kubernetes i stället.

Innan du installerar Azure Policy-tillägget eller aktiverar någon av tjänstfunktionerna måste prenumerationen aktivera resursprovidern Microsoft.PolicyInsights och skapa en rolltilldelning för klustrets tjänsthuvudnamn.

  1. Azure CLI version 2.12.0 eller senare måste vara installerat och konfigurerat. Kör az --version för att hitta versionen. Om du behöver installera eller uppgradera kan du läsa informationen i Installera Azure CLI.

  2. Om du vill aktivera resursprovidern följer du stegen i Resursproviders och resurstyper eller kör antingen Azure CLI eller Azure PowerShell kommandot:

    • 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'
      
  3. Kubernetes-klustret måste vara version 1.14 eller senare.

  4. Installera Helm 3.

  5. Kubernetes-klustret har aktiverats för Azure Arc. Mer information finns i Registrera ett Kubernetes-kluster för att Azure Arc.

  6. Ha det fullständigt kvalificerade Azure-resurs-ID:t för Azure Arc aktiverat Kubernetes-kluster.

  7. Öppna portar för tillägget. Tillägget Azure Policy använder dessa domäner och portar för att hämta principdefinitioner och tilldelningar och rapportera kompatibilitet för klustret tillbaka till Azure Policy.

    Domain Port
    data.policy.core.windows.net 443
    store.policy.core.windows.net 443
    login.windows.net 443
    dc.services.visualstudio.com 443
  8. Tilldela rolltilldelningen "Insights Data Writer (förhandsversion)" till det Azure Arc Kubernetes-klustret. Ersätt med ditt prenumerations-ID med Azure Arc aktiverat Kubernetes-klustrets resursgrupp och med namnet på <subscriptionId> Azure Arc aktiverat <rg> <clusterName> Kubernetes-kluster. Håll reda på de returnerade värdena för appId, lösenord och klient för installationsstegen.

    • Azure CLI

      az ad sp create-for-rbac --role "Policy Insights Data Writer (Preview)" --scopes "/subscriptions/<subscriptionId>/resourceGroups/<rg>/providers/Microsoft.Kubernetes/connectedClusters/<clusterName>"
      
    • Azure PowerShell

      $sp = New-AzADServicePrincipal -Role "Policy Insights Data Writer (Preview)" -Scope "/subscriptions/<subscriptionId>/resourceGroups/<rg>/providers/Microsoft.Kubernetes/connectedClusters/<clusterName>"
      
      @{ appId=$sp.ApplicationId;password=[System.Runtime.InteropServices.Marshal]::PtrToStringAuto([System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($sp.Secret));tenant=(Get-AzContext).Tenant.Id } | ConvertTo-Json
      

    Exempel på utdata från kommandona ovan:

    {
        "appId": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa",
        "password": "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb",
        "tenant": "cccccccc-cccc-cccc-cccc-cccccccccccc"
    }
    

När ovanstående nödvändiga steg har slutförts installerar du Azure Policy-tillägget i ditt Azure Arc-aktiverade Kubernetes-kluster:

  1. Lägg till Azure Policy-lagringsplatsen för tillägg till Helm:

    helm repo add azure-policy https://raw.githubusercontent.com/Azure/azure-policy/master/extensions/policy-addon-kubernetes/helm-charts
    
  2. Installera Azure Policy med Helm-diagram:

    # In below command, replace the following values with those gathered above.
    #    <AzureArcClusterResourceId> with your Azure Arc enabled Kubernetes cluster resource Id. For example: /subscriptions/<subscriptionId>/resourceGroups/<rg>/providers/Microsoft.Kubernetes/connectedClusters/<clusterName>
    #    <ServicePrincipalAppId> with app Id of the service principal created during prerequisites.
    #    <ServicePrincipalPassword> with password of the service principal created during prerequisites.
    #    <ServicePrincipalTenantId> with tenant of the service principal created during prerequisites.
    helm install azure-policy-addon azure-policy/azure-policy-addon-arc-clusters \
        --set azurepolicy.env.resourceid=<AzureArcClusterResourceId> \
        --set azurepolicy.env.clientid=<ServicePrincipalAppId> \
        --set azurepolicy.env.clientsecret=<ServicePrincipalPassword> \
        --set azurepolicy.env.tenantid=<ServicePrincipalTenantId>
    

    Mer information om vad Helm-diagrammet för tillägget installerar finns i Azure Policy helm-diagramdefinitionen för tillägg på GitHub.

Kontrollera att installationen av tillägget lyckades och att poddarna azure-policy och gatekeeper körs genom att köra följande kommando:

# 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

Installera Azure Policy för AKS-motorn (förhandsversion)

  1. Se till att Kubernetes-klustret är en distribution som stöds.

Innan du installerar Azure Policy-tillägget eller aktiverar någon av tjänstfunktionerna måste prenumerationen aktivera resursprovidern Microsoft.PolicyInsights och skapa en rolltilldelning för klustrets tjänsthuvudnamn.

  1. Azure CLI version 2.0.62 eller senare måste vara installerat och konfigurerat. Kör az --version för att hitta versionen. Om du behöver installera eller uppgradera kan du läsa informationen i Installera Azure CLI.

  2. Om du vill aktivera resursprovidern följer du stegen i Resursproviders och resurstyper eller kör antingen Azure CLI eller Azure PowerShell kommandot:

    • 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'
      
  3. Skapa en rolltilldelning för tjänstens huvudnamn för klustret.

    • Om du inte känner till app-ID:t för tjänstens huvudnamn för kluster letar du upp det med följande kommando.

      # Get the kube-apiserver pod name
      kubectl get pods -n kube-system
      
      # Find the aadClientID value
      kubectl exec <kube-apiserver pod name> -n kube-system cat /etc/kubernetes/azure.json
      
    • Tilldela rolltilldelningen "Policy Insights Data Writer (förhandsversion)" till klustertjänstens huvudnamns app-ID (värdet aadClientID från föregående steg) med Azure CLI. Ersätt <subscriptionId> med ditt prenumerations-ID <aks engine cluster resource group> och med resursgruppen finns det själv hanterade Kubernetes-klustret i AKS Engine.

      az role assignment create --assignee <cluster service principal app ID> --scope "/subscriptions/<subscriptionId>/resourceGroups/<aks engine cluster resource group>" --role "Policy Insights Data Writer (Preview)"
      

När ovanstående nödvändiga steg har slutförts installerar du Azure Policy-tillägget. Installationen kan ske under skapande- eller uppdateringscykeln för en AKS-motor eller som en oberoende åtgärd i ett befintligt kluster.

  • Installera under skapande eller uppdateringscykel

    Om du vill Azure Policy-tillägget när du skapar ett nytt självstyrt kluster eller som en uppdatering av ett befintligt kluster inkluderar du definitionen för addons-egenskapsklustret för AKS-motorn.

    "addons": [{
        "name": "azure-policy",
        "enabled": true
    }]
    

    Mer information om finns i den externa guiden för AKS Engine-klusterdefinitionen.

  • Installera i befintligt kluster med Helm-diagram

    Använd följande steg för att förbereda klustret och installera tillägget:

    1. Installera Helm 3.

    2. Lägg till Azure Policy lagringsplatsen i Helm.

      helm repo add azure-policy https://raw.githubusercontent.com/Azure/azure-policy/master/extensions/policy-addon-kubernetes/helm-charts
      

      Mer information finns i Helm-diagram – snabbstartsguide.

    3. Installera tillägget med ett Helm-diagram. Ersätt <subscriptionId> med ditt prenumerations-ID <aks engine cluster resource group> och med resursgruppen finns det själv hanterade Kubernetes-klustret i AKS Engine.

      helm install azure-policy-addon azure-policy/azure-policy-addon-aks-engine --set azurepolicy.env.resourceid="/subscriptions/<subscriptionId>/resourceGroups/<aks engine cluster resource group>"
      

      Mer information om vad Helm-diagrammet för tillägget installerar finns i Azure Policy helm-diagramdefinitionen för tillägg på GitHub.

      Anteckning

      På grund av relationen mellan Azure Policy-tillägget och resursgruppens ID stöder Azure Policy endast ett AKS Engine-kluster för varje resursgrupp.

Kontrollera att installationen av tillägget lyckades och att poddarna azure-policy och gatekeeper körs genom att köra följande kommando:

# 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

Principspråk

Den Azure Policy språkstrukturen för att hantera Kubernetes följer de befintliga principdefinitionerna. Med resursproviderläget används effekterna granska och neka Microsoft.Kubernetes.Data för att hantera kubernetes-kluster. Granskning och neka måste ange egenskaper som är specifika för arbete med OPA Constraint Framework gatekeeper v3.

Som en del av egenskaperna details.templateInfo, details.constraint eller details.constraintTemplate i principdefinitionen skickar Azure Policy URI:n eller Base64Encoded-värdet för dessa CustomResourceDefinitions (CRD) till tillägget. Rego är det språk som OPA och Gatekeeper stöder för att verifiera en begäran till Kubernetes-klustret. Genom att stödja en befintlig standard för Kubernetes-hantering gör Azure Policy det möjligt att återanvända befintliga regler och koppla dem till Azure Policy för en enhetlig rapporteringsupplevelse för molnefterlevnad. Mer information finns i Vad är Rego?.

Tilldela en principdefinition

Om du vill tilldela en principdefinition till kubernetes-klustret måste du tilldelas lämpliga tilldelningsåtgärder för azure-principbaserad åtkomstkontroll (Azure RBAC). De inbyggda Azure-rollerna Resursprincipdeltagare och Ägare har dessa åtgärder. Mer information finns i Azure RBAC-behörigheter i Azure Policy.

Anteckning

Anpassade principdefinitioner är en offentlig förhandsgranskningsfunktion.

Hitta de inbyggda principdefinitionerna för att hantera klustret med hjälp Azure Portal med följande steg. Om du använder en anpassad principdefinition söker du efter den efter namn eller kategori som du skapade den med.

  1. Starta Azure Policy i Azure Portal. Välj Alla tjänster i det vänstra fönstret och sök sedan efter och välj Princip.

  2. I den vänstra rutan på Azure Policy väljer du Definitioner.

  3. I listrutan Kategori använder du Markera alla för att rensa filtret och väljer sedan Kubernetes.

  4. Välj principdefinitionen och välj sedan knappen Tilldela.

  5. Ange Omfång till hanteringsgruppen, prenumerationen eller resursgruppen för Kubernetes-klustret där principtilldelningen ska gälla.

    Anteckning

    När du tilldelar Azure Policy för Kubernetes-definitionen måste omfånget innehålla klusterresursen. För ett AKS-motorkluster måste omfånget vara klustrets resursgrupp.

  6. Ge principtilldelningen ett Namn och en Beskrivning som du enkelt kan använda för att identifiera den.

  7. Ange Principtvingande till något av värdena nedan.

    • Aktiverad – Framtvinga principen i klustret. Kubernetes-antagningsbegäranden med överträdelser nekas.

    • Inaktiverad – framtvinga inte principen i klustret. Kubernetes-antagningsbegäranden med överträdelser nekas inte. Resultatet av kompatibilitetsutvärderingen är fortfarande tillgängligt. När du distribuerar nya principdefinitioner till kluster som körs är alternativet Inaktiverat användbart för att testa principdefinitionen eftersom antagningsbegäranden med överträdelser inte nekas.

  8. Välj Nästa.

  9. Ange parametervärden

    • Om du vill undanta Kubernetes-namnområden från principutvärderingen anger du listan över namnområden i parametern Namnområdes uteslutningar. Vi rekommenderar att du undantar: kube-system, gatekeeper-system och azure-arc.
  10. Välj Granska + skapa.

Du kan också använda snabbstarten Tilldela en princip – portalen för att hitta och tilldela en Kubernetes-princip. Sök efter en Kubernetes-principdefinition i stället för exemplet "granska virtuella datorer".

Viktigt

Inbyggda principdefinitioner är tillgängliga för Kubernetes-kluster i kategorin Kubernetes. En lista över inbyggda principdefinitioner finns i Kubernetes-exempel.

Principutvärdering

Tillägget checkar in med Azure Policy tjänst för ändringar i principtilldelningar var 15:e minut. Under den här uppdateringscykeln söker tillägget efter ändringar. Dessa ändringsutlösare skapar, uppdaterar eller tar bort begränsningsmallar och begränsningar.

Om ett namnområde har rätt klusteretikett i ett Kubernetes-kluster nekas inte antagningsbegäranden med överträdelser. Resultatet av kompatibilitetsutvärderingen är fortfarande tillgängligt.

  • Azure Arc Kubernetes-kluster: admission.policy.azure.com/ignore
  • Azure Kubernetes Service kluster: control-plane

Anteckning

Även om en klusteradministratör kan ha behörighet att skapa och uppdatera begränsningsmallar och begränsningar som installeras av Azure Policy-tillägget, så stöds inte dessa scenarier eftersom manuella uppdateringar skrivs över. Gatekeeper fortsätter att utvärdera principer som fanns innan du installerar tillägget och tilldelar Azure Policy principdefinitioner.

Var 15:e minut anropar tillägget för en fullständig genomsökning av klustret. När gatekeeper har samlat in information om den fullständiga genomsökningen och eventuella realtidsutvärderingar av ändringar i klustret rapporterar tillägget resultaten tillbaka till Azure Policy för inkludering i efterlevnadsinformation som Azure Policy tilldelning. Endast resultat för aktiva principtilldelningar returneras under granskningscykeln. Granskningsresultat kan också ses som överträdelser som anges i statusfältet för den misslyckade begränsningen. Mer information om icke-kompatibla resurser finns i Komponentinformation för resursproviderlägen.

Anteckning

Varje efterlevnadsrapport i Azure Policy kubernetes-kluster innehåller alla överträdelser under de senaste 45 minuterna. Tidsstämpeln anger när en överträdelse inträffade.

Några andra överväganden:

  • Om klusterprenumerationen är registrerad Azure Security Center Azure Security Center kubernetes-principer tillämpas på klustret automatiskt.

  • När en nekandeprincip tillämpas på kluster med befintliga Kubernetes-resurser fortsätter alla befintliga resurser som inte är kompatibla med den nya principen att köras. När den icke-kompatibla resursen schemalades om på en annan nod blockerar Gatekeeper skapandet av resursen.

  • När ett kluster har en princip för att neka som validerar resurser visas inget avvisandemeddelande när en distribution skapas. Överväg till exempel en Kubernetes-distribution som innehåller replikuppsättningar och poddar. När en användare kör kubectl describe deployment $MY_DEPLOYMENT returnerar den inget avvisandemeddelande som en del av händelser. Returnerar dock kubectl describe replicasets.apps $MY_DEPLOYMENT de händelser som är associerade med avvisande.

Anteckning

Init-containrar kan inkluderas under principutvärderingen. Om du vill se om init-containrar ingår granskar du CRD för följande eller en liknande deklaration:

input_containers[c] { 
   c := input.review.object.spec.initContainers[_] 
}

Konflikter mellan begränsningsmallar

Om begränsningsmallar har samma namn på resursmetadata, men principdefinitionen refererar till källan på olika platser, anses principdefinitionerna vara i konflikt. Exempel: Två principdefinitioner refererar till samma fil som lagras på olika källplatser, till template.yaml exempel Azure Policy mallarkiv ( ) och store.policy.core.windows.net GitHub.

När principdefinitioner och deras begränsningsmallar tilldelas men inte redan är installerade i klustret och är i konflikt, rapporteras de som en konflikt och installeras inte i klustret förrän konflikten har lösts. På samma sätt fortsätter alla befintliga principdefinitioner och deras begränsningsmallar som redan finns i klustret som står i konflikt med nyligen tilldelade principdefinitioner att fungera normalt. Om en befintlig tilldelning uppdateras och det inte går att synkronisera begränsningsmallen markeras klustret också som en konflikt. Information om alla konfliktmeddelanden finns i Kompatibilitetsorsaker för AKS-resursproviderläge

Loggning

Som Kubernetes-kontrollant/container behåller både azure-policy- och gatekeeper-poddarna loggar i Kubernetes-klustret. Loggarna kan visas på sidan Insights Kubernetes-klustret. Mer information finns i Övervaka kubernetes-klusterprestanda med Azure Monitor för containrar.

Om du vill visa tilläggsloggarna använder du 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

Mer information finns i Felsöka Gatekeeper i Gatekeeper-dokumentationen.

Visa Gatekeeper-artefakter

När tillägget har laddat ned principtilldelningarna och installerat begränsningsmallarna och begränsningarna i klustret kommenterar det både med Azure Policy-information som principtilldelnings-ID och principdefinitions-ID. Använd följande steg för att konfigurera klienten så att den visar de relaterade artefakterna för tillägg:

  1. Installation kubeconfig för klustret.

    För ett Azure Kubernetes Service-kluster använder du följande Azure CLI:

    # 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>
    
  2. Testa klusteranslutningen.

    Kör kommandot kubectl cluster-info. En lyckad körning gör att varje tjänst svarar med en URL där den körs.

Visa mallar för tilläggsvillkor

Om du vill visa begränsade mallar som laddats ned av tillägget kör du kubectl get constrainttemplates . Begränsningsmallar som börjar k8sazure med är de som installeras av tillägget.

Hämta Azure Policy mappningar

Om du vill identifiera mappningen mellan en begränsningsmall som laddats ned till klustret och principdefinitionen använder du kubectl get constrainttemplates <TEMPLATE> -o yaml . Resultatet ser ut ungefär som följande utdata:

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> är prenumerations-ID:t <GUID> och är ID:t för den mappade principdefinitionen. <URL-OF-YAML> är källplatsen för den begränsningsmall som tillägget hämtade för att installera i klustret.

När du har namnen på de nedladdademallarna för tillägg kan du använda namnet för att se de relaterade begränsningarna. Använd kubectl get <constraintTemplateName> för att hämta listan. Begränsningar som installeras av tillägget börjar med azurepolicy- .

Visa begränsningsinformation

Begränsningen innehåller information om överträdelser och mappningar till principdefinitionen och tilldelningen. Om du vill se information använder du kubectl get <CONSTRAINT-TEMPLATE> <CONSTRAINT> -o yaml . Resultatet ser ut ungefär som följande utdata:

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

Felsöka tillägget

Mer information om hur du felsöker tillägget för Kubernetes finns i kubernetes-avsnittet i artikeln Azure Policy felsökning.

Information Azure Policy tillägg för arc-tilläggsrelaterade problem finns i:

För Azure Policy relaterade problem kan du se:

Ta bort tillägget

Ta bort tillägget från AKS

Om du vill Azure Policy tillägget från ditt AKS-kluster använder du antingen Azure Portal eller Azure CLI:

  • Azure Portal

    1. Starta AKS-tjänsten i Azure Portal genom att välja Alla tjänster och sedan söka efter och välja Kubernetes-tjänster.

    2. Välj det AKS-kluster där du vill inaktivera Azure Policy-tillägget.

    3. Välj Principer till vänster på Kubernetes-tjänstsidan.

    4. På huvudsidan väljer du knappen Inaktivera tillägg.

  • 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
    

Ta bort tillägget från Azure Arc Aktiverat Kubernetes

Om du vill Azure Policy-tillägget och Gatekeeper från ditt kubernetes Azure Arc aktiverade Kubernetes-kluster kör du följande Helm-kommando:

helm uninstall azure-policy-addon

Ta bort tillägget från AKS-motorn

Om du Azure Policy-tillägget och Gatekeeper från AKS Engine-klustret använder du metoden som överensstämmer med hur tillägget installerades:

  • Om det installeras genom att ange egenskapen addons i klusterdefinitionen för AKS-motorn:

    Distribuera om klusterdefinitionen till AKS-motorn när du har ändrat addons-egenskapen för azure-policy till false:

    "addons": [{
        "name": "azure-policy",
        "enabled": false
    }]
    

    Mer information finns i AKS Engine - Disable Azure Policy Add-on (AKS-motor – inaktivera Azure Policy-tillägg).

  • Om du har installerat med Helm-diagram kör du följande Helm-kommando:

    helm uninstall azure-policy-addon
    

Diagnostikdata som samlas Azure Policy av tillägg

Tillägget Azure Policy för Kubernetes samlar in begränsade klusterdiagnostikdata. Dessa diagnostikdata är viktiga tekniska data som rör programvara och prestanda. Det används på följande sätt:

  • Håll Azure Policy-tillägget uppdaterat
  • Håll Azure Policy-tillägget säkert, tillförlitligt och presterande
  • Förbättra Azure Policy-tillägg – via den sammanställda analysen av användningen av tillägget

Den information som samlas in av tillägget är inte personliga data. Följande information samlas in för närvarande:

  • Azure Policy agentversion för tillägg
  • Klustertyp
  • Klusterregion
  • Klusterresursgrupp
  • Klusterresurs-ID
  • Id för klusterprenumeration
  • Klusteroperativsystem (exempel: Linux)
  • Klusterstad (exempel: Seattle)
  • Klustertillstånd eller provins (exempel: Washington)
  • Klusterland eller -region (exempel: USA)
  • Undantag/fel som påträffas av Azure Policy-tillägget under agentinstallationen vid principutvärdering
  • Antal Gatekeeper-principdefinitioner som inte har installerats Azure Policy-tillägget

Nästa steg