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

Dostęp do zabezpieczeń zasobnika (PSA) używa etykiet do wymuszania zasad standardów zabezpieczeń zasobników działających w przestrzeni nazw. Usługa AKS włącza dostęp do zabezpieczeń zasobnika jest domyślnie włączona. Aby uzyskać więcej informacji na temat standardów zabezpieczeń zasobników i zabezpieczeń zasobników, zobacz Wymuszanie standardów zabezpieczeń zasobników z etykietami przestrzeni nazw i standardami zabezpieczeń zasobnika.

Wstęp 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

Włączanie 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żliwia restricted zasady dla przestrzeni nazw PRZESTRZENI NAZW .

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

Włączanie psa dla wszystkich przestrzeni nazw

  • Włącz opcję 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żliwia baseline 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 przyjmowania zabezpieczeń 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 restricted zasadami i jedną z baseline zasadami przy użyciu kubectl 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 i test-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.

  3. Spróbuj wdrożyć zasobniki w test-restricted przestrzeni nazw przy użyciu kubectl 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 pokazują 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
    
  4. Upewnij się, że w przestrzeni nazw nie są uruchomione test-restricted zasobniki przy użyciu kubectl 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.
    
  5. Spróbuj wdrożyć zasobniki w test-privileged przestrzeni nazw przy użyciu kubectl 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ące privileged 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 wdrożone pomyślnie:

    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 masz zasobniki uruchomione w test-privileged przestrzeni nazw przy użyciu kubectl 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
    
  7. test-restricted Usuń przestrzenie nazw i test-privileged przy użyciu kubectl 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 przyjmowania zabezpieczeń zasobnika, zobacz Wymuszanie standardów zabezpieczeń zasobnika z etykietami przestrzeni nazw. Aby uzyskać więcej informacji na temat standardów zabezpieczeń zasobników używanych przez dostęp do zabezpieczeń zasobnika, zobacz Pod Security Standards (Standardy zabezpieczeń zasobników).