포드 보안 표준 기준 정책 제약조건 사용

정책 컨트롤러는 포드 보안 표준 기준 번들과 함께 사용할 수 있는 제약조건 템플릿의 기본 라이브러리와 함께 제공됩니다. 정책을 시행하기 전에 테스트하고 특정 리소스의 범위를 제외하는 기능과 함께 이 번들을 사용하면 Kubernetes 포드 보안 표준(PSS) 기준 정책과 동일한 여러 보호 기능을 사용할 수 있습니다.

이 페이지는 감사 또는 시행 자동화를 제공하고 유지하여 클라우드 플랫폼 내에서 실행되는 모든 리소스가 조직의 규정 준수 요구사항을 충족하도록 보장하려는 IT 관리자와 운영자를 위해 작성되었습니다. Google Cloud 콘텐츠에서 참조하는 일반적인 역할과 예시 태스크에 대한 자세한 내용은 일반 GKE Enterprise 사용자 역할 및 태스크를 참조하세요.

포드 보안 표준 기준 정책 번들 제약조건

제약조건 이름 제약조건 설명 제어 이름
pss-baseline-v2022-hostprocess Windows HostProcess 사용 HostProcess
pss-baseline-v2022-host-namespaces-hostnetwork 호스트 네트워킹 사용 호스트 네임스페이스
pss-baseline-v2022-host-namespaces-host-pid-ipc 호스트 네임스페이스 사용
pss-baseline-v2022-privileged-containers 권한이 있는 컨테이너 실행 권한이 있는 컨테이너
pss-baseline-v2022-capabilities Linux 기능 기능
pss-baseline-v2022-hostpath-volumes 호스트 파일 시스템 사용 HostPath 볼륨
pss-baseline-v2022-host-ports 호스트 포트 사용 호스트 포트(구성 가능)
pss-baseline-v2022-apparmor 컨테이너에 사용되는 AppArmor 프로필 AppArmor
pss-baseline-v2022-selinux 컨테이너의 SELinux 컨텍스트 SELinux
pss-baseline-v2022-proc-mount-type 컨테이너의 Allowed Proc Mount 유형 /proc 마운트 유형
pss-baseline-v2022-seccomp 컨테이너에 사용되는 seccomp 프로필 Seccomp
pss-baseline-v2022-sysctls 컨테이너에 사용되는 sysctl 프로필 Sysctls

시작하기 전에

  1. 이 안내에서 사용되는 gcloudkubectl 명령어를 제공하는 Google Cloud CLI를 설치하고 초기화합니다. Cloud Shell을 사용하는 경우 Google Cloud CLI가 사전 설치됩니다.
  2. 기본 제약조건 템플릿 라이브러리를 사용하여 클러스터에 v.1.14.1 이상의 정책 컨트롤러를 설치합니다.

포드 보안 표준 기준 정책 번들 감사

정책 컨트롤러를 사용하면 Kubernetes 클러스터에 정책을 적용할 수 있습니다. 앞의 테이블에서 설명된 Google 권장사항과 관련하여 워크로드 및 규정 준수를 테스트하는 데 도움이 되도록, '감사' 모드에서 이러한 제약조건을 배포하여 위반 사항을 표시할 수 있고 더 중요하게는 Kubernetes 클러스터에 적용하기 전에 문제를 해결할 기회를 가질 수 있습니다.

kubectl, kpt 또는 구성 동기화를 사용하여 dryrun으로 설정된 spec.enforcementAction으로 이러한 정책을 적용할 수 있습니다.

kubectl

  1. (선택사항) kubectl을 사용하여 정책 제약조건을 미리 봅니다.

    kubectl kustomize https://github.com/GoogleCloudPlatform/gke-policy-library.git/bundles/pss-baseline-v2022
    
  2. kubectl을 사용하여 정책 제약조건을 적용합니다.

    kubectl apply -k https://github.com/GoogleCloudPlatform/gke-policy-library.git/bundles/pss-baseline-v2022
    

    출력은 다음과 같습니다.

    k8spspapparmor.constraints.gatekeeper.sh/pss-baseline-v2022-apparmor created
    k8spspcapabilities.constraints.gatekeeper.sh/pss-baseline-v2022-capabilities created
    k8spsphostfilesystem.constraints.gatekeeper.sh/pss-baseline-v2022-hostpath-volumes created
    k8spsphostnamespace.constraints.gatekeeper.sh/pss-baseline-v2022-host-namespaces-host-pid-ipc created
    k8spsphostnetworkingports.constraints.gatekeeper.sh/pss-baseline-v2022-host-namespaces-hostnetwork created
    k8spsphostnetworkingports.constraints.gatekeeper.sh/pss-baseline-v2022-host-ports created
    k8spspprivilegedcontainer.constraints.gatekeeper.sh/pss-baseline-v2022-privileged-containers created
    k8spspprocmount.constraints.gatekeeper.sh/pss-baseline-v2022-proc-mount-type created
    k8spspselinuxv2.constraints.gatekeeper.sh/pss-baseline-v2022-selinux created
    k8spspseccomp.constraints.gatekeeper.sh/pss-baseline-v2022-seccomp created
    k8spspforbiddensysctls.constraints.gatekeeper.sh/pss-baseline-v2022-sysctls created
    
  3. 정책 제약조건이 설치되었는지 확인하고 클러스터 전체에 위반 사항이 있는지 확인합니다.

    kubectl get -k https://github.com/GoogleCloudPlatform/gke-policy-library.git/bundles/pss-baseline-v2022
    

    출력은 다음과 비슷합니다.

    NAME                                                                   ENFORCEMENT-ACTION   TOTAL-VIOLATIONS
    k8spspapparmor.constraints.gatekeeper.sh/pss-baseline-v2022-apparmor                        0
    
    NAME                                                                           ENFORCEMENT-ACTION   TOTAL-VIOLATIONS
    k8spspcapabilities.constraints.gatekeeper.sh/pss-baseline-v2022-capabilities   dryrun               0
    
    NAME                                                                                 ENFORCEMENT-ACTION   TOTAL-VIOLATIONS
    k8spsphostfilesystem.constraints.gatekeeper.sh/pss-baseline-v2022-hostpath-volumes                        0
    
    NAME                                                                                            ENFORCEMENT-ACTION   TOTAL-VIOLATIONS
    k8spsphostnamespace.constraints.gatekeeper.sh/pss-baseline-v2022-host-namespaces-host-pid-ipc   dryrun               0
    
    NAME                                                                                                 ENFORCEMENT-ACTION   TOTAL-VIOLATIONS
    k8spsphostnetworkingports.constraints.gatekeeper.sh/pss-baseline-v2022-host-namespaces-hostnetwork   dryrun               0
    k8spsphostnetworkingports.constraints.gatekeeper.sh/pss-baseline-v2022-host-ports                    dryrun               0
    
    NAME                                                                                           ENFORCEMENT-ACTION   TOTAL-VIOLATIONS
    k8spspprivilegedcontainer.constraints.gatekeeper.sh/pss-baseline-v2022-privileged-containers   dryrun               0
    
    NAME                                                                           ENFORCEMENT-ACTION   TOTAL-VIOLATIONS
    k8spspprocmount.constraints.gatekeeper.sh/pss-baseline-v2022-proc-mount-type                        0
    
    NAME                                                                   ENFORCEMENT-ACTION   TOTAL-VIOLATIONS
    k8spspselinuxv2.constraints.gatekeeper.sh/pss-baseline-v2022-selinux                        0
    
    NAME                                                                 ENFORCEMENT-ACTION   TOTAL-VIOLATIONS
    k8spspseccomp.constraints.gatekeeper.sh/pss-baseline-v2022-seccomp   dryrun               0
    
    NAME                                                                          ENFORCEMENT-ACTION   TOTAL-VIOLATIONS
    k8spspforbiddensysctls.constraints.gatekeeper.sh/pss-baseline-v2022-sysctls   dryrun               0
    
  4. (선택사항) 클러스터 환경에 제한되고 알려진 최소 포트 목록을 포함하도록 pss-baseline-v2022-host-ports 제약조건을 조정합니다.

    parameters:
      # A minimum restricted known list can be implemented here.
      min: 0
      max: 0
    

kpt

  1. kpt를 설치하고 설정합니다. 이 안내에서는 kpt를 사용하여 Kubernetes 리소스를 맞춤설정하고 배포합니다.

  2. kpt를 사용하여 GitHub에서 포드 보안 표준(PSS) 기준 v2022 정책 번들을 다운로드합니다.

    kpt pkg get https://github.com/GoogleCloudPlatform/gke-policy-library.git/bundles/pss-baseline-v2022
    
  3. set-enforcement-action kpt 함수를 실행하여 정책의 시정 조치를 dryrun으로 설정합니다.

    kpt fn eval pss-baseline-v2022 -i gcr.io/kpt-fn/set-enforcement-action:v0.1 \
      -- enforcementAction=dryrun
    
  4. 변경사항을 추적하는 리소스를 만드는 kpt로 작업 디렉터리를 초기화합니다.

    cd pss-baseline-v2022
    kpt live init
    
  5. (선택사항) 클러스터 환경에 제한되고 알려진 최소 포트 목록을 포함하도록 pss-baseline-v2022-host-ports 제약조건 파일을 조정합니다.

    parameters:
      # A minimum restricted known list can be implemented here.
      min: 0
      max: 0
    
  6. kpt로 정책 제약조건을 적용합니다.

    kpt live apply
    
  7. 정책 제약조건이 설치되었는지 확인하고 클러스터 전체에 위반 사항이 있는지 확인합니다.

    kpt live status --output table --poll-until current
    

    CURRENT 상태는 제약조건이 성공적으로 설치되었음을 확인합니다.

구성 동기화

  1. kpt를 설치하고 설정합니다. 이 안내에서는 kpt를 사용하여 Kubernetes 리소스를 맞춤설정하고 배포합니다.

구성 동기화를 사용하여 클러스터에 정책을 배포하는 운영자는 다음 안내를 따르세요.

  1. 구성 동기화의 동기화 디렉터리로 변경합니다.

    cd SYNC_ROOT_DIR
    

    resourcegroup.yaml.gitignore를 만들거나 추가하려면 다음 안내를 따르세요.

    echo resourcegroup.yaml >> .gitignore
    

  2. 전용 policies 디렉터리를 만듭니다.

    mkdir -p policies
    
  3. kpt를 사용하여 GitHub에서 포드 보안 표준(PSS) 기준 v2022 정책 번들을 다운로드합니다.

    kpt pkg get https://github.com/GoogleCloudPlatform/gke-policy-library.git/bundles/pss-baseline-v2022 policies/pss-baseline-v2022
    
  4. set-enforcement-action kpt 함수를 실행하여 정책의 시정 조치를 dryrun으로 설정합니다.

    kpt fn eval policies/pss-baseline-v2022 -i gcr.io/kpt-fn/set-enforcement-action:v0.1 -- enforcementAction=dryrun
    
  5. (선택사항) 클러스터 환경에 제한되고 알려진 최소 포트 목록을 포함하도록 pss-baseline-v2022-host-ports 제약조건 파일을 조정합니다.

    parameters:
      # A minimum restricted known list can be implemented here.
      min: 0
      max: 0
    
  6. (선택사항) 생성될 정책 제약조건을 미리 봅니다.

    kpt live init policies/pss-baseline-v2022
    kpt live apply --dry-run policies/pss-baseline-v2022
    

    출력은 다음과 같습니다.

    Dry-run strategy: client
    inventory update started
    inventory update finished
    apply phase started
    k8spspapparmor.constraints.gatekeeper.sh/pss-baseline-v2022-apparmor apply successful
    k8spspcapabilities.constraints.gatekeeper.sh/pss-baseline-v2022-capabilities apply successful
    k8spsphostfilesystem.constraints.gatekeeper.sh/pss-baseline-v2022-hostpath-volumes apply successful
    k8spsphostnamespace.constraints.gatekeeper.sh/pss-baseline-v2022-host-namespaces-host-pid-ipc apply successful
    k8spsphostnetworkingports.constraints.gatekeeper.sh/pss-baseline-v2022-host-namespaces-hostnetwork apply successful
    k8spsphostnetworkingports.constraints.gatekeeper.sh/pss-baseline-v2022-host-ports apply successful
    k8spspprivilegedcontainer.constraints.gatekeeper.sh/pss-baseline-v2022-privileged-containers apply successful
    k8spspprocmount.constraints.gatekeeper.sh/pss-baseline-v2022-proc-mount-type apply successful
    k8spspselinuxv2.constraints.gatekeeper.sh/pss-baseline-v2022-selinux apply successful
    k8spspseccomp.constraints.gatekeeper.sh/pss-baseline-v2022-seccomp apply successful
    apply phase finished
    inventory update started
    inventory update finished
    apply result: 10 attempted, 10 successful, 0 skipped, 0 failed
    
  7. 구성 동기화의 동기화 디렉터리에 Kustomize가 사용되는 경우 루트 kustomization.yamlpolicies/pss-baseline-v2022를 추가합니다. 그렇지 않으면 policies/pss-baseline-v2022/kustomization.yaml 파일을 삭제합니다.

    rm SYNC_ROOT_DIR/policies/pss-baseline-v2022/kustomization.yaml
    
  8. 구성 동기화 저장소에 변경사항을 푸시합니다.

    git add SYNC_ROOT_DIR/pss-baseline-v2022
    git commit -m 'Adding Pod Security Standards Baseline audit enforcement'
    git push
    
  9. 설치 상태를 확인합니다.

    watch gcloud beta container fleet config-management status --project PROJECT_ID
    

    SYNCED 상태는 정책 설치를 확인합니다.

정책 위반 보기

정책 제약조건이 감사 모드로 설치되면 정책 컨트롤러 대시보드를 사용하여 UI에서 클러스터의 위반 사항을 볼 수 있습니다.

또한 kubectl을 사용하여 다음 명령어를 사용하여 클러스터에서 위반 사항을 볼 수 있습니다.

kubectl get constraint -l policycontroller.gke.io/bundleName=pss-baseline-v2022 -o json | jq -cC '.items[]| [.metadata.name,.status.totalViolations]'

위반 사항이 있는 경우 제약조건당 위반 메시지 목록을 다음에서 볼 수 있습니다.

kubectl get constraint -l policycontroller.gke.io/bundleName=pss-baseline-v2022 -o json | jq -C '.items[]| select(.status.totalViolations>0)| [.metadata.name,.status.violations[]?]'

포드 보안 표준 기준 정책 번들 시행 작업 변경

클러스터에서 정책 위반을 검토한 후에는 허용 컨트롤러가 호환되지 않는 리소스가 클러스터에 적용되지 않도록 warn 또는 deny를 수행할 수 있도록 시행 모드 변경을 고려할 수 있습니다.

kubectl

  1. kubectl을 사용하여 정책의 시행 작업을 warn로 설정합니다.

    kubectl get constraint -l policycontroller.gke.io/bundleName=pss-baseline-v2022 -o name | xargs -I {} kubectl patch {} --type='json' -p='[{"op":"replace","path":"/spec/enforcementAction","value":"warn"}]'
    
  2. 정책 제약조건 시행 작업이 업데이트되었는지 확인합니다.

    kubectl get constraint -l policycontroller.gke.io/bundleName=pss-baseline-v2022
    

kpt

  1. set-enforcement-action kpt 함수를 실행하여 정책의 시정 조치를 warn으로 설정합니다.

    kpt fn eval -i gcr.io/kpt-fn/set-enforcement-action:v0.1 -- enforcementAction=warn
    
  2. 정책 제약조건을 적용합니다.

    kpt live apply
    

구성 동기화

구성 동기화를 사용하여 클러스터에 정책을 배포하는 운영자는 다음 안내를 따르세요.

  1. 구성 동기화의 동기화 디렉터리로 변경합니다.

    cd SYNC_ROOT_DIR
    
  2. set-enforcement-action kpt 함수를 실행하여 정책의 시정 조치를 warn으로 설정합니다.

    kpt fn eval policies/pss-baseline-v2022 -i gcr.io/kpt-fn/set-enforcement-action:v0.1 -- enforcementAction=warn
    
  3. 구성 동기화 저장소에 변경사항을 푸시합니다.

    git add SYNC_ROOT_DIR/policies/pss-baseline-v2022
    git commit -m 'Adding Pod Security Standards Baseline policy bundle warn enforcement'
    git push
    
  4. 설치 상태를 확인합니다.

    gcloud alpha anthos config sync repo list --project PROJECT_ID
    

    SYNCED 열에 표시된 저장소는 정책 설치를 확인합니다.

테스트 정책 시행

다음 명령어를 사용하여 클러스터에 정책을 준수하지 않는 리소스를 만듭니다.

cat <<EOF | kubectl apply -f -
apiVersion: v1
kind: Pod
metadata:
  namespace: default
  name: wp-non-compliant
  labels:
    app: wordpress
spec:
  containers:
    - image: wordpress
      name: wordpress
      ports:
      - containerPort: 80
        hostPort: 80
        name: wordpress
EOF

다음 예시와 같이 허용 컨트롤러는 이 리소스가 위반하는 정책 위반을 나열하는 경고를 생성해야 합니다.

Warning:  [pss-baseline-v2022-host-ports] The specified hostNetwork and hostPort are not allowed, pod: wp-non-compliant. Allowed values: {"max": 0, "min": 0}
pod/wp-non-compliant created

포드 보안 표준 기준 정책 번들 삭제

필요한 경우 포드 보안 표준 기준 정책 번들을 클러스터에서 삭제할 수 있습니다.

kubectl

  • kubectl을 사용하여 정책을 삭제합니다.

    kubectl delete constraint -l policycontroller.gke.io/bundleName=pss-baseline-v2022
    

kpt

  • 정책을 삭제합니다.

    kpt live destroy
    

구성 동기화

구성 동기화를 사용하여 클러스터에 정책을 배포하는 운영자는 다음 안내를 따르세요.

  1. 구성 동기화 저장소에 변경사항을 푸시합니다.

    git rm -r SYNC_ROOT_DIR/policies/pss-baseline-v2022
    git commit -m 'Removing Pod Security Standards Baseline policies'
    git push
    
  2. 상태를 확인합니다.

    gcloud alpha anthos config sync repo list --project PROJECT_ID
    

    SYNCED 열에 표시된 저장소는 정책 삭제를 확인합니다.