Protéger la sécurisation renforcée de vos plans de données Kubernetes

Cette page explique comment utiliser l'ensemble de recommandations de sécurité de Microsoft Defender for Cloud dédiées au renforcement du plan de données Kubernetes.

Conseil

Pour obtenir la liste des recommandations de sécurité susceptibles d’apparaître pour les clusters et nœuds Kubernetes, passez en revue les recommandations de conteneur.

Configurer la protection de votre charge de travail

Microsoft Defender for Cloud inclut un ensemble de recommandations disponibles une fois que vous avez installé le Azure Policy pour Kubernetes.

Prérequis

Activer la sécurisation renforcée des plans de données Kubernetes

Vous pouvez activer le Azure Policy pour Kubernetes de deux façons :

Activer Azure Policy pour Kubernetes pour tous les clusters actuels et futurs à l’aide des paramètres de plan/connecteur

Remarque

Lorsque vous activez ce paramètre, les Azure Policy pour les pods Kubernetes sont installés sur le cluster. Cette opération alloue un petit volume du processeur et de la mémoire pour les pods à utiliser. Il est possible que cette allocation puisse atteindre la capacité maximale, mais elle n’affecte pas le reste du processeur et de la mémoire sur la ressource.

Remarque

L’activation pour AWS via le connecteur n’est pas prise en charge en raison d’une limitation dans EKS qui nécessite que l’administrateur du cluster ajoute des autorisations pour un nouveau rôle IAM sur le cluster lui-même.

Activer pour les abonnements Azure ou en local

Lorsque vous activez Microsoft Defender pour les conteneurs, le paramètre « Azure Policy pour Kubernetes » est activé par défaut pour le Azure Kubernetes Service et pour les clusters Kubernetes compatibles Azure Arc dans l’abonnement approprié. Si vous désactivez le paramètre lors de la configuration initiale, vous pouvez l’activer manuellement par la suite.

Si vous avez désactivé les paramètres « Azure Policy pour Kubernetes » dans le plan de conteneurs, vous pouvez suivre les étapes à suivre pour l’activer sur tous les clusters de votre abonnement :

  1. Connectez-vous au portail Azure.

  2. Accédez à Microsoft Defender for Cloud>Management>Environment settings.

  3. Sélectionnez l’abonnement approprié.

  4. Sur la page des plans Defender, vérifiez que l’option Conteneurs est sur On.

  5. Sélectionnez Paramètres.

    Screenshot affichant le bouton paramètres dans le Defender plan.

  6. Dans la page Paramètres et Surveillance, basculez la Azure Policy pour Kubernetes sur Activé.

    Capture d’écran montrant les boutons à bascule utilisés pour activer ou désactiver les extensions.

Activer pour les projets GCP

Lorsque vous activez Microsoft Defender pour conteneurs sur un connecteur GCP, le paramètre « extension Azure Policy pour Azure Arc » est activé par défaut pour le moteur Google Kubernetes dans le projet approprié. Si vous désactivez le paramètre lors de la configuration initiale, vous pouvez l’activer manuellement par la suite.

Si vous avez désactivé les paramètres « Azure Policy Extension pour Azure Arc » sous le connecteur GCP, vous pouvez suivre les étapes ci-dessous pour l'activer sur votre connecteur GCP.

Déployer Azure Policy pour Kubernetes sur des clusters existants

Vous pouvez configurer manuellement les Azure Policy pour Kubernetes sur des clusters Kubernetes existants via la page Recommandations. Une fois activée, les recommandations de renforcement deviennent disponibles (certaines recommandations nécessitent une autre configuration pour fonctionner).

Remarque

Pour AWS, l’intégration à grande échelle à l’aide du connecteur n’est pas prise en charge. Toutefois, vous pouvez installer Azure Policy pour Kubernetes sur tous les clusters existants ou sur des clusters spécifiques à l’aide de la recommandation Azure Arc-enabled Kubernetes clusters should have the Azure policy extension for Kubernetes extension installed.

Pour déployer la Azure Policy pour Kubernetes sur des clusters spécifiés :

  1. Connectez-vous au portail Azure.

  2. Accédez à Microsoft Defender for Cloud>General>Recommendations.

  3. Recherchez la recommandation appropriée :

    • Azure -"Azure Kubernetes Service clusters should have the Azure Policy add-on for Kubernetes installed"
    • GCP - "GKE clusters should have the Azure Policy extension".
    • AWS et local - "Azure Arc-enabled Kubernetes clusters should have the Azure policy extension for Kubernetes extension installed".

    Capture d'écran affichant la recommandation des clusters du service Azure Kubernetes.

  4. Sélectionnez une recommandation trouvée.

  5. Sélectionnez Corriger.

    Capture d’écran d’une recommandation avec le bouton Corriger mis en surbrillance.

  6. Répétez chaque recommandation supplémentaire.

Afficher et configurer le bundle de recommandations

Environ 30 minutes après la fin de l’installation de Kubernetes Azure Policy, Defender for Cloud affiche l’état d’intégrité des clusters pour les recommandations suivantes, chacun dans le contrôle de sécurité approprié, comme indiqué :

Remarque

Si vous installez le Azure Policy pour Kubernetes pour la première fois, ces recommandations apparaissent comme de nouveaux ajouts dans la liste des recommandations.

Conseil

Certaines recommandations ont des paramètres qui doivent être personnalisés via Azure Policy pour les utiliser efficacement. Par exemple, pour bénéficier de la recommandation Seules les images de conteneur provenant de registres approuvés doivent être déployées, vous devez définir vos registres approuvés. Si vous n’entrez pas les paramètres nécessaires pour les recommandations qui requièrent une configuration, vos charges de travail seront affichées comme défectueuses.

Remarque

Les composants Microsoft tels que le capteur Defender sont déployés par défaut dans l’espace de noms kube-system. Cette configuration garantit qu’elles ne sont pas marquées comme non conformes dans les recommandations de plan de données. Toutefois, les outils fournisseurs tiers installés dans un autre espace de noms peuvent être marqués comme non conformes. Pour exclure les fournisseurs tiers de ces suggestions, vous pouvez ajouter leur espace de noms à la liste d’exclusions.

Nom de la recommandation Contrôle de sécurité Configuration requise
Les limites de mémoire et du processeur du conteneur doivent être appliquées Protéger les applications contre les attaques DDoS Oui
Les images de conteneur doivent être déployées uniquement à partir de registres approuvés. Corriger les vulnérabilités Oui
Les fonctionnalités Linux à privilèges minimum doivent être appliquées pour les conteneurs Gérer l’accès et les autorisations Oui
Les conteneurs doivent uniquement utiliser des profils AppArmor autorisés Corriger les configurations de sécurité Oui
Les services doivent écouter uniquement sur les ports autorisés Restreindre l’accès réseau non autorisé Oui
L’utilisation du réseau hôte et des ports doit être limitée Restreindre l’accès réseau non autorisé Oui
L’utilisation des montages de volume HostPath de pad doit être limitée à une liste connue Gérer l’accès et les autorisations Oui
Tout conteneur avec une élévation des privilèges doit être évité Gérer l’accès et les autorisations Non
Éviter les conteneurs partageant des espaces de noms d’hôte sensibles Gérer l’accès et les autorisations Non
Le système de fichiers racine immuable (en lecture seule) doit être appliqué pour les conteneurs Gérer l’accès et les autorisations Non
Les clusters Kubernetes doivent être accessibles uniquement par le biais de HTTPS Chiffrer les données en transit Non
Les clusters Kubernetes doivent désactiver le montage automatique des informations d’identification d’API Gérer l’accès et les autorisations Non
Les clusters Kubernetes ne doivent pas utiliser l’espace de noms par défaut Implémenter les bonnes pratiques de sécurité Non
Les clusters Kubernetes ne doivent pas accorder de fonctionnalités de sécurité CAPSYSADMIN Gérer l’accès et les autorisations Non
Les conteneurs privilégiés doivent être évités Gérer l’accès et les autorisations Non
L’exécution des conteneurs en tant qu’utilisateur racine doit être évitée Gérer l’accès et les autorisations Non

Pour les recommandations avec des paramètres à personnaliser, vous devrez définir les paramètres :

Pour définir les paramètres :

  1. Connectez-vous au portail Azure.

  2. Accédez à Microsoft Defender for Cloud>Management>Environment settings.

  3. Sélectionnez l’abonnement approprié.

  4. Dans le menu de navigation, sélectionnez Stratégies de sécurité.

    Capture d’écran de la page Stratégies de sécurité.

  5. Sous l’onglet Normes , recherchez la norme de sécurité appropriée.

  6. Sélectionnez le menu 3 points de la norme de sécurité, puis sélectionnez Gérer.

    Capture d’écran de la sélection de Gérer dans le menu à trois points de la recommandation.

  7. Sélectionnez le menu 3 points de l’attribution de stratégie appropriée, puis sélectionnez Gérer l’effet et les paramètres.

    Capture d’écran de la sélection du menu à 3 points, puis de la sélection de l’effet et des paramètres Gérer.

  8. Modifiez les valeurs en fonction des besoins.

    Capture d’écran du panneau paramètres.

  9. Sélectionnez Enregistrer.

Pour appliquer les recommandations :

  1. Ouvrez la page Détails de la recommandation et sélectionnez Refuser :

    Screenshot affichant l’option Refuser pour Azure Policy parameter.

    Le volet permettant de définir l’étendue s’ouvre.

  2. Définissez l’étendue et sélectionnez Modifier pour refuser.

Pour voir quelles recommandations s’appliquent à vos clusters :

  1. Connectez-vous au portail Azure.

  2. Accédez à Defender for Cloud>Inventory.

  3. Définissez le filtre de type de ressource sur les services Kubernetes , puis sélectionnez Appliquer.

    Capture d’écran de l’utilisation du filtre de type de ressource pour sélectionner le service Kubernetes.

  4. Sélectionnez un cluster à examiner.

  5. Examinez les recommandations disponibles. Lorsque vous consultez une recommandation de l’ensemble de protection de la charge de travail, le nombre de pods affectés (« composants Kubernetes ») est indiqué avec le cluster.

  6. Facultatif : pour obtenir la liste des pods spécifiques, sélectionnez la recommandation.

    Capture d’écran de la sélection d’une recommandation dans la page État de santé des ressources.

  7. puis sélectionnez Effectuer une action.

Capture d’écran montrant où seront affichés les pods affectés pour une recommandation Kubernetes.

Pour tester l'application des règles, utilisez les deux déploiements Kubernetes ci-dessous :

  • L’une est pour un déploiement sain, conforme au lot de recommandations de protection de la charge de travail.

  • L’autre est pour un déploiement défectueux, non conforme avec n’importe laquelle des recommandations.

Déployez les fichiers d’exemple .yaml tels quels ou utilisez-les comme référence pour corriger votre propre charge de travail.

Exemple de fichier .yaml de déploiement sain

apiVersion: apps/v1
kind: Deployment
metadata:
  name: redis-healthy-deployment
  labels:
    app: redis
spec:
  replicas: 3
  selector:
    matchLabels:
      app: redis
  template:
    metadata:
      labels:
        app: redis
      annotations:
        container.apparmor.security.beta.kubernetes.io/redis: runtime/default
    spec:
      containers:
      - name: redis
        image: <customer-registry>.azurecr.io/redis:latest
        ports:
        - containerPort: 80
        resources:
          limits:
            cpu: 100m
            memory: 250Mi
        securityContext:
          privileged: false
          readOnlyRootFilesystem: true
          allowPrivilegeEscalation: false
          runAsNonRoot: true
          runAsUser: 1000
---
apiVersion: v1
kind: Service
metadata:
  name: redis-healthy-service
spec:
  type: LoadBalancer
  selector:
    app: redis
  ports:
  - port: 80
    targetPort: 80

Exemple de fichier .yaml de déploiement défectueux

apiVersion: apps/v1
kind: Deployment
metadata:
  name: redis-unhealthy-deployment
  labels:
    app: redis
spec:
  replicas: 3
  selector:
    matchLabels:
      app: redis
  template:
    metadata:      
      labels:
        app: redis
    spec:
      hostNetwork: true
      hostPID: true 
      hostIPC: true
      containers:
      - name: redis
        image: redis:latest
        ports:
        - containerPort: 9001
          hostPort: 9001
        securityContext:
          privileged: true
          readOnlyRootFilesystem: false
          allowPrivilegeEscalation: true
          runAsUser: 0
          capabilities:
            add:
              - NET_ADMIN
        volumeMounts:
        - mountPath: /test-pd
          name: test-volume
          readOnly: true
      volumes:
      - name: test-volume
        hostPath:
          # directory location on host
          path: /tmp
---
apiVersion: v1
kind: Service
metadata:
  name: redis-unhealthy-service
spec:
  type: LoadBalancer
  selector:
    app: redis
  ports:
  - port: 6001
    targetPort: 9001

Étapes suivantes

Dans cet article, vous avez découvert comment configurer la sécurisation renforcée des plans de données Kubernetes.

Pour obtenir des informations connexes, consultez les pages suivantes :