Partager via


Utiliser des mesures de sécurité de déploiement pour appliquer les meilleures pratiques dans Azure Kubernetes Service (AKS) (préversion)

Cet article montre comment utiliser des mesures de sécurité de déploiement pour appliquer les meilleures pratiques sur un cluster Azure Kubernetes Service (AKS).

Vue d’ensemble

Tout au long du cycle de vie du développement, il est courant que des bogues et d’autres problèmes surviennent si le déploiement initial de vos ressources Kubernetes inclut des configurations incorrectes. Pour alléger le fardeau du développement Kubernetes, Azure Kubernetes Service (AKS) offre des mesures de sécurité de déploiement (préversion). Les mesures de sécurité de déploiement appliquent les meilleures pratiques Kubernetes dans votre cluster AKS via des contrôles Azure Policy.

Les mesures de sécurité de déploiement offrent deux niveaux de configuration :

  • Warning : affiche les messages d’avertissement dans le terminal de code pour vous avertir de toutes les configurations de cluster non conformes, mais permet toujours d’effectuer la requête.
  • Enforcement: applique des configurations de conformité en refusant et en mutant les déploiements s’ils ne suivent pas les meilleures pratiques.

Après avoir configuré les mesures de sécurité de déploiement sur « Avertissement » ou « Application », le déploiement évalue de manière programmatique la conformité de vos clusters au moment de la création ou de la mise à jour. Les mesures de sécurité de déploiement affichent également des informations de conformité agrégées sur vos charges de travail au niveau de la ressource par le biais du tableau de bord de conformité d’Azure Policy dans le Portail Azure, ou dans votre interface CLI ou votre terminal. L’exécution d’une charge de travail non conforme indique que votre cluster ne suit pas les meilleures pratiques, et que les charges de travail sur votre cluster risquent de rencontrer des problèmes causés par la configuration de celui-ci.

Important

Les fonctionnalités d’évaluation AKS sont disponibles en libre-service et font l’objet d’un abonnement. Les préversions sont fournies « en l’état » et « en fonction des disponibilités », et sont exclues des contrats de niveau de service et de la garantie limitée. Les préversions AKS sont, dans la mesure du possible, partiellement couvertes par le service clientèle. Telles quelles, ces fonctionnalités ne sont pas destinées à une utilisation en production. Pour plus d’informations, consultez les articles de support suivants :

Prérequis

Installer l’extension CLI aks-preview

  1. Installez l’extension CLI aks-preview à l’aide de la commande az extension add.

    az extension add --name aks-preview
    
  2. Mettez à jour l’extension pour vous assurer que la dernière version est installée à l’aide de la commande az extension update.

    az extension update --name aks-preview
    

Inscrire l’indicateur de fonctionnalité pour les mesures de sécurité de déploiement

  1. Inscrivez l’indicateur de fonctionnalité SafeguardsPreview à l’aide de la commande az feature register.

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

    Quelques minutes sont nécessaires pour que l’état s’affiche Registered (Inscrit).

  2. Vérifiez l’état de l’inscription en utilisant la commande az feature show.

    az feature show --namespace Microsoft.ContainerService --name SafeguardsPreview
    
  3. Quand l’état reflète Inscrit, actualisez l’inscription du fournisseur de ressources Microsoft.ContainerService à l’aide de la commande az provider register.

    az provider register --namespace Microsoft.ContainerService
    

Stratégies de mesures de sécurité de déploiement

Remarque

Les stratégies ReadOnlyRootFilesystem et RootfilesystemInitContainers sont actuellement disponibles uniquement sur Linux.

Le tableau suivant liste les stratégies qui deviennent actives lorsque vous activez les mesures de sécurité de déploiement ainsi que les ressource Kubernetes qu’elles cibleront. Vous pouvez voir les mesures de sécurité de déploiement actuellement disponibles sur le Portail Azure en tant que définition Azure Policy, ou dans Définitions Azure Policy intégrées pour Azure Kubernetes Service. L’intention de cette collection est de créer une liste commune et générique des meilleures pratiques applicables à la plupart des utilisateurs et cas d’usage.

Stratégie de mesures de sécurité de déploiement Ressource Kubernetes ciblée Résultat de la mutation s’il est disponible
[Aperçu] : impossible de modifier des nœuds individuels Nœud S/O
Les limites des ressources CPU et de mémoire des conteneurs de cluster Kubernetes ne doivent pas dépasser les limites spécifiées Pod Définit les limites de ressources du processeur sur 500m si elles ne sont pas définies et les limites de mémoire sur 500Mi si aucun chemin n’est présent
[Aperçu] : doit avoir un ensemble de règles anti-affinité Deployment, StatefulSet, ReplicationController, ReplicaSet S/O
[Aperçu] : Pas d'étiquettes spécifiques à AKS Deployment, StatefulSet, Replicaset S/O
Les conteneurs de cluster Kubernetes doivent utiliser uniquement des fonctionnalités autorisées Pod S/O
[Aperçu] : rejets de pool de systèmes réservés Nœud Supprime la teinte CriticalAddonsOnly d’un pool de nœuds utilisateur s’il n’est pas défini. AKS utilise la teinte CriticalAddonsOnly pour empêcher les pods clients d’atteindre le pool système. Cette configuration garantit une séparation claire entre les composants AKS et les pods clients et empêche l’éviction des pods clients qui ne tolèrent pas la teinte CriticalAddonsOnly.
Vérifier que les conteneurs de cluster ont des sondes de préparation ou d’activité configurées Pod S/O
Les clusters Kubernetes doivent utiliser le pilote Container Storage Interface(CSI) StorageClass StorageClass S/O
[Préversion] : les conteneurs de cluster Kubernetes doivent tirer des images uniquement quand des secrets de tirage d’image sont présents Pod S/O
[Préversion] : le cluster Kubernetes doit implémenter des budgets d’interruption de pod exacts Deployment, ReplicaSet, StatefulSet Définit maxUnavailable dans la ressource PodDisruptionBudget sur 1.
[Préversion] : les services de cluster Kubernetes doivent utiliser des sélecteurs uniques Service S/O
[Préversion] : la propriété ReadOnlyRootFilesystem dans la spécification Pod est définie sur true Pod Définit la propriété readOnlyRootFilesystem dans la spécification Pod sur true si elle n’est pas définie. Cette configuration empêche les conteneurs d’écrire dans le système de fichiers racine.
[Préversion] : la propriété RootfilesystemInitContainers dans la spécification Pod est définie sur true Pod Définit la propriété rootFilesystemInitContainers dans la spécification Pod sur true si elle n’est pas définie.
[Préversion] : les images conteneur du cluster Kubernetes ne doivent pas inclure la dernière balise d’image Deployment, StatefulSet, ReplicationController, ReplicaSet S/O
[Préversion] : Les images conteneur du cluster Kubernetes doivent inclure le hook de préStop Deployment, StatefulSet, ReplicationController, ReplicaSet S/O

Si vous souhaitez envoyer une idée ou faire une demande au sujet des mesures de sécurité de déploiement, ouvrez un problème dans le référentiel GitHub AKS et ajoutez [deployment safeguards request] au début du titre.

Activer les mesures de sécurité de déploiement

Remarque

Si vous avez activé l’utilisation des mesures de sécurité de déploiement par Azure Policy pour la première fois, vous devrez peut-être attendre jusqu’à 20 minutes pour qu’Azure Policy les prenne en compte.

L’utilisation du niveau Enforcement de mesures de sécurité de déploiement signifie que vous optez pour le blocage et la mutation des déploiements. Tenez compte de la façon dont ces stratégies peuvent fonctionner avec votre cluster AKS avant d’activer Enforcement.

Activer les mesures de sécurité de déploiement sur un nouveau cluster

Activez les mesures de sécurité de déploiement sur un nouveau cluster à l’aide de la commande az aks create avec les indicateurs --safeguards-level et --safeguards-version.

Si vous souhaitez recevoir des avertissements de non-conformité, définissez --safeguards-level sur Warning. Si vous souhaitez refuser ou muter tous les déploiements non conformes, définissez-le sur Enforcement. Pour recevoir des avertissements, définissez --safeguards-level sur « Avertissement ». Pour refuser ou muter tous les déploiements qui ne respectent pas les mesures de sécurité de déploiement, définissez --safeguards-level sur « Application ». Pour définir la version des mesures de sécurité de déploiement, utilisez l’indicateur --safeguards-version. Actuellement, V2.0.0 est la dernière version des mesures de sécurité de déploiement.

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

Activer les mesures de sécurité de déploiement sur un cluster existant

Activez les mesures de sécurité de déploiement sur un cluster existant sur lequel le module complémentaire Azure Policy est activé à l’aide de la commande az aks update et des indicateurs --safeguards-level et --safeguards-version. Si vous souhaitez recevoir des avertissements de non-conformité, définissez --safeguards-level sur Warning. Si vous souhaitez refuser ou muter tous les déploiements non conformes, définissez-le sur Enforcement.

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

Si vous souhaitez mettre à jour le niveau des mesures de sécurité de déploiement d’un cluster existant, utilisez la commande az aks update avec l’indicateur --safeguards-level défini sur Warning ou Enforcement.

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

Exclure des espaces de noms

Vous pouvez également exclure certains espaces de noms des mesures de sécurité de déploiement. Lorsque vous excluez un espace de noms, l’activité dans cet espace de noms n’est pas affectée par les avertissements ou l’application des mesures de sécurité de déploiement.

Par exemple, pour exclure les espaces de noms ns1 et ns2, utilisez une liste séparée par des virgules d’espaces de noms avec l’indicateur --safeguards-excluded-ns, comme illustré dans l’exemple suivant :

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

Mettre à jour votre version des mesures de sécurité de déploiement

Remarque

v2.0.0 est la dernière version des mesures de sécurité de déploiement.

Mettez à jour votre version des mesures de sécurité de déploiement à l’aide de la commande az aks update avec l’indicateur --safeguards-version défini sur la nouvelle version. L’exemple suivant met à jour un cluster existant pour utiliser la version 2.0.0 :

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

Vérifier la conformité entre les clusters

Après avoir déployé votre manifeste Kubernetes, vous verrez des avertissements ou un message de refus potentiel dans votre interface CLI ou votre terminal si le cluster n’est pas conforme aux mesures de sécurité de déploiement, comme illustré dans les exemples suivants :

Avertissement

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

Mise en application

Avec les mutations des mesures de sécurité de déploiement, le niveau Enforcement mute vos ressources Kubernetes le cas échéant. Toutefois, vos ressources Kubernetes doivent toujours passer toutes les mesures de protection pour être déployées avec succès. Si des stratégies de protection échouent, votre ressource est refusée et ne sera pas déployée.

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

Si vos ressources Kubernetes sont conformes aux mesures de sécurité de mutation applicables et répondent à toutes les autres exigences de protection, elles seront correctement déployées, comme indiqué dans l’exemple suivant :

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

Vérifier la conformité des différents clusters à l’aide du tableau de bord Azure Policy

Pour vérifier que les mesures de sécurité de déploiement ont été appliquées et pour vérifier la conformité de votre cluster, accédez à la page du Portail Azure de votre cluster et sélectionnez Stratégies, puis sélectionnez Accéder à Azure Policy.

Dans la liste des stratégies et des initiatives, sélectionnez l’initiative associée aux mesures de sécurité de déploiement. Un tableau de bord s’affiche, indiquant l’état de la conformité sur votre cluster AKS.

Remarque

Pour évaluer correctement la conformité sur votre cluster AKS, l’initiative Azure Policy doit être étendue au groupe de ressources de votre cluster.

Désactiver les mesures de sécurité de déploiement

Désactivez les mesures de sécurité de déploiement sur votre cluster à l’aide de la commande az aks update et définissez --safeguards-level sur Off.

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

--

FAQ

J’ai activé les mesures de sécurité de déploiement avec Azure Policy pour la première fois. Pourquoi est-ce que je ne vois aucun avertissement ? Pourquoi mes pods ne sont-ils pas refusés ?

Azure Policy peut prendre jusqu’à 35 minutes pour se synchroniser avec votre cluster après sa première activation.

Je viens de passer d’Avertissement à Application. Cela prendra-t-il effet immédiatement ?

Lorsque vous changez le niveau des mesures de sécurité de déploiement, vous devrez peut-être attendre jusqu’à 15 minutes pour que le nouveau niveau prenne effet.

Puis-je créer mes propres mutations ?

Non. Si vous avez une idée de mesure de sécurité, ouvrez un problème dans le référentiel GitHub AKS et ajoutez [deployment safeguards request] au début du titre.

Puis-je choisir les mutations que je souhaite dans le mode Application ?

Non. Les mesures de sécurité de déploiement sont tout ou rien. Une fois que vous activez le mode Avertissement ou Application, toutes les mesures de sécurité seront actives.

Pourquoi ma ressource de déploiement a-t-elle été admise, même si elle ne suivait pas les meilleures pratiques ?

Les mesures de sécurité de déploiement appliquent les normes des meilleures pratiques par le biais de contrôles Azure Policy et disposent de stratégies qui se valident au regard des ressources Kubernetes. Pour évaluer et appliquer des composants de cluster, Azure Policy étend Gatekeeper. L’application de Gatekeeper fonctionne également actuellement dans un modèlefail-open. Comme il n’existe aucune garantie que Gatekeeper répondra à notre appel de mise en réseau, nous nous assurons que, dans ce cas, la validation est ignorée afin que le refus ne bloque pas vos déploiements.

Pour plus d’informations, consultez Validation de charge de travail dans Gatekeeper.

Étapes suivantes