Utiliser Pod Security Admission dans Azure Kubernetes Service (AKS)

Pod Security Admission (PSA) utilise des libellés pour appliquer les politiques Pod Security Standards aux pods s’exécutant dans un espace de noms. Dans AKS, Pod Security Admission est activé par défaut. 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.

Pod Security Admission est une solution intégrée de gestion des stratégies pour les déploiements sur un seul cluster. 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 installé.
  • 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 PSA pour un seul espace de noms

  • Activez PSA pour un seul espace de noms dans votre cluster à l’aide de la commande kubectl label, puis définissez l’étiquette pod-security.kubernetes.io/enforce avec la valeur de politique 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 PSA pour tous les namespaces

  • 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 Pod Security Admission à l’aide d’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 PSA pour chaque espace de noms, l’un avec la stratégie restricted et l’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 violent 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 que des pods sont 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 Pod Security Admission sur un cluster AKS. Pour plus d’informations sur Pod Security Admission, consultez Faire appliquer les normes de sécurité des pods avec des labels d’espace de noms. Pour plus d’informations sur les normes de sécurité des pods utilisées par Pod Security Admission, consultez Normes de sécurité des pods.