Comprendre Azure Policy pour les clusters Kubernetes

Azure Policy étend Gatekeeper v3, un webhook contrôleur d’admission d’Open Policy Agent (OPA), afin d’appliquer des mises en œuvre et protections à grande échelle sur les composants de votre cluster de manière centralisée et cohérente. Les composants de cluster incluent des pods, des conteneurs et des espaces de noms.

Azure Policy vous permet de gérer et de générer l’état de conformité des composants de votre cluster Kubernetes à partir d’un seul emplacement. Quand vous utilisez le module complémentaire ou l’extension d’Azure Policy, la gouvernance des composants de votre cluster est améliorée avec des fonctionnalités Azure Policy, comme la possibilité d’utiliser des sélecteurs et des remplacements lors du lancement et de la restauration de stratégies sécurisés.

Azure Policy pour Kubernetes prend en charge les environnements de cluster suivants :

Important

Le modèle Helm du module complémentaire Azure Policy et le module complémentaire pour le moteur AKS ont été dépréciés. Suivez les instructions pour supprimer les modules complémentaires.

Vue d’ensemble

En installant le module complémentaire ou l'extension d'Azure Policy sur vos clusters Kubernetes, Azure Policy applique les fonctions suivantes :

  • Il vérifie auprès du service Azure Policy les affectations de stratégies au cluster.
  • Déploie des définitions de stratégie dans le cluster en tant que modèle de contrainte et ressources personnalisées de contrainte ou en tant que ressource de modèle de mutation (en fonction du contenu de la définition de stratégie).
  • Il fournit des rapports d’audit et de conformité au service Azure Policy.

Pour activer et utiliser Azure Policy avec votre cluster Kubernetes, procédez comme suit :

  1. Configurez votre cluster Kubernetes et installez le module complémentaire Azure Kubernetes Service (AKS) ou l’extension d’Azure Policy pour des clusters Kubernetes avec Arc (en fonction du type de votre cluster).

    Remarque

    Pour les problèmes courants liés à l’installation, consultez Résolution des problèmes : module complémentaire Azure Policy.

  2. Créer ou utiliser un exemple de définition Azure Policy pour Kubernetes

  3. Attribuer une définition à votre cluster Kubernetes

  4. Attendre la validation

  5. Journalisation et résolution des problèmes

  6. Passez en revue les limites et recommandations de notre section FAQ

Installer un module complémentaire Azure Policy pour AKS

Le module complémentaire d’Azure Policy pour AKS fait partie de Kubernetes version 1.27 avec prise en charge à long terme (LTS).

Prérequis

  1. Inscrivez les fournisseurs de ressources et les fonctionnalités en préversion.

    • Portail Azure :

      Inscrire les fournisseurs de ressources Microsoft.PolicyInsights. Pour connaître les étapes, consultez Types et fournisseurs de ressources.

    • 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
      
  2. La version 2.12.0 ou ultérieure d’Azure CLI doit être installée et configurée. Pour connaître la version de l’interface, exécutez la commande az --version. Si vous devez effectuer une installation ou une mise à niveau, consultez Comment installer Azure CLI.

  3. Le cluster AKS doit être une version de Kubernetes prise en charge dans Azure Kubernetes Service (AKS). Utilisez le script suivant pour valider la version de votre cluster AKS :

    # Log in first with az login if you're not using Cloud Shell
    
    # Look for the value in kubernetesVersion
    az aks list
    
  4. Ouvrez les ports pour l’extension Azure Policy. L’extension Azure Policy utilise ces domaines et ports pour extraire des définitions et affectations de stratégie, et rendre compte de la conformité du cluster à 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

Une fois les prérequis satisfaits, installez le module complémentaire Azure Policy dans le cluster AKS que vous souhaitez gérer.

  • Portail Azure

    1. Lancez le service AKS dans le portail Azure en sélectionnant Tous les services, puis en recherchant et en sélectionnant Services Kubernetes.

    2. Sélectionnez l’un de vos clusters AKS.

    3. Sélectionnez Stratégies sur le côté gauche de la page du service Kubernetes.

    4. Dans la page principale, sélectionnez le bouton Activer un module complémentaire.

  • 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
    

Pour vérifier que l’installation du module complémentaire a réussi et que les pods azure-policy et gatekeeper sont en cours d’exécution, exécutez la commande suivante :

# 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

Enfin, vérifiez que le module complémentaire le plus récent est installé en exécutant cette commande Azure CLI, en remplaçant <rg> par le nom de votre groupe de ressources et <cluster-name> par le nom de votre cluster AKS : az aks show --query addonProfiles.azurepolicy -g <rg> -n <cluster-name>. Le résultat doit ressembler à la sortie suivante pour les clusters utilisant des principaux de service :

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

Aussi, la sortie suivante pour les clusters à l'aide de l'identité managée :

 {
   "config": null,
   "enabled": true,
   "identity": {
     "clientId": "########-####-####-####-############",
     "objectId": "########-####-####-####-############",
     "resourceId": "<resource-id>"
   }
 }

Installer l’extension Azure Policy pour Kubernetes avec Azure Arc

Azure Policy pour Kubernetes vous permet de gérer vos clusters Kubernetes et de générer des rapports sur leur état de conformité à partir d’un seul emplacement. Avec l’extension d’Azure Policy pour les clusters Kubernetes avec Arc, vous pouvez régir les composants de votre cluster Kubernetes avec Arc, comme des pods et des conteneurs.

Cet article explique comment créer et supprimer l’extension Azure Policy pour Kubernetes, ainsi qu’en afficher l’état.

Pour obtenir une vue d’ensemble de la plateforme d’extensions, consultez Extensions de cluster Azure Arc.

Prérequis

Si vous avez déjà déployé Azure Policy pour Kubernetes sur un cluster Azure Arc en utilisant Helm directement sans extensions, suivez les instructions pour supprimer le chart Helm. Une fois la suppression effectuée, vous pouvez continuer.

  1. Assurez-vous que votre cluster Kubernetes est une distribution prise en charge.

    Remarque

    L’extension Azure Policy pour Arc est prise en charge sur les distributions Kubernetes suivantes.

  2. Vérifiez que tous les prérequis communs pour les extensions Kubernetes listés ici sont remplis, notamment la connexion de votre cluster à Azure Arc.

    Remarque

    L’extension Azure Policy est prise en charge pour les clusters Kubernetes avec Arc dans ces régions.

  3. Ouvrez les ports pour l’extension Azure Policy. L’extension Azure Policy utilise ces domaines et ports pour extraire des définitions et affectations de stratégie, et rendre compte de la conformité du cluster à 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. Avant d’installer l’extension Azure Policy ou d’activer des fonctionnalités du service, votre abonnement doit activer les fournisseurs de ressources Microsoft.PolicyInsights.

    Remarque

    Pour activer le fournisseur de ressources, suivez les étapes décrites dans Fournisseurs de ressources et types ou exécutez la commande Azure CLI ou Azure PowerShell.

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

Créer une extension Azure Policy

Remarque

Notez ce qui suit pour la création d’une extension Azure Policy :

  • La mise à niveau automatique est activée par défaut, ce qui entraîne la mise à jour de la version mineure de l’extension Azure Policy en cas de déploiement de nouvelles modifications.
  • Toutes les variables proxy passées en tant que paramètres à connectedk8s seront propagées à l’extension Azure Policy pour prendre en charge le proxy sortant.

Pour créer une instance d’extension pour votre cluster avec Arc, exécutez la commande suivante en remplaçant <> par vos valeurs :

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

Exemple :

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

Exemple de sortie :

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

Afficher une extension Azure Policy

Pour vérifier la réussite de la création de l’instance d’extension et inspecter ses métadonnées, exécutez la commande suivante en remplaçant <> par vos valeurs :

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

Exemple :

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

Pour vérifier que l’installation de l’extension a réussi et que les pods azure-policy et gatekeeper sont en cours d’exécution, exécutez la commande suivante :

# 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

Supprimer une extension Azure Policy

Pour supprimer l’instance d’extension, exécutez la commande suivante en remplaçant <> par vos valeurs :

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

Créer une définition de stratégie

La structure du langage Azure Policy pour la gestion de Kubernetes suit celle des définitions de stratégies existantes. Il existe des exemples de fichiers de définition disponibles à attribuer à la bibliothèque de stratégies intégrée d’Azure Policy qui peuvent être utilisés pour régir les composants de votre cluster.

Azure Policy pour Kubernetes prend également en charge la création de définitions personnalisées au niveau du composant sur des clusters Azure Kubernetes Service et des clusters Kubernetes avec Azure Arc. Des exemples de modèles de contrainte et de modèles de mutation sont disponibles dans la bibliothèque de la communauté Gatekeeper. L’extension Visual Studio Code d’Azure Policy peut être utilisée pour traduire un modèle de contrainte ou un modèle de mutation existant en une définition de stratégie Azure Policy personnalisée.

Avec un mode fournisseur de ressources de Microsoft.Kubernetes.Data, les effets audit, refus, désactivé etmuter sont utilisés pour gérer vos clusters Kubernetes.

Audit et deny doivent fournir des propriétés details spécifiques à l’utilisation d’OPA Constraint Framework et de Gatekeeper v3.

Dans le cadre des propriétés details.templateInfo ou details.constraintInfo de la définition de stratégie, Azure Policy passe l’URI ou la valeur Base64Encoded de ces CustomResourceDefinitions (CRD) au module complémentaire. Rego est le langage pris en charge par OPA et Gatekeeper pour valider une requête au cluster Kubernetes. Grâce à la prise en charge d’une norme existante pour la gestion de Kubernetes, Azure Policy permet de réutiliser des règles existantes et de les jumeler avec Azure Policy afin de bénéficier d’une expérience de rapports de conformité du cloud unifiée. Pour plus d’informations, consultez What is Rego?.

Affecter une définition de stratégie

Pour que vous puissiez affecter une définition de stratégie à votre cluster Kubernetes, il faut que les opérations appropriées d’attribution de stratégie de contrôle d’accès Azure en fonction du rôle (Azure RBAC) vous aient été attribuées. Les rôles Azure intégrés Contributeur de la stratégie de ressource et Propriétaire incluent ces opérations. Pour plus d’informations, consultez Autorisations Azure RBAC dans Azure Policy.

Recherchez les définitions de stratégie intégrées pour la gestion de votre cluster à l’aide du portail Azure en procédant comme suit. Si vous utilisez une définition de stratégie personnalisée, recherchez-la par son nom ou par la catégorie avec laquelle vous l’avez créée.

  1. Démarrez le service Azure Policy dans le portail Azure. Sélectionnez Tous les services dans le volet gauche, puis recherchez et sélectionnez Stratégie.

  2. Dans le volet gauche de la page Azure Policy, sélectionnez Définitions.

  3. Dans la zone de liste déroulante Catégorie, utilisez Sélectionner tout pour effacer le filtre, puis sélectionnez Kubernetes.

  4. Sélectionnez la définition de stratégie, puis sélectionnez le bouton Affecter.

  5. Définissez Étendue sur le groupe d’administration, l’abonnement ou le groupe de ressources du cluster Kubernetes auquel s’applique l’affectation de stratégie.

    Remarque

    Lors de l’affectation de la définition d’Azure Policy pour Kubernetes, l’Étendue doit inclure la ressource de cluster.

  6. Donnez un Nom et une Description à l’affectation de stratégie, qui permettront de l’identifier facilement.

  7. Définissez l’Application de la stratégie sur l’une des valeurs suivantes :

    • Activé - Appliquer la stratégie sur le cluster. Les demandes d’admission Kubernetes avec des violations sont refusées.

    • Désactivé - Ne pas appliquer la stratégie sur le cluster. Les demandes d’admission Kubernetes avec des violations ne sont pas refusées. Les résultats de l’évaluation de la conformité sont toujours disponibles. Lors du déploiement de nouvelles définitions de stratégies sur des clusters en cours d’exécution, l’option Désactivé est utile pour tester la définition de stratégie, étant donné que les demandes d’admission avec des violations ne sont pas refusées.

  8. Cliquez sur Suivant.

  9. Définir les valeurs de paramètres

    • Pour exclure les espaces de noms Kubernetes de l’évaluation de stratégie, répertoriez les espaces de noms dans le paramètre Exclusions d’espaces de noms. Il est recommandé d’exclure kube-system, gatekeeper-system et azure-arc.
  10. Sélectionnez Revoir + créer.

Vous pouvez également utiliser le démarrage rapide Attribuer une stratégie – Portail pour rechercher et attribuer une stratégie Kubernetes. Recherchez une définition de stratégie Kubernetes au lieu de l’exemple audit vms.

Important

Les définitions de stratégie intégrées sont disponibles pour les clusters Kubernetes dans la catégorie Kubernetes. Pour obtenir la liste des définitions de stratégies intégrées, consultez Exemples Kubernetes.

Évaluation de la stratégie

Le module complémentaire contacte le service Azure Policy toutes les quinze minutes pour vérifier si des modifications ont été apportées aux affectations de stratégie. Pendant ce cycle d’actualisation, le module complémentaire recherche d’éventuelles modifications, qui déclenchent la création, la mise à jour ou la suppression des modèles de contrainte et des contraintes.

Dans un cluster Kubernetes, si un espace de noms possède une étiquette appropriée au cluster, les demandes d’admission avec violations sont refusées. Les résultats de l’évaluation de la conformité sont toujours disponibles.

  • Cluster Kubernetes avec Azure Arc : admission.policy.azure.com/ignore

Remarque

Si un administrateur de cluster peut être autorisé à créer et mettre à jour des modèles de contraintes et des ressources de contrainte installées par le module complémentaire Azure Policy, ces scénarios ne sont pas pris en charge, car les mises à jour manuelles sont remplacées. Gatekeeper continue d’évaluer les stratégies qui existaient avant l’installation du module complémentaire et l’affectation de définitions de stratégie Azure Policy.

Toutes les quinze minutes, le module complémentaire demande une analyse complète du cluster. Après la collecte des détails de l’analyse complète et les évaluations en temps réel faites par Gatekeeper des tentatives de modification du cluster, le module complémentaire renvoie les résultats à Azure Policy pour les inclure dans les détails de conformité comme toute affectation Azure Policy. Seuls les résultats des affectations de stratégie actives sont renvoyés au cours du cycle d’audit. Les résultats d’audit peuvent également être considérés comme des violations indiquées dans le champ d’état de la contrainte non réussie. Pour plus d’informations sur les ressources Non conformes, consultez Détails du composant pour les modes Fournisseur de ressources.

Notes

Chaque rapport de conformité dans Azure Policy pour vos clusters Kubernetes inclut toutes les violations des 45 dernières minutes. L’horodateur indique quand une violation s’est produite.

Quelques autres considérations :

  • Si l’abonnement au cluster est inscrit auprès de Microsoft Defender pour le cloud, les stratégies Kubernetes Microsoft Defender pour le cloud sont automatiquement appliquées au cluster.

  • Quand une stratégie de refus est appliquée sur un cluster avec des ressources Kubernetes existantes, toute ressource préexistante non conforme à la nouvelle stratégie continue de s’exécuter. Si la ressource non conforme est replanifiée sur un autre nœud, Gatekeeperbloque la création de la ressource.

  • Si un cluster comporte une stratégie de refus qui valide les ressources, l’utilisateur ne reçoit pas de message de refus lors de la création d’un déploiement. Prenons l’exemple d’un déploiement Kubernetes qui contient replicasets et des pods. Lorsqu’un utilisateur exécute kubectl describe deployment $MY_DEPLOYMENT, il ne renvoie pas de message de refus dans le cadre des événements. Toutefois, kubectl describe replicasets.apps $MY_DEPLOYMENT retourne les événements associés au rejet.

Remarque

Des conteneurs init peuvent être inclus lors de l’évaluation de la stratégie. Pour voir si des conteneurs init sont inclus, vérifiez dans la CRD la déclaration suivante ou une déclaration similaire :

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

Conflits de modèles de contrainte

Si les modèles de contrainte ont le même nom de métadonnées de ressource, mais que la définition de stratégie fait référence à la source à différents emplacements, les définitions de stratégie sont considérées comme étant en conflit. Exemple : Deux définitions de stratégie font référence au même fichier template.yaml stocké à différents emplacements sources, comme le magasin de modèles Azure Policy (store.policy.core.windows.net) et GitHub.

Lorsque des définitions de stratégie et leurs modèles de contrainte sont attribués, mais ne sont pas déjà installés sur le cluster et sont en conflit, ils sont signalés comme un conflit et ne sont pas installés dans le cluster jusqu’à ce que le conflit soit résolu. De même, toutes les définitions de stratégie existantes et leurs modèles de contrainte qui se trouvent déjà sur le cluster en conflit avec les définitions de stratégie nouvellement attribuées continuent de fonctionner normalement. Si une attribution existante est mise à jour et qu’il est impossible de synchroniser le modèle de contrainte, le cluster est également marqué comme un conflit. Pour tous les messages de conflit, consultez Raisons de conformité du mode fournisseur de ressources AKS.

Journalisation

En tant que contrôleur/conteneur Kubernetes, les pods azure-policy et gatekeeper conservent les journaux dans le cluster Kubernetes. En général, les enregistrementsAzure Policypeuvent être utilisés pour résoudre les problèmes d'ingestion de stratégie sur le cluster et les rapports de conformité. Les enregistrements pod gatekeeper-controller-manager peuvent être utilisés pour résoudre les problèmes de non-exécution. Les enregistrements pod gatekeeper-audit peuvent être utilisés pour résoudre les problèmes d’audit des ressources existantes. Les journaux peuvent être exposés dans la page Insights du cluster Kubernetes. Pour plus d’informations, consultez Superviser les performances de votre cluster Kubernetes avec Azure Monitor pour conteneurs.

Pour afficher les journaux du module complémentaire, utilisez 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

Si vous essayez de résoudre les problèmes d’un ComplianceReasonCode particulier qui apparaît dans vos résultats de conformité, vous pouvez rechercher dans les journaux des pods azure-policy pour voir l’erreur complète associée.

Pour plus d’informations, consultez Déboguer Gatekeeper dans la documentation de Gatekeeper.

Afficher les artefacts de Gatekeeper

Une fois que le module complémentaire a téléchargé les attributions de stratégie et installé les modèles de contrainte et les contraintes sur le cluster, il les annote à l’aide d’informations Azure Policy telles que l’ID d’attribution de stratégie et l’ID de définition de stratégie. Pour configurer votre client afin qu’il puisse afficher les artefacts associés au module complémentaire, procédez comme suit :

  1. Configurer kubeconfig pour le cluster.

    Pour un cluster Azure Kubernetes Service, utilisez la commande Azure CLI suivante :

    # 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. Testez la connexion du cluster.

    Exécutez la commande kubectl cluster-info. Si l’exécution est réussie, chaque service répond avec une URL de l’emplacement où il s’exécute.

Afficher les modèles de contrainte du module complémentaire

Pour afficher les modèles de contrainte téléchargés par le module complémentaire, exécutez kubectl get constrainttemplates. Les modèles de contrainte qui commencent par k8sazure sont ceux installés par le module complémentaire.

Afficher les modèles de mutation du module complémentaire

Pour afficher les modèles de mutation téléchargés par le module complémentaire, exécutez kubectl get assign, kubectl get assignmetadata et kubectl get modifyset.

Obtenir les mappages Azure Policy

Pour identifier le mappage entre un modèle de contrainte téléchargé sur le cluster et la définition de stratégie, utilisez kubectl get constrainttemplates <TEMPLATE> -o yaml. Les résultats ressemblent à la sortie suivante :

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> est l’ID d’abonnement et <GUID> est l’ID de la définition de stratégie mappée. <URL-OF-YAML> est l’emplacement source du modèle de contrainte que le complément a téléchargé pour l’installer sur le cluster.

Une fois que vous avez les noms des modèles de contrainte téléchargés par le module complémentaire, vous pouvez utiliser le nom pour afficher les contraintes associées. Utilisez kubectl get <constraintTemplateName> pour récupérer la liste. Les contraintes installées par le module complémentaire commencent par azurepolicy-.

Afficher les détails de la contrainte

La contrainte contient des détails sur les violations et les mappages à la définition et à l’attribution de la stratégie. Pour afficher les détails, utilisez kubectl get <CONSTRAINT-TEMPLATE> <CONSTRAINT> -o yaml. Les résultats ressemblent à la sortie suivante :

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

Résolution des problèmes liés au module complémentaire

Pour plus d’informations sur la résolution des problèmes liés au module complémentaire pour Kubernetes, consultez la section Kubernetes de l’article sur la résolution des problèmes liés à Azure Policy.

Pour les problèmes liés à l’extension Azure Policy pour Arc, consultez :

Pour les problèmes liés à Azure Policy, consultez :

Journal des modifications du module complémentaire Azure Policy pour AKS

Le module complémentaire d’Azure Policy pour AKS a un numéro de version qui indique la version d’image du module complémentaire. Comme la prise en charge de la fonctionnalité a été introduite récemment sur le module complémentaire, le numéro de version est augmenté.

Cette section vous aide à identifier la version du module complémentaire installée sur votre cluster et à partager une table d’historique de la version du module complémentaire d’Azure Policy installée par cluster AKS.

Identifier la version du module complémentaire installée sur votre cluster

Le module complémentaire d’Azure Policy utilise le schéma de Gestion sémantique de version standard pour chaque version. Pour identifier la version du module complémentaire d’Azure Policy utilisée, vous pouvez exécuter la commande suivante : kubectl get pod azure-policy-<unique-pod-identifier> -n kube-system -o json | jq '.spec.containers[0].image'

Pour identifier la version de Gatekeeper utilisée par votre module complémentaire d’Azure Policy, vous pouvez exécuter la commande suivante : kubectl get pod gatekeeper-controller-<unique-pod-identifier> -n gatekeeper-system -o json | jq '.spec.containers[0].image'

Enfin, pour identifier la version du cluster AKS que vous utilisez, suivez l’aide AKS en lien.

Versions du module complémentaire disponibles pour chaque version de cluster AKS

1.7.1

Présentation de CEL et VAP. Common Expression Language (CEL) est un langage d’expression natif Kubernetes qui peut être utilisé pour déclarer des règles de validation d’une stratégie. La validation de la fonctionnalité de stratégie d’admission (VAP) fournit une évaluation de stratégie dans l’arborescence, réduit la latence des requêtes d’admission et améliore la fiabilité et la disponibilité. Les actions de validation prises en charge incluent Deny, Warn et Audit. La création de stratégies personnalisées pour CEL/VAP est autorisée et les utilisateurs existants n’ont pas besoin de convertir leur Rego en CEL, car ils seront tous les deux pris en charge et utilisés pour appliquer des stratégies. Pour utiliser CEL et VAP, les utilisateurs doivent s’inscrire à l’indicateur de fonctionnalité AKS-AzurePolicyK8sNativeValidation dans l’espace de noms Microsoft.ContainerService. Pour plus d’informations, consultez la documentation de l’opérateur de contrôle d’appels.

Améliorations de sécurité.

  • Date de publication : septembre 2024
  • Kubernetes 1.27+ (la génération VAP n’est prise en charge que sur la version 1.30+)
  • Gatekeeper 3.17.1

1.7.0

Présentation de l’extension, fonctionnalité de déplacement vers la gauche qui vous permet de savoir si vos ressources de charge de travail (Déploiements, ReplicaSets, Tâches, etc.) produisent des pods admissibles. L’extension ne doit pas modifier le comportement de vos stratégies ; elle déplace simplement l’évaluation des stratégies étendues aux pods par l’opérateur de contrôle d'appels au moment de l’admission de la charge de travail plutôt qu’au moment de l’admission des pods. Toutefois, pour effectuer cette évaluation, elle doit générer et évaluer un pod de simulation basé sur la spécification de pod définie dans la charge de travail, laquelle peut avoir des métadonnées incomplètes. Par exemple, le pod de simulation ne contient pas les références de propriétaire appropriées. En raison de ce petit risque de modification du comportement de la stratégie, nous proposons l’extension comme désactivée par défaut. Pour activer l’extension pour une définition de stratégie donnée, définissez .policyRule.then.details.source sur All. Les éléments intégrés seront bientôt mis à jour pour permettre le paramétrage de ce champ. Si vous testez votre définition de stratégie et que le pod de simulation généré à des fins d’évaluation est incomplet, vous pouvez également utiliser une mutation avec Generated comme source pour muter les pods de simulation. Pour plus d’informations sur cette option, consultez la documentation de l’opérateur de contrôle d'appels.

Améliorations de sécurité.

  • Date de publication : juillet 2024
  • Kubernetes 1.27+
  • Gatekeeper 3.16.3

1.6.1

Améliorations de sécurité.

  • Publication : mai 2024
  • Gatekeeper 3.14.2

1.5.0

Améliorations de sécurité.

  • Publication : mai 2024
  • Kubernetes 1.27+
  • Gatekeeper 3.16.3

1.4.0

Active les données de mutation et les données externes par défaut. Le webhook de mutation supplémentaire et la limite du délai d’expiration du webhook de validation peuvent dans le pire des cas ajouter de la latence aux appels. Introduit également la prise en charge de l’affichage de la définition de stratégie et de la version de définition de l’ensemble dans les résultats de conformité.

  • Publication en mai 2024
  • Kubernetes 1.25+
  • Gatekeeper 3.14.0

1.3.0

Introduit l’état d’erreur des stratégies en erreur, ce qui leur permet d’être distingués des stratégies dans des états non conformes. Ajoute la prise en charge des modèles de contrainte v1 et l’utilisation du paramètre excludedNamespaces dans les stratégies de mutation. Ajoute une vérification de l’état d’erreur sur les modèles de contrainte après l’installation.

  • Publication : février 2024
  • Kubernetes 1.25+
  • Gatekeeper 3.14.0

1.2.1

  • Publié en octobre 2023
  • Kubernetes 1.25+
  • Gatekeeper 3.13.3

1.1.0

  • Publié en juillet 2023
  • Kubernetes 1.27+
  • Gatekeeper 3.11.1

1.0.1

  • Publié en juin 2023
  • Kubernetes 1.24+
  • Gatekeeper 3.11.1

1.0.0

Azure Policy pour Kubernetes prend désormais en charge la mutation pour corriger des clusters AKS à grande échelle !

Supprimer le module complémentaire

Supprimer le module complémentaire d’AKS

Pour supprimer le module complémentaire Azure Policy de votre cluster AKS, utilisez le Portail Azure ou Azure CLI :

  • Portail Azure

    1. Lancez le service AKS dans le portail Azure en sélectionnant Tous les services, puis en recherchant et en sélectionnant Services Kubernetes.

    2. Sélectionnez le cluster AKS dans lequel vous souhaitez désactiver le module complémentaire Azure Policy.

    3. Sélectionnez Stratégies sur le côté gauche de la page du service Kubernetes.

    4. Dans la page principale, sélectionnez le bouton Désactiver un module complémentaire.

  • 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
    

Supprimer le module complémentaire de Kubernetes compatible avec Azure Arc

Notes

Le modèle complémentaire Azure Policy Helm est désormais déconseillé. Vous devez à la place opter pour l’Extension Azure Policy pour Kubernetes avec Azure Arc.

Pour supprimer le module complémentaire Azure Policy et Gatekeeper de votre cluster Kubernetes compatible avec Azure Arc, exécutez la commande Helm suivante :

helm uninstall azure-policy-addon

Supprimer le module complémentaire du moteur AKS

Notes

Le produit AKS Engine est désormais déconseillé pour les clients du cloud public Azure. Envisagez d’utiliser Azure Kubernetes Service (AKS) pour Kubernetes managé ou le fournisseur d’API de cluster sur Azure pour Kubernetes automanagé. Il n’y a pas de nouvelles fonctionnalités planifiées; ce projet sera mis à jour uniquement pour les CVE et éléments similaires, avec Kubernetes 1.24 comme version finale pour recevoir les mises à jour.

Pour supprimer le module complémentaire Azure Policy et Gatekeeper de votre cluster AKS Engine, utilisez la méthode correspondant à la façon dont le module a été installé :

  • S’il a été installé en définissant la propriété addons dans la définition du cluster pour AKS Engine :

    Redéployez la définition du cluster sur AKS Engine après avoir modifié la propriété addons pour azure-policy en lui donnant la valeur false :

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

    Pour plus d’informations, consultez Moteur AKS – Désactiver le module complémentaire Azure Policy.

  • S’il a été installé avec des graphiques Helm, exécutez la commande Helm suivante :

    helm uninstall azure-policy-addon
    

Limites

  • Pour connaître les définitions et les limites d’attribution générales d’Azure Policy, consultez la documentation sur les limites d’Azure Policy.
  • Le module complémentaire Azure Policy pour Kubernetes peut uniquement être déployé dans des pools de nœuds Linux.
  • Nombre maximal de pods pris en charge par le module complémentaire Azure Policy par cluster : 10 000
  • Nombre maximal d’enregistrements non conformes par stratégie par cluster : 500
  • Nombre maximal d’enregistrements non conformes par abonnement : 1 million
  • Les installations de Gatekeeper en dehors du module complémentaire Azure Policy ne sont pas prises en charge. Désinstallez tous les composants installés par une installation antérieure de Gatekeeper avant d’activer le module complémentaire Azure Policy.
  • Les raisons de non-conformité ne sont pas disponibles en mode fournisseur de ressources Microsoft.Kubernetes.Data. Utilisez Détails du composant.
  • Les exemptions au niveau du composant ne sont pas prises en charge pour les modes Fournisseur de ressources. La prise en charge des paramètres est disponible dans les définitions Azure Policy pour exclure et inclure des espaces de noms particuliers.
  • L’utilisation de l’annotation metadata.gatekeeper.sh/requires-sync-data dans un modèle de contrainte pour configurer la réplication des données de votre cluster dans le cache OPA n’est actuellement autorisée que pour les stratégies intégrées. La raison en est qu’elle peut augmenter considérablement l’utilisation des ressources des pods Gatekeeper si elle n’est pas utilisée avec attention.

Définition de la configuration Gatekeeper

La modification de la configuration Gatekeeper n’est pas prise en charge, car elle contient des paramètres de sécurité critiques. Les modifications apportées à la configuration sont rapprochées.

Utilisation de data.inventory dans des modèles de contrainte

Pour le moment, plusieurs stratégies intégrées utilisent la réplication des données, ce qui permet aux utilisateurs de synchroniser les ressources de cluster existantes avec le cache OPA, et de les référencer durant l’évaluation d’une requête AdmissionReview. Les stratégies de réplication des données peuvent être différenciées par la présence de data.inventory dans Rego, et par la présence de l’annotation metadata.gatekeeper.sh/requires-sync-data, qui indique au module complémentaire Azure Policy quelles sont les ressources qui doivent être mises en cache pour le bon fonctionnement de l’évaluation de la stratégie. Ce processus diffère de celui de Gatekeeper autonome, où cette annotation est descriptive et non prescriptive.

La réplication des données est actuellement bloquée pour une utilisation dans les définitions de stratégie personnalisées, car la réplication des ressources avec des nombres d’instances élevés peut augmenter considérablement l’utilisation des ressources des pods Gatekeeper si elle n’est pas utilisée avec attention. Vous voyez une erreur ConstraintTemplateInstallFailed quand vous tentez de créer une définition de stratégie personnalisée contenant un modèle de contrainte avec cette annotation.

La suppression de l’annotation peut sembler atténuer l’erreur que vous voyez, mais le module complémentaire de stratégie ne synchronise aucune ressource requise pour ce modèle de contrainte dans le cache. Par conséquent, vos stratégies sont évaluées par rapport à un data.inventory vide (en supposant qu’aucun composant intégré n’est attribué qui réplique les ressources requises). Cela fournira des résultats de conformité trompeurs. Comme indiqué précédemment, la modification manuelle de la configuration pour mettre en cache les ressources requises n’est pas non plus autorisée.

Les limitations suivantes s’appliquent uniquement au module complémentaire Azure Policy pour AKS :

Forum aux questions

Que déploie le module complémentaire d’Azure Policy/l’extension Azure Policy sur mon cluster lors de l’installation ?

Le module complémentaire Azure Policy requiert trois composants Gatekeeper pour s’exécuter : un pod d’audit et deux réplicas de pod de webhook. Un pod Azure Policy et un pod de webhook Azure Policy sont également installés.

À quelle consommation de ressources dois-je m’attendre sur chaque cluster pour le module complémentaire / l’extension Azure Policy ?

Les composants Azure Policy pour Kubernetes qui s’exécutent sur votre cluster consomment davantage de ressources, car le nombre de ressources Kubernetes et d’attributions de stratégie augmente dans le cluster, ce qui nécessite des opérations d’audit et de mise en œuvre.

Voici des estimations pour vous aider à planifier :

  • Pour moins de 500 pods dans un seul cluster avec un maximum de 20 contraintes : 2 processeurs virtuels et 350 Mo de mémoire par composant.
  • Pour plus de 500 pods dans un seul cluster avec un maximum de 40 contraintes : 3 processeurs virtuels et 600 Mo de mémoire par composant.

Azure Policy pour les définitions Kubernetes peut-il être appliqué aux pods Windows ?

Les pods Windows ne prennent pas en charge les contextes de sécurité. Ainsi, certaines des définitions Azure Policy, comme la désactivation des privilèges racine, ne peuvent pas être réaffectées dans des pods Windows et s’appliquent uniquement à des pods Linux.

Quels type de données de diagnostic sont-elles collectées par le module complémentaire Azure Policy ?

Le module complémentaire Azure Policy pour Kubernetes collecte une quantité limitée de données de diagnostics de cluster. Ces données de diagnostic sont des données techniques vitales concernant les logiciels et le niveau de performance. Les données sont utilisées des façons suivantes :

  • Maintenir le module complémentaire Azure Policy à jour.
  • Maintenir la sécurité, la fiabilité et le niveau de performance du module complémentaire Azure Policy.
  • Améliorer le module complémentaire Azure Policy via l’analyse agrégée de son utilisation.

Les informations collectées par le module complémentaire ne sont pas des données personnelles. Les détails suivants sont actuellement recueillis :

  • Version de l’agent du module complémentaire Azure Policy
  • Type de cluster
  • Région du cluster
  • Groupe de ressources de cluster
  • ID de la ressource de cluster
  • ID de l’abonnement du cluster
  • Système d’exploitation du cluster (exemple : Linux)
  • Ville du cluster (exemple : Seattle)
  • État ou province du cluster (exemple : Washington)
  • Pays ou région du cluster (exemple : États-Unis)
  • Exceptions/erreurs rencontrées par le module complémentaire Azure Policy lors de l’installation de l’agent concernant l’évaluation de la stratégie
  • Nombre de définitions de stratégies Gatekeeper non installées par le module complémentaire Azure Policy

Quelles sont les meilleures pratiques générales à garder à l’esprit lors de l’installation du module complémentaire Azure Policy ?

  • Utilisez le pool de nœuds système avec la teinte CriticalAddonsOnly pour planifier des pods Gatekeeper. Pour plus d’informations, consultez Utilisation de pools de nœuds système.
  • Sécurisez le trafic sortant de vos clusters AKS. Pour plus d’informations, consultez Contrôle du trafic de sortie pour les nœuds de cluster.
  • Si aad-pod-identity est activé sur le cluster, les pods NMI (Node Managed Identity) modifient les nœuds iptables pour intercepter les appels au point de terminaison Azure Instance Metadata. Cette configuration signifie que toutes les requêtes adressées au point de terminaison Metadata sont interceptées par NMI, même si le pod n’utilise pas aad-pod-identity.
  • Vous pouvez configurer la CRD AzurePodIdentityException pour informer aad-pod-identity que toutes les requêtes adressées au point de terminaison de métadonnées depuis un pod correspondant aux étiquettes définies dans la CRD doivent être proxisées sans aucun traitement dans NMI. Vous devez exclure de aad-pod-identity les pods système ayant l’étiquette kubernetes.azure.com/managedby: aks dans l’espace de noms kube-system en configurant la CRD AzurePodIdentityException. Pour plus d’informations, consultez Désactiver aad-pod-identity pour un pod ou une application spécifique. Pour configurer une exception, installez le fichier YAML mic-exception.

Étapes suivantes