Udostępnij przez


Używanie dostępu zabezpieczeń zasobnika w usłudze Azure Kubernetes Service (AKS)

Pod Security Admission (PSA) używa etykiet do egzekwowania polityk standardów zabezpieczeń dla podów działających w przestrzeni nazw. W usłudze AKS kontrola bezpieczeństwa podów jest domyślnie włączona. Aby uzyskać więcej informacji na temat Pod Security Admission i standardów zabezpieczeń zasobników, zobacz Wymuszanie standardów zabezpieczeń zasobnika za pomocą etykiet przestrzeni nazw i Standardy zabezpieczeń zasobnika.

Pod Security Admission to wbudowane rozwiązanie zasad dla implementacji klastra pojedynczego. Jeśli chcesz użyć zasad klasy korporacyjnej, zalecamy użycie zasad platformy Azure.

Zanim rozpoczniesz

Włącz Admisję Bezpieczeństwa Podów dla przestrzeni nazw w twoim klastrze.

Włącz PSA dla pojedynczej przestrzeni nazw

  • Włącz PSA dla pojedynczej przestrzeni nazw w klastrze przy użyciu polecenia kubectl label i ustaw etykietę pod-security.kubernetes.io/enforce z wartością zasad, którą chcesz wymusić. Poniższy przykład umożliwia restricted zasadę dla przestrzeni nazw NAMESPACE.

    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, używając polecenia kubectl label i ustaw etykietę pod-security.kubernetes.io/warn z wartością polityki, którą chcesz wymusić. Poniższy przykład włącza zasadę baseline 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
    

Egzekwowanie polityki przyjmowania bezpieczeństwa zasobnika przy użyciu wdrożenia

  1. Utwórz dwie przestrzenie nazw przy użyciu kubectl create namespace polecenia .

    kubectl create namespace test-restricted
    kubectl create namespace test-privileged
    
  2. Włącz zasady PSA dla każdej przestrzeni nazw, jedną z zasadą restricted i jedną z zasadą baseline, przy użyciu polecenia 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
    

    To konfiguruje przestrzenie nazw test-restricted i test-privileged do blokowania uruchamiania zasobników i generowania ostrzeżenia dla użytkownika, jeśli jakiekolwiek zasobniki, które nie spełniają skonfigurowanej polityki, próbują się uruchomić.

  3. Spróbuj wdrożyć pody w test-restricted przestrzeni nazw przy użyciu polecenia kubectl apply. 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 pody 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
    
  4. Upewnij się, że w przestrzeni nazw test-restricted nie są uruchomione zasobniki przy użyciu polecenia kubectl get pods.

    kubectl get pods --namespace test-restricted
    

    Następujące przykładowe dane wyjściowe pokazują, że nie ma uruchomionych podów w przestrzeni nazw test-restricted.

    No resources found in test-restricted namespace.
    
  5. Spróbuj wdrożyć zasobniki w przestrzeni nazw test-privileged za pomocą polecenia kubectl apply. Tym razem zasobniki powinny zostać pomyślnie uruchomione, ponieważ test-privileged przestrzeń nazw jest skonfigurowana tak, aby zezwalała na zasobniki naruszające privileged politykę.

    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
    
  6. Upewnij się, że zasobniki są uruchomione w test-privileged przestrzeni nazw przy użyciu kubectl get pods polecenia .

    kubectl get pods --namespace test-privileged
    

    Poniżej znajduje się przykładowe dane wyjściowe przedstawiające dwa działające zasobniki w przestrzeni nazw 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. Usuń przestrzenie nazw test-restricted i test-privileged używając polecenia kubectl delete.

    kubectl delete namespace test-restricted test-privileged
    

Następne kroki

W tym artykule dowiesz się, jak włączyć przyznawanie zabezpieczeń zasobnika w klastrze usługi AKS. Więcej informacji na temat Pod Security Admission można znaleźć w Wymuszanie standardów zabezpieczeń zasobników z etykietami przestrzeni nazw. Aby uzyskać więcej informacji na temat Standardów bezpieczeństwa Pod używanych przez zezwolenie bezpieczeństwa Pod, odwiedź Pod Security Standards.