Udostępnij za pośrednictwem


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

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żliwia restricted 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ż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 przyjęcia 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 zasadami restricted 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 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
    
  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 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
    

    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 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).