Utiliser l’admission de sécurité des pods dans Azure Kubernetes Service (AKS)

L’admission de la sécurité des pods utilise des étiquettes pour appliquer des stratégies de normes de sécurité des pods sur les pods s’exécutant dans un espace de noms. L’admission de la sécurité des pods est activée par défaut dans AKS. Pour plus d’informations sur l’admission de la sécurité des pods et les normes de sécurité des pods, consultez Appliquer des normes de sécurité de pod avec des étiquettes d’espace de noms et Normes de sécurité des pods.

L’admission de la sécurité des pods est une solution de stratégie intégrée pour les implémentations de cluster uniques. Si vous souhaitez utiliser une stratégie de niveau entreprise, nous vous recommandons d’utiliser une stratégie Azure.

Avant de commencer

  • Un abonnement Azure. Si vous n’avez pas d’abonnement Azure, vous pouvez créer un compte gratuit.
  • Azure CLI.
  • Un cluster AKS existant exécutant Kubernetes version 1.23 ou ultérieure.

Activer l’admission de la sécurité des pods pour un espace de noms dans votre cluster

Activer l’admission de la sécurité des pods pour un espace de noms unique

  • Activez l’admission de la sécurité des pods pour un espace de noms unique dans votre cluster à l’aide de la commande kubectl label, puis définissez l’étiquette pod-security.kubernetes.io/enforce avec la valeur de stratégie que vous souhaitez appliquer. L’exemple suivant active la stratégie restricted pour l’espace de noms NAMESPACE.

    kubectl label --overwrite ns NAMESPACE pod-security.kubernetes.io/enforce=restricted
    

Activer l’admission de la sécurité des pods pour tous les espaces de noms

  • Activez l’admission de la sécurité des pods pour tous les espaces de noms dans votre cluster à l’aide de la commande kubectl label, puis définissez l’étiquette pod-security.kubernetes.io/warn avec la valeur de stratégie que vous souhaitez appliquer. L’exemple suivant active la stratégie baseline pour tous les espaces de noms de votre cluster. Cette stratégie génère un avertissement visible par l’utilisateur si des pods sont déployés dans un espace de noms qui ne répond pas à la stratégie de base.

    kubectl label --overwrite ns --all pod-security.kubernetes.io/warn=baseline
    

Appliquer une stratégie d’admission de la sécurité des pods avec un déploiement

  1. Créez deux espaces de noms à l’aide de la commande kubectl create namespace.

    kubectl create namespace test-restricted
    kubectl create namespace test-privileged
    
  2. Activez une stratégie d’admission de la sécurité des pods pour chaque espace de noms, une avec la stratégie restricted et une autre avec la stratégie baseline, à l’aide de la commande kubectl label.

    kubectl label --overwrite ns test-restricted pod-security.kubernetes.io/enforce=restricted pod-security.kubernetes.io/warn=restricted
    kubectl label --overwrite ns test-privileged pod-security.kubernetes.io/enforce=privileged pod-security.kubernetes.io/warn=privileged
    

    Cela configure les espaces de noms test-restricted et test-privileged pour bloquer les pods en cours d’exécution et générer un avertissement à l’utilisateur si des pods qui ne répondent pas à la stratégie configurée tentent de s’exécuter.

  3. Tentez de déployer des pods dans l’espace de noms test-restricted à l’aide de la commande kubectl apply. Cette commande génère une erreur, car l’espace de noms test-restricted est configuré pour bloquer les pods qui ne répondent pas à la stratégie restricted.

    kubectl apply --namespace test-restricted -f https://raw.githubusercontent.com/Azure-Samples/azure-voting-app-redis/master/azure-vote-all-in-one-redis.yaml
    

    L’exemple de sortie suivant montre un avertissement indiquant que les pods enfreignent la stratégie configurée :

    ...
    Warning: would violate PodSecurity "restricted:latest": allowPrivilegeEscalation != false (container "azure-vote-back" must set securityContext.allowPrivilegeEscalation=false), unrestricted capabilities (container "azure-vote-back" must set securityContext.capabilities.drop=["ALL"]), runAsNonRoot != true (pod or container "azure-vote-back" must set securityContext.runAsNonRoot=true), seccompProfile (pod or container "azure-vote-back" must set securityContext.seccompProfile.type to "RuntimeDefault" or "Localhost")
    deployment.apps/azure-vote-back created
    service/azure-vote-back created
    Warning: would violate PodSecurity "restricted:latest": allowPrivilegeEscalation != false (container "azure-vote-front" must set securityContext.allowPrivilegeEscalation=false), unrestricted capabilities (container "azure-vote-front" must set securityContext.capabilities.drop=["ALL"]), runAsNonRoot != true (pod or container "azure-vote-front" must set securityContext.runAsNonRoot=true), seccompProfile (pod or container "azure-vote-front" must set securityContext.seccompProfile.type to "RuntimeDefault" or "Localhost")
    deployment.apps/azure-vote-front created
    service/azure-vote-front created
    
  4. Vérifiez qu’aucun pod n’est en cours d’exécution dans l’espace de noms test-restricted à l’aide de la commande kubectl get pods.

    kubectl get pods --namespace test-restricted
    

    L’exemple de sortie suivant ne montre aucun pod en cours d’exécution dans l’espace de noms test-restricted :

    No resources found in test-restricted namespace.
    
  5. Tentez de déployer des pods dans l’espace de noms test-privileged à l’aide de la commande kubectl apply. Cette fois, les pods doivent être déployés correctement, car l’espace de noms test-privileged est configuré pour autoriser les pods qui enfreignent la stratégie privileged.

    kubectl apply --namespace test-privileged -f https://raw.githubusercontent.com/Azure-Samples/azure-voting-app-redis/master/azure-vote-all-in-one-redis.yaml
    

    L’exemple de sortie suivant montre les pods déployés avec succès :

    deployment.apps/azure-vote-back created
    service/azure-vote-back created
    deployment.apps/azure-vote-front created
    service/azure-vote-front created
    
  6. Vérifiez qu’aucun pod n’est en cours d’exécution dans l’espace de noms test-privileged à l’aide de la commande kubectl get pods.

    kubectl get pods --namespace test-privileged
    

    L’exemple de sortie suivant montre deux pods en cours d’exécution dans l’espace de noms test-privileged :

    NAME                               READY   STATUS    RESTARTS   AGE
    azure-vote-back-6fcdc5cbd5-svbdf   1/1     Running   0          2m29s
    azure-vote-front-5f4b8d498-tqzwv   1/1     Running   0          2m28s
    
  7. Supprimez les espaces de noms test-restricted et test-privileged à l’aide de la commande kubectl delete.

    kubectl delete namespace test-restricted test-privileged
    

Étapes suivantes

Dans cet article, vous avez appris à activer l’admission de la sécurité des pods sur un cluster AKS. Pour plus d’informations sur l’admission de la sécurité des pods, consultez Appliquer des normes de sécurité de pod avec des étiquettes d’espace de noms. Pour plus d’informations sur les normes de sécurité des pods utilisées par l’admission de la sécurité des pods, consultez Normes de sécurité des pods.