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 :
- Azure Kubernetes Service (AKS), via le module complémentaire d’Azure Policy pour AKS
- Kubernetes avec Azure Arc, via une Extension d’Azure Policy pour Arc
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 :
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.
Créer ou utiliser un exemple de définition Azure Policy pour Kubernetes
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
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
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.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
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
Lancez le service AKS dans le portail Azure en sélectionnant Tous les services, puis en recherchant et en sélectionnant Services Kubernetes.
Sélectionnez l’un de vos clusters AKS.
Sélectionnez Stratégies sur le côté gauche de la page du service Kubernetes.
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.
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.
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.
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
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.
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.
Dans le volet gauche de la page Azure Policy, sélectionnez Définitions.
Dans la zone de liste déroulante Catégorie, utilisez Sélectionner tout pour effacer le filtre, puis sélectionnez Kubernetes.
Sélectionnez la définition de stratégie, puis sélectionnez le bouton Affecter.
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.
Donnez un Nom et une Description à l’affectation de stratégie, qui permettront de l’identifier facilement.
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.
Cliquez sur Suivant.
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.
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écutekubectl 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 :
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>
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.
Afficher les contraintes associées à un modèle de contrainte
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 :
- Inspecter les journaux d’Azure Policy
- Résolution des problèmes généraux pour Azure Policy sur Kubernetes
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.9.1
Améliorations de sécurité.
- Publication : janvier 2025
- Kubernetes 1.27+
- Gatekeeper 3.17.1
1.8.0
La stratégie peut désormais être utilisée pour évaluer les opérations CONNECT, par exemple pour refuser des exec
. Notez qu’il n’existe pas de conformité « brownfield » disponible pour les opérations CONNECT non conformes : une stratégie avec un effet d’audit ciblant des CONNECT ne produit pas de résultat.
Améliorations de sécurité.
- Publication : novembre 2024
- Kubernetes 1.27+
- Gatekeeper 3.17.1
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é.
- 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.
L’extension est actuellement disponible seulement sur les clusters AKS, et non pas sur les clusters Arc.
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
Lancez le service AKS dans le portail Azure en sélectionnant Tous les services, puis en recherchant et en sélectionnant Services Kubernetes.
Sélectionnez le cluster AKS dans lequel vous souhaitez désactiver le module complémentaire Azure Policy.
Sélectionnez Stratégies sur le côté gauche de la page du service Kubernetes.
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 :
- La stratégie de sécurité des pods AKS et le module complémentaire Azure Policy pour AKS ne peuvent pas être activés simultanément. Pour plus d’informations, consultez Limitation de la sécurité des pods AKS.
- Espaces de noms automatiquement exclus par le module complémentaire Azure Policy à des fins d’évaluation : kube-system et gatekeeper-system.
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œudsiptables
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 pasaad-pod-identity
. - Vous pouvez configurer la CRD
AzurePodIdentityException
pour informeraad-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 deaad-pod-identity
les pods système ayant l’étiquettekubernetes.azure.com/managedby: aks
dans l’espace de noms kube-system en configurant la CRDAzurePodIdentityException
. 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
- Consultez des exemples à la page Exemples Azure Policy.
- Consultez la page Structure de définition Azure Policy.
- Consultez la page Compréhension des effets de Policy.
- Découvrez comment créer des stratégies par programmation.
- Découvrez comment obtenir des données de conformité.
- Découvrez comment corriger des ressources non conformes.
- Pour en savoir plus sur les groupes d’administration, consultez Organiser vos ressources avec des groupes d’administration Azure.