Использование допуска для обеспечения безопасности pod в Службе Azure Kubernetes (AKS)
Допуск безопасности pod (PSA) использует метки для принудительного применения политик стандартов безопасности pod к модулям pod, работающим в пространстве имен. AKS включает допуск безопасности pod по умолчанию. Дополнительные сведения о допуске и стандартах безопасности pod см. в разделах Принудительное применение стандартов безопасности pod с помощью меток пространства имен и Стандартов безопасности pod.
Pod Security Admission — это встроенное решение политики для реализаций одного кластера. Если вы хотите использовать политику корпоративного уровня, мы рекомендуем использовать политику Azure.
Подготовка к работе
- Подписка Azure. Если у вас нет подписки Azure, создайте бесплатную учетную запись.
- Установленный Azure CLI.
- Существующий кластер AKS с Kubernetes версии 1.23 или более поздней.
Включение приема для обеспечения безопасности 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 с помощью развертывания
Создайте два пространства имен с помощью
kubectl create namespace
команды .kubectl create namespace test-restricted kubectl create namespace test-privileged
Включите политику 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, которые не соответствуют настроенной политике, попытаются запуститься.Попытайтесь развернуть модули 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
Убедитесь, что в
test-restricted
пространстве имен нет модулей pod, использующихkubectl get pods
команду .kubectl get pods --namespace test-restricted
В следующем примере выходных данных показано, что модули pod не выполняются
test-restricted
в пространстве имен:No resources found in test-restricted namespace.
Попытайтесь развернуть модули 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
Убедитесь, что в
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
test-restricted
Удалите пространства имен иtest-privileged
с помощьюkubectl delete
команды .kubectl delete namespace test-restricted test-privileged
Дальнейшие действия
Из этой статьи вы узнали, как включить прием для обеспечения безопасности pod в кластере AKS. Дополнительные сведения о приеме для обеспечения безопасности pod см. в разделе Применение стандартов безопасности pod с помощью меток пространства имен. Дополнительные сведения о стандартах безопасности pod, используемых при приеме для обеспечения безопасности pod, см. в разделе Стандарты безопасности pod.