Azure Policy voor Kubernetes-clusters

Azure Policy is een uitbreiding van Gatekeeper v3, een webhook voor toegangscontrollers voor Open Policy Agent (OPA), om afdwinging en beveiliging op schaal op uw clusters op een gecentraliseerde, consistente manier toe te passen. Azure Policy kunt u de nalevingstoestand van uw Kubernetes-clusters vanaf één plek beheren en rapporteren. Met de invoeg-on worden de volgende functies gebruikt:

  • Controleert Azure Policy service op beleidstoewijzingen aan het cluster.
  • Implementeert beleidsdefinities in het cluster als sjabloon voor beperkingen en aangepaste resources voor beperkingen.
  • Rapporteert controle- en nalevingsdetails aan Azure Policy service.

Azure Policy kubernetes ondersteunt de volgende clusteromgevingen:

Belangrijk

De invoegtoepassingen voor AKS Engine en Kubernetes met Arc zijn in preview. Azure Policy kubernetes ondersteunt alleen Linux-knooppuntgroepen en ingebouwde beleidsdefinities (aangepaste beleidsdefinities is een openbare preview-functie). Ingebouwde beleidsdefinities vallen in de categorie Kubernetes. De beperkte preview-beleidsdefinities met het effect EnforceOPAConstraint en EnforceRegoPolicy en de bijbehorende Kubernetes Service-categorie zijn afgeschaft. Gebruik in plaats daarvan de effectencontrole en weigeren met de resourceprovidermodus Microsoft.Kubernetes.Data .

Overzicht

Als u een kubernetes Azure Policy cluster wilt inschakelen en gebruiken, moet u de volgende acties uitvoeren:

  1. Configureer uw Kubernetes-cluster en installeer de invoegsel:

  2. Inzicht in Azure Policy taal voor Kubernetes

  3. Een definitie toewijzen aan uw Kubernetes-cluster

  4. Wachten op validatie

Beperkingen

De volgende algemene beperkingen gelden voor de Azure Policy voor Kubernetes-clusters:

  • Azure Policy-invoegsel voor Kubernetes wordt ondersteund op Kubernetes versie 1.14 of hoger.
  • Azure Policy-invoegsel voor Kubernetes kan alleen worden geïmplementeerd in Linux-knooppuntgroepen.
  • Alleen ingebouwde beleidsdefinities worden ondersteund. Aangepaste beleidsdefinities zijn een openbare preview-functie.
  • Maximum aantal pods dat door de Azure Policy wordt ondersteund: 10.000
  • Maximumaantal niet-compatibele records per beleid per cluster: 500
  • Maximumaantal niet-compatibele records per abonnement: 1 miljoen
  • Installaties van Gatekeeper buiten de Azure Policy worden niet ondersteund. Verwijder alle onderdelen die zijn geïnstalleerd door een eerdere Gatekeeper-installatie voordat u de Azure Policy invoegproces inschakelen.
  • Redenen voor niet-naleving zijn niet beschikbaar voor de Microsoft.Kubernetes.Data modus Resourceprovider. Gebruik Onderdeeldetails.
  • Uitzonderingen op onderdeelniveau worden niet ondersteund voor resourceprovidermodi.

De volgende beperkingen gelden alleen voor de Azure Policy-invoeg-invoeg toepassing voor AKS:

  • Het beveiligingsbeleid voor AKS-pods Azure Policy de invoeg-invoeg-functie voor AKS kunnen niet beide worden ingeschakeld. Zie Beveiligingsbeperking voor AKS-pods voor meer informatie.
  • Naamruimten die automatisch worden uitgesloten door Azure Policy-invoeginstallatie voor evaluatie: kube-system, gatekeeper-system en aks-periscope.

Aanbevelingen

Hier volgen algemene aanbevelingen voor het gebruik van de Azure Policy-invoeg-on:

  • De Azure Policy vereist drie Gatekeeper-onderdelen om uit te voeren: een controlepod en twee webhookpodreplica's. Deze onderdelen verbruiken meer resources naarmate het aantal Kubernetes-resources en beleidstoewijzingen in het cluster toeneemt. Hiervoor zijn controle- en afdwingingsbewerkingen vereist.

    • Voor minder dan 500 pods in één cluster met een maximum van 20 beperkingen: twee vCCPUs en 350 MB geheugen per onderdeel.
    • Voor meer dan 500 pods in één cluster met een maximum van 40 beperkingen: drie vCCPUs en 600 MB geheugen per onderdeel.
  • Windows pods bieden geen ondersteuning voor beveiligingscontexten. Daarom kunnen sommige Azure Policy-definities, zoals het niet toepassen van hoofdbevoegdheden, niet worden geëscaleerd in Windows pods en alleen van toepassing op Linux-pods.

De volgende aanbeveling is alleen van toepassing op AKS en de Azure Policy-invoeg-on:

  • Gebruik een systeem-knooppuntgroep met CriticalAddonsOnly taint om Gatekeeper-pods te plannen. Zie Systeem-knooppuntgroepen gebruiken voor meer informatie.
  • Beveilig uitgaand verkeer van uw AKS-clusters. Zie Control egress traffic for cluster nodes (Egress-verkeer voor clusterknooppunten controleren) voor meer informatie.
  • Als het cluster is ingeschakeld, Node Managed Identity (NMI)-pods de iptables van de knooppunten wijzigen om aanroepen naar het aad-pod-identity Azure Instance Metadata-eindpunt te onderscheppen. Deze configuratie betekent dat elke aanvraag bij het eindpunt voor metagegevens wordt onderschept door NMI, zelfs als de pod geen aad-pod-identity gebruikt. AzurePodIdentityException CRD kan worden geconfigureerd om te informeren dat aanvragen naar het eindpunt metagegevens afkomstig van een pod die overeenkomt met labels die zijn gedefinieerd in CRD moeten worden geproxied zonder verwerking aad-pod-identity in NMI. De systeempods met kubernetes.azure.com/managedby: aks een label in de kube-system-naamruimte moeten worden uitgesloten in door de aad-pod-identity CRD AzurePodIdentityException te configureren. Zie Aad-pod-identityuitschakelen voor een specifieke pod of toepassing voor meer informatie. Als u een uitzondering wilt configureren, installeert u de YAML mic-exception.

Een Azure Policy voor AKS installeren

Voordat u de Azure Policy of inschakelen van een van de servicefuncties, moet uw abonnement de resourceproviders Microsoft.PolicyInsights inschakelen.

  1. Azure CLI versie 2.12.0 of hoger moet zijn geïnstalleerd en geconfigureerd. Voer az --version uit om de versie te bekijken. Als u uw CLI wilt installeren of upgraden, raadpleegt u De Azure CLI installeren.

  2. Registreer de resourceproviders en preview-functies.

    • Azure Portal:

      Registreer de Microsoft.PolicyInsights-resourceproviders. Zie Resourceproviders en -typen voor de 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
      
  3. Als er beperkte preview-beleidsdefinities zijn geïnstalleerd, verwijdert u de invoeg-app met de knop Uitschakelen in uw AKS-cluster op de pagina Beleid.

  4. Het AKS-cluster moet versie 1.14 of hoger 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
    
  5. Installeer versie 2.12.0 of hoger van de Azure CLI. Zie De Azure CLI installeren voor meer informatie.

Nadat de bovenstaande vereiste stappen zijn voltooid, installeert u de Azure Policy in de AKS-cluster die u wilt beheren.

  • Azure Portal

    1. Start de AKS-service in Azure Portal door Alle services te selecteren en vervolgens Kubernetes-services te zoeken en te selecteren.

    2. Selecteer een van uw AKS-clusters.

    3. Selecteer Beleidsregels aan de linkerkant van de pagina Kubernetes-service.

    4. Selecteer op de hoofdpagina de knop Invoeg toevoegen 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 invoeg-on is geslaagd en of de pods azure-policy en gatekeeper 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 laatste of de meest recente invoeggebruiker is geïnstalleerd door deze Azure CLI-opdracht uit te voeren, te vervangen door de naam van uw resourcegroep en door de naam van uw <rg> <cluster-name> AKS-cluster: az aks show --query addonProfiles.azurePolicy -g <rg> -n <cluster-name> . Het resultaat moet er ongeveer uitzien als in de volgende uitvoer:

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

De Azure Policy kubernetes Azure Arc kubernetes (preview) installeren

Azure Policy kubernetes kunt u de nalevingstoestand van uw Kubernetes-clusters vanaf één plek beheren en rapporteren.

In dit artikel wordt beschreven hoe u maakt,de extensiestatus weweergeven en de Azure Policy kubernetes-extensie verwijdert.

Zie clusterextensies Azure Arc voor een overzicht van het extensieplatform.

Vereisten

Opmerking: als u Azure Policy al hebt geïmplementeerd op een Azure Arc-cluster met behulp van Helm zonder extensies, volgt u de instructies om de Helm-grafiek te verwijderen. Zodra het verwijderen is uitgevoerd, kunt u doorgaan.

  1. Zorg ervoor dat uw Kubernetes-cluster een ondersteunde distributie is.

    Opmerking: Azure Policy arc-extensie wordt ondersteund in de volgende Kubernetes-distributies.

  2. Zorg ervoor dat u aan alle algemene vereisten voor Kubernetes-extensies hebt voldaan die hier worden vermeld, inclusief het verbinden van uw cluster met Azure Arc.

    Opmerking: Azure Policy-extensie wordt ondersteund voor Kubernetes-clusters met Arc in deze regio's.

  3. Open poorten voor de Azure Policy extensie. De Azure Policy gebruikt deze domeinen en poorten om beleidsdefinities en -toewijzingen op te halen en naleving van het cluster weer te rapporteren 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
  4. Voordat u de extensie Azure Policy of een van de servicefuncties inschakelen, moet uw abonnement de resourceproviders Microsoft.PolicyInsights inschakelen.

    Opmerking: als u de resourceprovider wilt inschakelen, volgt u de stappen in Resourceproviders en -typen of gebruikt u de Azure CLI of Azure PowerShell opdracht:

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

Een Azure Policy maken

Let op het volgende voor het Azure Policy extensie maken:

  • Automatische upgrade is standaard ingeschakeld, waardoor de secundaire Azure Policy-extensie wordt bijgewerkt als er nieuwe wijzigingen worden geïmplementeerd.
  • Proxyvariabelen die als parameters worden doorgegeven aan, worden doorgegeven aan de connectedk8s Azure Policy-extensie ter ondersteuning van de uitgaande proxy.

Als u een extensie-exemplaar wilt maken, moet u voor uw Arc-cluster de volgende opdracht uitvoeren, vervangen <> door uw waarden:

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

De Azure Policy tonen

Als u wilt controleren of het maken van het extensie-exemplaar is geslaagd en de metagegevens van de extensie wilt inspecteren, moet u de volgende opdracht uitvoeren, vervangen <> 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 pods azure-policy en gatekeeper 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

De Azure Policy verwijderen

Als u het extensie-exemplaar wilt verwijderen, moet u de volgende opdracht uitvoeren, vervangen <> door uw waarden:

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

Een Azure Policy installeren met Helm voor kubernetes Azure Arc kubernetes (preview)

Notitie

Azure Policy Helm-invoeg-model wordt binnenkort afgeschreven. Kies in plaats daarvan voor de Azure Policy-extensie Azure Arc Kubernetes is ingeschakeld.

Voordat u de Azure Policy toevoegen of inschakelen van een van de servicefuncties, moet uw abonnement de resourceprovider Microsoft.PolicyInsights inschakelen en een roltoewijzing maken voor de clusterservice-principal.

  1. Azure CLI versie 2.12.0 of hoger moet zijn geïnstalleerd en geconfigureerd. Voer az --version uit om de versie te bekijken. Als u uw CLI wilt installeren of upgraden, raadpleegt u De Azure CLI installeren.

  2. Als u de resourceprovider wilt inschakelen, volgt u de stappen in Resourceproviders en -typen of gebruikt u de Azure CLI of Azure PowerShell opdracht:

    • 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. Het Kubernetes-cluster moet versie 1.14 of hoger zijn.

  4. Installeer Helm 3.

  5. Uw Kubernetes-cluster is ingeschakeld voor Azure Arc. Zie Onboarding a Kubernetes cluster to Azure Arc (Een Kubernetes-cluster onboarden voor meer Azure Arc.

  6. Zorg ervoor dat de volledig gekwalificeerde Azure-resource-id van Azure Arc Kubernetes-cluster is ingeschakeld.

  7. Open poorten voor de invoeg-on. De Azure Policy maakt gebruik van deze domeinen en poorten om beleidsdefinities en -toewijzingen op te halen en naleving van het cluster weer 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
  8. Wijs de roltoewijzing 'Policy Insights Data Writer (Preview)' toe aan Azure Arc Kubernetes-cluster dat is ingeschakeld. Vervang door uw abonnements-id, door de resourcegroep Azure Arc Kubernetes-cluster ingeschakeld en door de naam van het <subscriptionId> <rg> <clusterName> kubernetes-cluster Azure Arc ingeschakeld. Houd de geretourneerde waarden voor appId, password en tenant bij voor de installatiestappen.

    • 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
      

    Voorbeelduitvoer van de bovenstaande opdrachten:

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

Nadat de bovenstaande vereiste stappen zijn voltooid, installeert u de Azure Policy in uw kubernetes-cluster Azure Arc kubernetes-cluster:

  1. Voeg de Azure Policy-on-repo toe aan Helm:

    helm repo add azure-policy https://raw.githubusercontent.com/Azure/azure-policy/master/extensions/policy-addon-kubernetes/helm-charts
    
  2. Installeer de Azure Policy met behulp van Helm-grafiek:

    # 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>
    

    Zie voor meer informatie over de installatie van de helm-grafiek Azure Policy helmgrafiek voor meer informatie over de installatie van de Helm-Azure Policy in GitHub.

Voer de volgende opdracht uit om te controleren of de invoeg-installatie is geslaagd en of de pods azure-policy en gatekeeper 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

Een Azure Policy installeren voor de AKS-engine (preview)

  1. Zorg ervoor dat uw Kubernetes-cluster een ondersteunde distributie is.

Voordat u de Azure Policy toevoegen of inschakelen van een van de servicefuncties, moet uw abonnement de resourceprovider Microsoft.PolicyInsights inschakelen en een roltoewijzing maken voor de clusterservice-principal.

  1. Azure CLI versie 2.0.62 of hoger moet zijn geïnstalleerd en geconfigureerd. Voer az --version uit om de versie te bekijken. Als u uw CLI wilt installeren of upgraden, raadpleegt u De Azure CLI installeren.

  2. Als u de resourceprovider wilt inschakelen, volgt u de stappen in Resourceproviders en -typen of gebruikt u de Azure CLI of Azure PowerShell opdracht:

    • 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. Maak een roltoewijzing voor de clusterservice-principal.

    • Als u de app-id van de clusterservice-principal niet weet, zoek deze dan op met de volgende opdracht.

      # 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
      
    • Wijs de roltoewijzing 'Policy Insights Data Writer (Preview)' toe aan de app-id van de clusterservice-principal (waarde aadClientID uit de vorige stap) met Azure CLI. Vervang <subscriptionId> door uw abonnements-id en door de resourcegroep waarin het <aks engine cluster resource group> zelfbeheerde Kubernetes-cluster van de AKS-engine zich in zich heeft.

      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)"
      

Nadat de bovenstaande vereiste stappen zijn voltooid, installeert u de Azure Policy-invoeg-on. De installatie kan zijn tijdens het maken of bijwerken van een AKS-engine of als een onafhankelijke actie op een bestaand cluster.

  • Installeren tijdens het maken of bijwerken

    Als u de Azure Policy wilt inschakelen tijdens het maken van een nieuw zelf beheerd cluster of als een update van een bestaand cluster, voegt u de eigenschapsclusterdefinitie addons voor de AKS-engine toe.

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

    Zie de externe handleiding AKS Engine-clusterdefinitie voor meer informatie over.

  • Installeren in bestaand cluster met Helm-grafieken

    Gebruik de volgende stappen om het cluster voor te bereiden en de invoeg-on te installeren:

    1. Installeer Helm 3.

    2. Voeg de Azure Policy-repo toe aan Helm.

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

      Zie Helm-grafiek - Snelstartgids voor meer informatie.

    3. Installeer de invoeg-app met een Helm-grafiek. Vervang <subscriptionId> door uw abonnements-id en door de resourcegroep waarin het <aks engine cluster resource group> zelfbeheerde Kubernetes-cluster van de AKS-engine zich in zich heeft.

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

      Zie voor meer informatie over de installatie van de helm-grafiek Azure Policy helmgrafiek voor meer informatie over de installatie van de Helm-Azure Policy in GitHub.

      Notitie

      Vanwege de relatie tussen de Azure Policy-invoeggebruikte en de resourcegroep-id, ondersteunt Azure Policy slechts één AKS Engine-cluster voor elke resourcegroep.

Voer de volgende opdracht uit om te controleren of de invoeg-installatie is geslaagd en of de pods azure-policy en gatekeeper 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

Beleidstaal

De Azure Policy taalstructuur voor het beheren van Kubernetes volgt die van bestaande beleidsdefinities. Met de resourceprovidermodus Microsoft.Kubernetes.Data van worden de effectencontrole en -deny gebruikt voor het beheren van uw Kubernetes-clusters. Controle en weigeren moeten details bieden die specifiek zijn voor het werken met OPA Constraint Framework en Gatekeeper v3.

Als onderdeel van de eigenschappen details.templateInfo, details.constraint of details.constraintTemplate in de beleidsdefinitie, geeft Azure Policy de URI- of Base64Encoded-waarde van deze CustomResourceDefinitions (CRD) door aan de invoegtoepassingen. Rego is de taal die door OPA en Gatekeeper wordt ondersteund 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 cloudcomputing. Zie Wat is Rego? voor meer informatie.

Een beleidsdefinitie toewijzen

Als u een beleidsdefinitie wilt toewijzen aan uw Kubernetes-cluster, moet u de juiste toewijzingsbewerkingen voor op rollen gebaseerd toegangsbeheer van Azure (Azure RBAC) toegewezen krijgen. De ingebouwde Azure-rollen Inzender voor resourcebeleid en Eigenaar hebben deze bewerkingen. Zie Azure RBAC-machtigingen inAzure Policy .

Notitie

Aangepaste beleidsdefinities is een openbare preview-functie.

Zoek de ingebouwde beleidsdefinities voor het beheren van uw cluster met behulp van Azure Portal volgende stappen. Als u een aangepaste beleidsdefinitie gebruikt, zoekt u deze op naam of de categorie waarin u deze hebt gemaakt.

  1. Start de Azure Policy-service in Azure Portal. Selecteer Alle services in het linkerdeelvenster en zoek en selecteer vervolgens Beleid.

  2. Selecteer in het linkerdeelvenster van Azure Policy pagina Definities.

  3. Gebruik in de vervolgkeuzelijst Categorie de optie Alles selecteren om het filter te verwijderen en selecteer vervolgens Kubernetes.

  4. Selecteer de beleidsdefinitie en selecteer vervolgens de knop Toewijzen.

  5. Stel 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 kubernetes-definitie toewijst, moet het bereik de clusterresource bevatten. Voor een AKS Engine-cluster moet het bereik de resourcegroep van het cluster zijn.

  6. Geef de beleidstoewijzing een naam en beschrijving die u kunt gebruiken om deze gemakkelijk te identificeren.

  7. Stel beleidshandhaving in op een van de onderstaande waarden.

    • Ingeschakeld: het beleid op het cluster afdwingen. Kubernetes-toegangsaanvragen met schendingen worden geweigerd.

    • Uitgeschakeld: dwing het beleid niet af op het cluster. Kubernetes-toegangsaanvragen met schendingen worden niet geweigerd. De resultaten van de nalevingsevaluatie zijn nog steeds beschikbaar. Bij het uitrollen van nieuwe beleidsdefinities voor het uitvoeren van clusters is de optie Uitgeschakeld handig voor het testen van de beleidsdefinitie, omdat toegangsaanvragen met schendingen niet worden geweigerd.

  8. Selecteer Next.

  9. Parameterwaarden instellen

    • Als u Kubernetes-naamruimten wilt uitsluiten van beleidsevaluatie, geeft u de lijst met naamruimten op in de parameter Naamruimteuitsluitingen. Het is raadzaam om het volgende uit te sluiten: kube-system, gatekeeper-system en azure-arc.
  10. 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 het voorbeeld 'VM's controleren'.

Belangrijk

Ingebouwde beleidsdefinities zijn beschikbaar voor Kubernetes-clusters in de categorie Kubernetes. Zie Kubernetes-voorbeeldenvoor een lijst met ingebouwde beleidsdefinities.

Beleidsevaluatie

De invoegservice controleert elke 15 minuten bij Azure Policy op wijzigingen in beleidstoewijzingen. Tijdens deze vernieuwingscyclus controleert de invoeg-on op wijzigingen. Met deze wijzigingen worden de beperkingssjablonen en -beperkingen gemaakt, bijgewerkt of verwijderd.

Als een naamruimte in een Kubernetes-cluster het label heeft dat geschikt is voor het cluster, worden de toegangsaanvragen met schendingen niet geweigerd. De resultaten van de nalevingsevaluatie zijn nog steeds beschikbaar.

  • Azure Arc Kubernetes-cluster met ingeschakelde functie: admission.policy.azure.com/ignore
  • Azure Kubernetes Service cluster: control-plane

Notitie

Hoewel een clusterbeheerder mogelijk machtigingen heeft om beperkingssjablonen en beperkingen voor resources te maken en bij te werken die door de Azure Policy-invoegversie worden geïnstalleerd, zijn dit geen ondersteunde scenario's omdat handmatige updates worden overschreven. Gatekeeper blijft beleidsregels evalueren die bestonden vóór de installatie van de invoeg-on en het toewijzen Azure Policy beleidsdefinities.

Om de 15 minuten vraagt de invoeg-on om een volledige scan van het cluster. Na het verzamelen van details van de volledige scan en eventuele realtime-evaluaties door Gatekeeper van geprobeerde wijzigingen in het cluster, rapporteert de invoeg-on de resultaten terug naar Azure Policy voor opname in nalevingsdetails 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 bevat 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 Azure Security Center, Azure Security Center 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, worden uitgevoerd. Wanneer de niet-compatibele resource opnieuw wordt gepland op een ander knooppunt, blokkeert de Gatekeeper het maken van de resource.

  • Wanneer een cluster een beleid voor weigeren heeft dat resources valideert, ziet de gebruiker geen afwijzingsbericht bij het maken van een implementatie. Denk bijvoorbeeld aan een Kubernetes-implementatie die replicasets en pods bevat. Wanneer een gebruiker kubectl describe deployment $MY_DEPLOYMENT uitvoert, retourneert deze geen afwijzingsbericht als onderdeel van gebeurtenissen. kubectl describe replicasets.apps $MY_DEPLOYMENTRetourneert 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, bekijkt u de CRD voor de volgende of een vergelijkbare declaratie:

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

Beperkingenjabloonconflicten

Als beperkingssjablonen dezelfde naam voor resourcemetagegevens hebben, maar de beleidsdefinitie verwijst naar de bron op verschillende locaties, worden de beleidsdefinities beschouwd als conflicterende. Voorbeeld: Twee beleidsdefinities verwijzen naar hetzelfde bestand dat is opgeslagen op verschillende bronlocaties, zoals Azure Policy sjabloonopslag ( ) en template.yaml store.policy.core.windows.net GitHub.

Wanneer beleidsdefinities en hun beperkingssjablonen zijn toegewezen, maar nog niet zijn geïnstalleerd op het cluster en conflicteren, worden ze gerapporteerd als een conflict en worden ze pas in het cluster geïnstalleerd als het conflict is opgelost. Op dezelfde manier blijven alle bestaande beleidsdefinities en hun beperkingssjablonen die zich al in het cluster hebben die conflicteren met nieuw toegewezen beleidsdefinities normaal functioneren. Als een bestaande toewijzing wordt bijgewerkt en de sjabloon voor beperkingen niet kan worden gesynchroniseerd, wordt het cluster ook gemarkeerd als een conflict. Zie Nalevingsredenen voor de AKS-resourceprovidermodus voor alle conflictberichten

Logboekregistratie

Als Kubernetes-controller/-container bewaren zowel de pods azure-policy als gatekeeper logboeken in het Kubernetes-cluster. De logboeken kunnen worden weergegeven op Insights pagina van het Kubernetes-cluster. Zie Prestaties van uw Kubernetes-clusterbewaken met Azure Monitor voor containers voor meer informatie.

Als u de invoeglogboeken 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

Zie Voor meer informatie Gatekeeper debuggen in de Gatekeeper-documentatie.

Gatekeeper-artefacten weergeven

Nadat de invoegversie de beleidstoewijzingen heeft gedownload en de beperkingssjablonen en beperkingen op het cluster heeft geïnstalleerd, worden beide aantekeningen gemaakt met Azure Policy-informatie zoals de id van de beleidstoewijzing en de id van de beleidsdefinitie. Gebruik de volgende stappen om uw client te configureren voor het weergeven van de artefacten die betrekking hebben op invoegingen:

  1. Installatie kubeconfig voor het cluster.

    Voor een Azure Kubernetes Service gebruikt u de volgende 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. Test de clusterverbinding.

    Voer de opdracht kubectl cluster-info uit. Bij een geslaagde run reageert elke service met een URL van waar deze wordt uitgevoerd.

De beperkingssjablonen voor invoegsjablonen weergeven

Voer uit om beperkingssjablonen weer te geven die door de invoeg-on zijn kubectl get constrainttemplates gedownload. Beperkingssjablonen die beginnen met k8sazure zijn de sjablonen die zijn geïnstalleerd door de invoeg-on.

Toewijzingen Azure Policy gegevens

Gebruik om de toewijzing te identificeren tussen een beperkingssjabloon die is gedownload naar het cluster en de beleidsdefinitie. 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 <GUID> en is de id van de gedefinieerde beleidsdefinitie. <URL-OF-YAML> is de bronlocatie van de beperkingssjabloon die door de invoegtoepassingen is gedownload om op het cluster te installeren.

Zodra u de namen van de invoeggebruikte beperkingssjablonenhebt gedownload, kunt u de naam gebruiken om de gerelateerde beperkingen te bekijken. Gebruik kubectl get <constraintTemplateName> om de lijst op te halen. Beperkingen die door de invoegvoeging zijn geïnstalleerd, beginnen met azurepolicy- .

Details van beperkingen weergeven

De beperking heeft details over schendingen en toewijzingen aan de beleidsdefinitie en -toewijzing. Gebruik om de details te kubectl get <CONSTRAINT-TEMPLATE> <CONSTRAINT> -o yaml bekijken. 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 invoegoplossing oplossen

Zie de sectie Kubernetes van het artikel over het oplossen van problemen Azure Policy Kubernetes voor meer informatie over het oplossen van problemen met de invoegoplossing voor Kubernetes.

Zie Azure Policy voor meer informatie over problemen met de Arc-extensie:

Voor Azure Policy problemen raadpleegt u:

De invoeg-app verwijderen

De invoeg-app uit AKS verwijderen

Als u de Azure Policy wilt verwijderen uit uw AKS-cluster, gebruikt u de Azure Portal of Azure CLI:

  • Azure Portal

    1. Start de AKS-service in Azure Portal door Alle services te selecteren en vervolgens Kubernetes-services te zoeken en te selecteren.

    2. Selecteer uw AKS-cluster waar u de invoeg-Azure Policy wilt uitschakelen.

    3. Selecteer Beleidsregels aan de linkerkant van de kubernetes-servicepagina.

    4. Selecteer op de hoofdpagina de knop Invoeg toevoegen 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 invoegsel verwijderen uit Azure Arc Kubernetes

Als u de Azure Policy-invoegsel en Gatekeeper wilt verwijderen uit uw kubernetes-cluster Azure Arc kubernetes-cluster, moet u de volgende Helm-opdracht uitvoeren:

helm uninstall azure-policy-addon

De invoeg-app verwijderen uit de AKS-engine

Als u de Azure Policy Add-on en Gatekeeper wilt verwijderen uit uw AKS Engine-cluster, gebruikt u de methode die is afgestemd op de manier waarop de invoeggebruiker is geïnstalleerd:

  • Indien geïnstalleerd door de eigenschap addons in te stellen in de clusterdefinitie voor de AKS-engine:

    De clusterdefinitie opnieuw implementeren in de AKS-engine nadat de eigenschap addons voor azure-policy is veranderd in false:

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

    Zie AKS Engine - Disable Azure Policy Add-on voor meer informatie.

  • Voer de volgende Helm-opdracht uit als deze is geïnstalleerd met Helm-grafieken:

    helm uninstall azure-policy-addon
    

Diagnostische gegevens verzameld door Azure Policy-invoeg-on

De Azure Policy-invoegsel voor Kubernetes verzamelt beperkte diagnostische gegevens van clusters. Deze diagnostische gegevens zijn essentiële technische gegevens met betrekking tot software en prestaties. Deze wordt op de volgende manieren gebruikt:

  • De Azure Policy up-to-date houden
  • De Azure Policy invoeg-on veilig, betrouwbaar en presterend houden
  • De Azure Policy verbeteren: via de statistische analyse van het gebruik van de invoegvoeggebruik

De informatie die door de invoeg-on wordt verzameld, zijn geen persoonlijke gegevens. De volgende gegevens worden momenteel verzameld:

  • Azure Policy versie van de invoeg-onagent
  • Clustertype
  • Clusterregio
  • Clusterresourcegroep
  • Clusterresource-id
  • Clusterabonnements-id
  • Cluster os (voorbeeld: Linux)
  • Cluster stad (voorbeeld: Seattle)
  • Clustertoestand of -provincie (voorbeeld: Washington)
  • Clusterland of -regio (voorbeeld: Verenigde Staten)
  • Uitzonderingen/fouten die optreden tijdens de Azure Policy tijdens de installatie van de agent bij de beleidsevaluatie
  • Aantal Gatekeeper-beleidsdefinities dat niet is geïnstalleerd door Azure Policy-invoeg-on

Volgende stappen