Использование допуска для обеспечения безопасности pod в Службе Azure Kubernetes (AKS)

Допуск безопасности pod (PSA) использует метки для принудительного применения политик стандартов безопасности pod к модулям pod, работающим в пространстве имен. AKS включает допуск безопасности pod по умолчанию. Дополнительные сведения о допуске и стандартах безопасности pod см. в разделах Принудительное применение стандартов безопасности pod с помощью меток пространства имен и Стандартов безопасности pod.

Pod Security Admission — это встроенное решение политики для реализаций одного кластера. Если вы хотите использовать политику корпоративного уровня, мы рекомендуем использовать политику Azure.

Подготовка к работе

Включение приема для обеспечения безопасности pod для пространства имен в кластере

Включение PSA для одного пространства имен

  • Включите PSA для одного пространства имен в кластере kubectl label с помощью команды и задайте pod-security.kubernetes.io/enforce метку со значением политики, которое необходимо применить. В следующем примере включается restricted политика для пространства имен NAMESPACE .

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

Включение PSA для всех пространств имен

  • Включите PSA для всех пространств имен в кластере kubectl label с помощью команды и задайте pod-security.kubernetes.io/warn метку со значением политики, которое необходимо применить. В следующем примере включается baseline политика для всех пространств имен в кластере. Эта политика создает предупреждение для пользователя, если какие-либо модули pod развертываются в пространстве имен, которое не соответствует базовой политике.

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

Принудительное применение политики допуска безопасности pod с помощью развертывания

  1. Создайте два пространства имен с помощью kubectl create namespace команды .

    kubectl create namespace test-restricted
    kubectl create namespace test-privileged
    
  2. Включите политику PSA для каждого пространства имен, по одному с политикой restricted , а другую с политикой baseline с помощью 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
    

    Это позволяет настроить test-restricted пространства имен и test-privileged так, чтобы блокировать выполнение модулей pod и создавать предупреждение для пользователя, если какие-либо модули pod, которые не соответствуют настроенной политике, попытаются запуститься.

  3. Попытайтесь развернуть модули pod в test-restricted пространстве имен с помощью kubectl apply команды . Эта команда приводит к ошибке, test-restricted так как пространство имен настроено для блокировки модулей pod, которые не соответствуют политике 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
    

    В следующем примере выходных данных показано предупреждение о том, что модули pod нарушают настроенную политику:

    ...
    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. Убедитесь, что в test-restricted пространстве имен нет модулей pod, использующих kubectl get pods команду .

    kubectl get pods --namespace test-restricted
    

    В следующем примере выходных данных показано, что модули pod не выполняются test-restricted в пространстве имен:

    No resources found in test-restricted namespace.
    
  5. Попытайтесь развернуть модули pod в test-privileged пространстве имен с помощью kubectl apply команды . На этот раз модули pod должны успешно развернуться, так как test-privileged в пространстве имен настроено разрешение модулей pod, нарушающих 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
    

    В следующем примере выходных данных показаны успешно развернутые модули pod:

    deployment.apps/azure-vote-back created
    service/azure-vote-back created
    deployment.apps/azure-vote-front created
    service/azure-vote-front created
    
  6. Убедитесь, что в test-privileged пространстве имен запущены модули pod с помощью kubectl get pods команды .

    kubectl get pods --namespace test-privileged
    

    В следующем примере выходных данных показаны два модуля pod, выполняющихся 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. test-restricted Удалите пространства имен и test-privileged с помощью kubectl delete команды .

    kubectl delete namespace test-restricted test-privileged
    

Дальнейшие действия

Из этой статьи вы узнали, как включить прием для обеспечения безопасности pod в кластере AKS. Дополнительные сведения о приеме для обеспечения безопасности pod см. в разделе Применение стандартов безопасности pod с помощью меток пространства имен. Дополнительные сведения о стандартах безопасности pod, используемых при приеме для обеспечения безопасности pod, см. в разделе Стандарты безопасности pod.