Używanie dostępu zabezpieczeń zasobnika w usłudze Azure Kubernetes Service (AKS)
Pod Security Admission (PSA) używa etykiet do wymuszania zasad standardów zabezpieczeń zasobników działających w przestrzeni nazw. W usłudze AKS wstęp zabezpieczeń zasobnika jest domyślnie włączony. Aby uzyskać więcej informacji na temat standardów zabezpieczeń zasobników i zabezpieczeń zasobników, zobacz Wymuszanie standardów zabezpieczeń zasobnika z etykietami przestrzeni nazw i standardami zabezpieczeń zasobnika.
Przyjęcie zabezpieczeń zasobnika to wbudowane rozwiązanie zasad dla implementacji pojedynczego klastra. Jeśli chcesz użyć zasad klasy korporacyjnej, zalecamy użycie zasad platformy Azure.
Zanim rozpoczniesz
- Subskrypcja Azure. Jeśli nie masz subskrypcji Azure, możesz utworzyć bezpłatne konto Azure.
- Zainstalowany interfejs wiersza polecenia platformy Azure.
- Istniejący klaster usługi AKS z uruchomioną platformą Kubernetes w wersji 1.23 lub nowszej.
Włączanie przyjęcia zabezpieczeń zasobnika dla przestrzeni nazw w klastrze
Włączanie psa dla pojedynczej przestrzeni nazw
Włącz psa dla pojedynczej przestrzeni nazw w klastrze przy użyciu
kubectl label
polecenia i ustaw etykietępod-security.kubernetes.io/enforce
z wartością zasad, którą chcesz wymusić. Poniższy przykład umożliwiarestricted
zasady dla przestrzeni nazw PRZESTRZENI NAZW .kubectl label --overwrite ns NAMESPACE pod-security.kubernetes.io/enforce=restricted
Włącz psa dla wszystkich przestrzeni nazw
Włącz psa dla wszystkich przestrzeni nazw w klastrze przy użyciu
kubectl label
polecenia i ustaw etykietępod-security.kubernetes.io/warn
z wartością zasad, którą chcesz wymusić. Poniższy przykład umożliwiabaseline
zasady dla wszystkich przestrzeni nazw w klastrze. Te zasady generują ostrzeżenie dla użytkownika, jeśli jakiekolwiek zasobniki są wdrażane w przestrzeni nazw, która nie spełnia zasad punktu odniesienia .kubectl label --overwrite ns --all pod-security.kubernetes.io/warn=baseline
Wymuszanie zasad przyjęcia zabezpieczeń zasobnika przy użyciu wdrożenia
Utwórz dwie przestrzenie nazw przy użyciu
kubectl create namespace
polecenia .kubectl create namespace test-restricted kubectl create namespace test-privileged
Włącz zasady PSA dla każdej przestrzeni nazw, jedną z zasadami
restricted
i jedną zbaseline
zasadami przy użyciukubectl label
polecenia .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
Spowoduje to skonfigurowanie
test-restricted
przestrzeni nazw itest-privileged
w celu blokowania uruchomionych zasobników i generowania ostrzeżenia dla użytkownika, jeśli jakiekolwiek zasobniki, które nie spełniają skonfigurowanej próby uruchomienia zasad.Spróbuj wdrożyć zasobniki w
test-restricted
przestrzeni nazw przy użyciukubectl apply
polecenia . To polecenie powoduje błąd, ponieważtest-restricted
przestrzeń nazw jest skonfigurowana do blokowania zasobników, które nie spełniająrestricted
zasad.kubectl apply --namespace test-restricted -f https://raw.githubusercontent.com/Azure-Samples/azure-voting-app-redis/master/azure-vote-all-in-one-redis.yaml
Następujące przykładowe dane wyjściowe zawierają ostrzeżenie informujące, że zasobniki naruszają skonfigurowane zasady:
... 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
Upewnij się, że w przestrzeni nazw nie są uruchomione
test-restricted
zasobniki przy użyciukubectl get pods
polecenia .kubectl get pods --namespace test-restricted
Następujące przykładowe dane wyjściowe nie zawierają zasobników uruchomionych w
test-restricted
przestrzeni nazw:No resources found in test-restricted namespace.
Spróbuj wdrożyć zasobniki w
test-privileged
przestrzeni nazw przy użyciukubectl apply
polecenia . Tym razem zasobniki powinny zostać pomyślnie wdrożone, ponieważtest-privileged
przestrzeń nazw jest skonfigurowana tak, aby zezwalała na zasobniki naruszająceprivileged
zasady.kubectl apply --namespace test-privileged -f https://raw.githubusercontent.com/Azure-Samples/azure-voting-app-redis/master/azure-vote-all-in-one-redis.yaml
Następujące przykładowe dane wyjściowe pokazują, że zasobniki zostały pomyślnie wdrożone:
deployment.apps/azure-vote-back created service/azure-vote-back created deployment.apps/azure-vote-front created service/azure-vote-front created
Upewnij się, że zasobniki są uruchomione w
test-privileged
przestrzeni nazw przy użyciukubectl get pods
polecenia .kubectl get pods --namespace test-privileged
Następujące przykładowe dane wyjściowe przedstawiają dwa zasobniki uruchomione w
test-privileged
przestrzeni nazw: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
Usuń przestrzenie nazw itest-privileged
przy użyciukubectl delete
polecenia .kubectl delete namespace test-restricted test-privileged
Następne kroki
W tym artykule przedstawiono sposób włączania dostępu zabezpieczeń zasobnika do klastra usługi AKS. Aby uzyskać więcej informacji na temat wpływu na zabezpieczenia zasobnika, zobacz Wymuszanie standardów zabezpieczeń zasobnika przy użyciu etykiet przestrzeni nazw. Aby uzyskać więcej informacji na temat standardów zabezpieczeń zasobników używanych przez przyznanie zabezpieczeń zasobnika, zobacz Pod Security Standards (Standardy zabezpieczeń zasobnika).
Azure Kubernetes Service