Share via


AKS(Azure Kubernetes Service)에서 Pod 보안 정책 사용

Pod 보안 허용(PSA)은 네임스페이스에서 실행되는 Pod에 Pod 보안 표준 정책을 적용합니다. AKS를 사용하면 Pod 보안 허용이 기본적으로 사용하도록 설정됩니다. Pod 보안 허용 및 Pod 보안 표준에 대한 자세한 내용은 네임스페이스 레이블 및 Pod 보안 표준을 사용하여 Pod 보안 표준 적용을 참조하세요.

Pod 보안 승인은 단일 클러스터 구현을 위한 기본 제공 정책 솔루션입니다. 엔터프라이즈급 정책을 사용하려면 Azure 정책을 사용하는 것이 좋습니다.

시작하기 전에

  • Azure 구독 Azure 구독이 없는 경우 무료 계정을 만들 수 있습니다.
  • Azure CLI 설치
  • Kubernetes 버전 1.23 이상을 실행하는 기존 AKS 클러스터

클러스터의 네임스페이스에 Pod 보안 허용을 사용하도록 설정

단일 네임스페이스에 PSA 사용

  • 클러스터의 네임스페이스에 대해 PSA를 사용하도록 설정하려면 kubectl label적용하려는 정책 값으로 pod-security.kubernetes.io/enforce 레이블을 설정합니다. 다음 예제에서는 restrictedNAMESPACE 네임스페이스에 대한 정책을 사용하도록 설정합니다.

    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 보안 허용 정책을 적용

  1. kubectl create namespace 명령을 사용하여 두 개의 네임스페이스를 만듭니다.

    kubectl create namespace test-restricted
    kubectl create namespace test-privileged
    
  2. kubectl label 명령을 사용하여 하나는 restricted 정책, 다른 하나는 baseline 정책을 가지고 각 네임스페이스에 대해 PSA 정책을 사용하도록 합니다.

    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
    

    구성된 정책을 충족하지 않는 Pod가 실행하려고 하면 test-restrictedtest-privileged 네임스페이스 모두 실행 중인 Pod를 차단하고 사용자 관련 경고를 생성합니다.

  3. kubectl apply 명령을 사용하여 test-restricted 네임스페이스에 Pod를 배포하려고 시도합니다. 이 명령은 test-restricted 네임스페이스가 restricted 정책을 충족 하지 않는 Pod를 차단하도록 구성되었기 때문에 오류가 발생합니다.

    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
    
  4. test-restricted 네임스페이스에서 kubectl get pods명령을 사용하여 실행 중인 Pod가 없는지 확인합니다.

    kubectl get pods --namespace test-restricted
    

    다음 출력 예는 test-restricted 네임스페이스에서 실행되는 Pod가 없음을 보여 줍니다.

    No resources found in test-restricted namespace.
    
  5. kubectl apply 명령을 사용하여 test-privileged 네임스페이스에 Pod를 배포하려고 시도합니다. 이번에는 test-privileged 네임스페이스가privileged 정책을 위반 하는 Pod를 허용하도록 구성되었으므로 Pod가 성공적으로 배포되어야 합니다.

    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
    
  6. test-privileged 네임스페이스에서 kubectl get pods명령을 사용하여 실행 중인 Pod가 있는지 확인합니다.

    kubectl get pods --namespace test-privileged
    

    다음 출력 예는 test-privileged 네임스페이스에서 Pod 2개가 실행되고 있음을 보여 줍니다.

    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. kubectl delete 명령을 사용하여 test-restrictedtest-privileged 네임스페이스를 제거합니다.

    kubectl delete namespace test-restricted test-privileged
    

다음 단계

이 문서에서는 AKS 클러스터에서 Pod 보안 허용을 사용하도록 설정하는 방법을 알아보았습니다. Pod 보안 허용에 대한 자세한 내용은 네임스페이스 레이블을 사용하여 Pod 보안 표준 적용을 참조하세요. Pod 보안 허용에서 사용하는 Pod 보안 표준에 대한 자세한 내용은 Pod 보안 표준을 참조하세요.