CIS Kubernetes 벤치마크 v1.7.1 정책 제약조건 사용

정책 컨트롤러는 CIS 번들과 함께 사용하여 CIS Kubernetes 벤치마크 v1.7.1에 대해 클러스터의 규정 준수를 감사할 수 있는 제약조건 템플릿의 기본 라이브러리와 함께 제공됩니다. 이 벤치마크는 강력한 보안 수준 지원을 위한 Kubernetes 구성 권장 수준 집합입니다.

이 제약조건 번들은 다음 도메인에서 정책을 적용하고 시행합니다.

  • RBAC 및 서비스 계정
  • 포드 보안 정책
  • 네트워크 정책 및 CNI
  • 보안 비밀 관리
  • 확장 가능한 허용 제어
  • 일반 정책

CIS Kubernetes v1.7.1 정책 번들 제약조건

제약조건 이름 제약조건 설명 제어 ID
cis-k8s-v1.7.1-restrict-system-masters-group system:masters 그룹 사용을 허용하지 않습니다. 감사 중에는 영향을 주지 않습니다. 5.1.7
cis-k8s-v1.7.1-restrict-env-var-secrets 컨테이너 정의에서 환경 변수로 보안 비밀을 사용하는 것을 제한합니다. 5.4.1
cis-k8s-v1.7.1-restrict-capabilities 컨테이너에서 NET_RAW 기능을 삭제해야 하며 어떠한 기능도 다시 추가하도록 허용되지 않습니다. 5.2.8, 5.2.9, 5.2.10
cis-k8s-v1.7.1-require-admission-controller 포드 보안 허용 또는 외부 정책 제어 시스템 필요 5.2.1
cis-k8s-v1.7.1-require-binauthz 허용 웹훅 검증을 위한 Binary Authorization이 필요합니다. 5.5.1
cis-k8s-v1.7.1-require-namespace-networkpolicy 클러스터에 정의된 모든 네임스페이스에 NetworkPolicy가 있어야 합니다. 5.3.2
cis-k8s-v1.7.1-require-seccomp-default 포드에서 seccomp 프로필이 runtime/default 또는 docker/default로 설정되어야 합니다. 5.7.2
cis-k8s-v1.7.1-require-securitycontext 포드에 securityContext가 정의되어야 합니다. 5.7.3
cis-k8s-v1.7.1-restrict-aggregation-controller clusterrole-aggregation-controller 역할 사용을 제한합니다. 5.1.8
cis-k8s-v1.7.1-restrict-automountserviceaccounttoken 서비스 계정 토큰 사용을 제한합니다. 5.1.5, 5.1.6
cis-k8s-v1.7.1-restrict-bind-escalate-impersonate RolesClusterRoles에서 바인딩, 에스컬레이션, 가장에 대한 액세스를 제한합니다. 5.1.8
cis-k8s-v1.7.1-restrict-certificatesigningrequests-approval 클라이언트 인증서 승인 API에 대한 액세스를 제한합니다. 5.1.11
cis-k8s-v1.7.1-restrict-cluster-admin-role cluster-admin 역할 사용을 제한합니다. 5.1.1, 5.1.8
cis-k8s-v1.7.1-restrict-creation-with-default-serviceaccount 기본 서비스 계정을 사용하여 리소스 만들기를 제한합니다. 감사 중에는 영향을 주지 않습니다. 5.1.5
cis-k8s-v1.7.1-restrict-default-namespace 기본 네임스페이스를 사용하는 포드를 제한합니다. 5.7.1, 5.7.4
cis-k8s-v1.7.1-restrict-host-namespace hostPID 또는 hostIPCtrue로 설정된 컨테이너를 제한합니다. 5.2.3, 5.2.4
cis-k8s-v1.7.1-restrict-host-port hostPort를 구성하여 컨테이너가 실행되지 않도록 제한합니다. 5.2.13
cis-k8s-v1.7.1-restrict-hostpath-volumes hostPath 볼륨 사용을 제한합니다. 5.2.12
cis-k8s-v1.7.1-restrict-hostnetwork hostNetwork 플래그를 true로 설정하여 컨테이너의 실행을 제한합니다. 5.2.5
cis-k8s-v1.7.1-restrict-nodes-proxy RolesClusterRoles에서 노드의 프록시 하위 리소스에 대한 액세스를 제한합니다. 5.1.10
cis-k8s-v1.7.1-restrict-persistent-volume RolesClusterRolespersistentvolumes 생성을 제한합니다. 5.1.9
cis-k8s-v1.7.1-restrict-pods-create RolesClusterRoles의 포드 생성을 제한합니다. 5.1.4
cis-k8s-v1.7.1-restrict-privilege-escalation allowPrivilegeEscalationtrue로 설정된 컨테이너를 제한합니다. 5.2.6
cis-k8s-v1.7.1-restrict-privileged-containers securityContext.privilegedtrue로 설정된 컨테이너를 제한합니다. 5.2.2
cis-k8s-v1.7.1-restrict-role-secrets RolesClusterRoles에서 보안 비밀 사용을 제한합니다. 5.1.2
cis-k8s-v1.7.1-restrict-role-wildcards RolesClusterRoles에서 와일드 카드 사용을 제한합니다. 5.1.3
cis-k8s-v1.7.1-restrict-root-containers 컨테이너가 루트 사용자로 실행되지 않도록 제한합니다. 5.2.7
cis-k8s-v1.7.1-restrict-secrets-of-type-basic-auth basic-auth 유형 보안 비밀 사용을 제한합니다. 5.4.2
cis-k8s-v1.7.1-restrict-serviceaccounts-token RolesClusterRoles의 서비스 계정 토큰 생성을 제한합니다. 5.1.13
cis-k8s-v1.7.1-restrict-webhook-config RolesClusterRoles에서 웹훅 구성 객체에 대한 액세스를 제한합니다. 5.1.12
cis-k8s-v1.7.1-restrict-windows-hostprocess Windows hostProcess 컨테이너 또는 포드의 실행을 제한합니다. 5.2.11

시작하기 전에

  1. 이 안내에서 사용되는 gcloudkubectl 명령어를 제공하는 Google Cloud CLI를 설치하고 초기화합니다. Cloud Shell을 사용하는 경우 Google Cloud CLI가 사전 설치됩니다.
  2. 제약조건 템플릿의 기본 라이브러리를 사용하여 클러스터에 정책 컨트롤러를 설치합니다. 또한 이 번들에는 참조 제약조건이 포함되어 있으므로 참조 제약조건에 대한 지원을 사용 설정해야 합니다.

참조 제약조건 구성

  1. 다음 YAML 매니페스트를 파일에 policycontroller-config.yaml로 저장합니다. 이 매니페스트는 특정 종류의 객체를 감시하도록 정책 컨트롤러를 구성합니다.

    apiVersion: config.gatekeeper.sh/v1alpha1
    kind: Config
    metadata:
      name: config
      namespace: "gatekeeper-system"
    spec:
      sync:
        syncOnly:
          - group: "admissionregistration.k8s.io"
            version: "v1"
            kind: "ValidatingWebhookConfiguration"
          - group: "networking.k8s.io"
            version: "v1"
            kind: "NetworkPolicy"
    
  2. policycontroller-config.yaml 매니페스트를 적용합니다.

    kubectl apply -f policycontroller-config.yaml
    

클러스터 및 워크로드 구성

  1. cis-k8s-v1.7.1-require-binauthz에서 Binary Authorization을 사용 설정하고 구성해야 합니다.

CIS Kubernetes v1.7.1 정책 번들 감사

정책 컨트롤러를 사용하면 Kubernetes 클러스터에 정책을 적용할 수 있습니다. 앞선 표에서 설명한 CIS Kubernetes v1.7.1 정책과 관련하여 워크로드와 규정 준수를 테스트하는 데 도움이 되도록, '감사' 모드에서 이러한 제약조건을 배포하여 위반 사항을 표시하고 해결할 수 있습니다.

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

kubectl

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

    kubectl kustomize https://github.com/GoogleCloudPlatform/gke-policy-library.git/anthos-bundles/cis-k8s-v1.7.1
    
  2. kubectl을 사용하여 정책 제약조건을 적용합니다.

    kubectl apply -k https://github.com/GoogleCloudPlatform/gke-policy-library.git/anthos-bundles/cis-k8s-v1.7.1
    

    출력은 다음과 같습니다.

    k8savoiduseofsystemmastersgroup.constraints.gatekeeper.sh/cis-k8s-v1.7.1-avoid-use-of-system-masters-group created
    k8sblockcreationwithdefaultserviceaccount.constraints.gatekeeper.sh/cis-k8s-v1.7.1-restrict-creation-with-default-serviceaccount created
    k8sblockobjectsoftype.constraints.gatekeeper.sh/cis-k8s-v1.7.1-restrict-secrets-of-type-basic-auth created
    k8snoenvvarsecrets.constraints.gatekeeper.sh/cis-k8s-v1.7.1-no-secrets-as-env-vars created
    k8spspallowprivilegeescalationcontainer.constraints.gatekeeper.sh/cis-k8s-v1.7.1-restrict-privilege-escalation created
    k8spspallowedusers.constraints.gatekeeper.sh/cis-k8s-v1.7.1-restrict-root-containers created
    k8spspcapabilities.constraints.gatekeeper.sh/cis-k8s-v1.7.1-psp-capabilities created
    k8spsphostfilesystem.constraints.gatekeeper.sh/cis-k8s-v1.7.1-restrict-hostpath-volumes created
    k8spsphostnamespace.constraints.gatekeeper.sh/cis-k8s-v1.7.1-restrict-host-namespace created
    k8spsphostnetworkingports.constraints.gatekeeper.sh/cis-k8s-v1.7.1-restrict-host-port created
    k8spsphostnetworkingports.constraints.gatekeeper.sh/cis-k8s-v1.7.1-restrict-hostnetwork created
    k8spspprivilegedcontainer.constraints.gatekeeper.sh/cis-k8s-v1.7.1-restrict-privileged-containers created
    k8spspseccomp.constraints.gatekeeper.sh/cis-k8s-v1.7.1-require-seccomp-default created
    k8spspwindowshostprocess.constraints.gatekeeper.sh/cis-k8s-v1.7.1-restrict-windows-hostprocess created
    k8spodsrequiresecuritycontext.constraints.gatekeeper.sh/cis-k8s-v1.7.1-require-securitycontext created
    k8sprohibitrolewildcardaccess.constraints.gatekeeper.sh/cis-k8s-v1.7.1-restrict-role-wildcards created
    k8srequireadmissioncontroller.constraints.gatekeeper.sh/cis-k8s-v1.7.1-require-admission-controller created
    k8srequirebinauthz.constraints.gatekeeper.sh/cis-k8s-v1.7.1-require-binauthz created
    k8srequirenamespacenetworkpolicies.constraints.gatekeeper.sh/cis-k8s-v1.7.1-require-namespace-networkpolicy created
    k8srestrictautomountserviceaccounttokens.constraints.gatekeeper.sh/cis-k8s-v1.7.1-restrict-automountserviceaccounttoken created
    k8srestrictnamespaces.constraints.gatekeeper.sh/cis-k8s-v1.7.1-restrict-default-namespace created
    k8srestrictrolebindings.constraints.gatekeeper.sh/cis-k8s-v1.7.1-restrict-aggregation-controller created
    k8srestrictrolebindings.constraints.gatekeeper.sh/cis-k8s-v1.7.1-restrict-cluster-admin-role created
    k8srestrictrolerules.constraints.gatekeeper.sh/cis-k8s-v1.7.1-restrict-bind-escalate-impersonate created
    k8srestrictrolerules.constraints.gatekeeper.sh/cis-k8s-v1.7.1-restrict-certificatesigningrequests-approval created
    k8srestrictrolerules.constraints.gatekeeper.sh/cis-k8s-v1.7.1-restrict-nodes-proxy created
    k8srestrictrolerules.constraints.gatekeeper.sh/cis-k8s-v1.7.1-restrict-persistent-volume created
    k8srestrictrolerules.constraints.gatekeeper.sh/cis-k8s-v1.7.1-restrict-pods-create created
    k8srestrictrolerules.constraints.gatekeeper.sh/cis-k8s-v1.7.1-restrict-role-secrets created
    k8srestrictrolerules.constraints.gatekeeper.sh/cis-k8s-v1.7.1-restrict-serviceaccounts-token created
    k8srestrictrolerules.constraints.gatekeeper.sh/cis-k8s-v1.7.1-restrict-webhook-config created
    
  3. 정책 제약조건이 설치되었는지 확인하고 클러스터 전체에 위반 사항이 있는지 확인합니다.

    kubectl get constraints -l policycontroller.gke.io/bundleName=cis-k8s-v1.7.1
    

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

    NAME                                                                                                             ENFORCEMENT-ACTION   TOTAL-VIOLATIONS
    k8spspallowprivilegeescalationcontainer.constraints.gatekeeper.sh/cis-k8s-v1.7.1-restrict-privilege-escalation   dryrun               0
    
    NAME                                                                                                                               ENFORCEMENT-ACTION   TOTAL-VIOLATIONS
    k8sblockcreationwithdefaultserviceaccount.constraints.gatekeeper.sh/cis-k8s-v1.7.1-restrict-creation-with-default-serviceaccount   dryrun               0
    
    NAME                                                                                             ENFORCEMENT-ACTION   TOTAL-VIOLATIONS
    k8sprohibitrolewildcardaccess.constraints.gatekeeper.sh/cis-k8s-v1.7.1-restrict-role-wildcards   dryrun               0
    
    NAME                                                                           ENFORCEMENT-ACTION   TOTAL-VIOLATIONS
    k8srequirebinauthz.constraints.gatekeeper.sh/cis-k8s-v1.7.1-require-binauthz   dryrun               0
    
    NAME                                                                                                  ENFORCEMENT-ACTION   TOTAL-VIOLATIONS
    k8srequireadmissioncontroller.constraints.gatekeeper.sh/cis-k8s-v1.7.1-require-admission-controller   dryrun               0
    
    NAME                                                                                             ENFORCEMENT-ACTION   TOTAL-VIOLATIONS
    k8spspwindowshostprocess.constraints.gatekeeper.sh/cis-k8s-v1.7.1-restrict-windows-hostprocess   dryrun               0
    
    NAME                                                                                      ENFORCEMENT-ACTION   TOTAL-VIOLATIONS
    k8spsphostnetworkingports.constraints.gatekeeper.sh/cis-k8s-v1.7.1-restrict-host-port     dryrun               0
    k8spsphostnetworkingports.constraints.gatekeeper.sh/cis-k8s-v1.7.1-restrict-hostnetwork   dryrun               0
    
    NAME                                                                                                                      ENFORCEMENT-ACTION   TOTAL-VIOLATIONS
    k8srestrictautomountserviceaccounttokens.constraints.gatekeeper.sh/cis-k8s-v1.7.1-restrict-automountserviceaccounttoken   dryrun               0
    
    NAME                                                                                             ENFORCEMENT-ACTION   TOTAL-VIOLATIONS
    k8spodsrequiresecuritycontext.constraints.gatekeeper.sh/cis-k8s-v1.7.1-require-securitycontext   dryrun               0
    
    NAME                                                                                      ENFORCEMENT-ACTION   TOTAL-VIOLATIONS
    k8spsphostfilesystem.constraints.gatekeeper.sh/cis-k8s-v1.7.1-restrict-hostpath-volumes   dryrun               0
    
    NAME                                                                                                ENFORCEMENT-ACTION   TOTAL-VIOLATIONS
    k8spspprivilegedcontainer.constraints.gatekeeper.sh/cis-k8s-v1.7.1-restrict-privileged-containers   dryrun               0
    
    NAME                                                                             ENFORCEMENT-ACTION   TOTAL-VIOLATIONS
    k8spspseccomp.constraints.gatekeeper.sh/cis-k8s-v1.7.1-require-seccomp-default   dryrun               0
    
    NAME                                                                                               ENFORCEMENT-ACTION   TOTAL-VIOLATIONS
    k8srestrictrolebindings.constraints.gatekeeper.sh/cis-k8s-v1.7.1-restrict-aggregation-controller   dryrun               0
    k8srestrictrolebindings.constraints.gatekeeper.sh/cis-k8s-v1.7.1-restrict-cluster-admin-role       dryrun               0
    
    NAME                                                                                                         ENFORCEMENT-ACTION   TOTAL-VIOLATIONS
    k8srestrictrolerules.constraints.gatekeeper.sh/cis-k8s-v1.7.1-restrict-bind-escalate-impersonate             dryrun               0
    k8srestrictrolerules.constraints.gatekeeper.sh/cis-k8s-v1.7.1-restrict-certificatesigningrequests-approval   dryrun               0
    k8srestrictrolerules.constraints.gatekeeper.sh/cis-k8s-v1.7.1-restrict-nodes-proxy                           dryrun               0
    k8srestrictrolerules.constraints.gatekeeper.sh/cis-k8s-v1.7.1-restrict-persistent-volume                     dryrun               0
    k8srestrictrolerules.constraints.gatekeeper.sh/cis-k8s-v1.7.1-restrict-pods-create                           dryrun               0
    k8srestrictrolerules.constraints.gatekeeper.sh/cis-k8s-v1.7.1-restrict-role-secrets                          dryrun               0
    k8srestrictrolerules.constraints.gatekeeper.sh/cis-k8s-v1.7.1-restrict-serviceaccounts-token                 dryrun               0
    k8srestrictrolerules.constraints.gatekeeper.sh/cis-k8s-v1.7.1-restrict-webhook-config                        dryrun               0
    
    NAME                                                                                   ENFORCEMENT-ACTION   TOTAL-VIOLATIONS
    k8spspallowedusers.constraints.gatekeeper.sh/cis-k8s-v1.7.1-restrict-root-containers   dryrun               0
    
    NAME                                                                                                          ENFORCEMENT-ACTION   TOTAL-VIOLATIONS
    k8srequirenamespacenetworkpolicies.constraints.gatekeeper.sh/cis-k8s-v1.7.1-require-namespace-networkpolicy   dryrun               0
    
    NAME                                                                                                         ENFORCEMENT-ACTION   TOTAL-VIOLATIONS
    k8savoiduseofsystemmastersgroup.constraints.gatekeeper.sh/cis-k8s-v1.7.1-avoid-use-of-system-masters-group   dryrun               0
    
    NAME                                                                                 ENFORCEMENT-ACTION   TOTAL-VIOLATIONS
    k8snoenvvarsecrets.constraints.gatekeeper.sh/cis-k8s-v1.7.1-no-secrets-as-env-vars   dryrun               0
    
    NAME                                                                                                 ENFORCEMENT-ACTION   TOTAL-VIOLATIONS
    k8sblockobjectsoftype.constraints.gatekeeper.sh/cis-k8s-v1.7.1-restrict-secrets-of-type-basic-auth   dryrun               0
    
    NAME                                                                                   ENFORCEMENT-ACTION   TOTAL-VIOLATIONS
    k8spsphostnamespace.constraints.gatekeeper.sh/cis-k8s-v1.7.1-restrict-host-namespace   dryrun               0
    
    NAME                                                                                        ENFORCEMENT-ACTION   TOTAL-VIOLATIONS
    k8srestrictnamespaces.constraints.gatekeeper.sh/cis-k8s-v1.7.1-restrict-default-namespace   dryrun               0
    
    NAME                                                                           ENFORCEMENT-ACTION   TOTAL-VIOLATIONS
    k8spspcapabilities.constraints.gatekeeper.sh/cis-k8s-v1.7.1-psp-capabilities   dryrun               0
    

kpt

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

  2. kpt를 사용하여 GitHub에서 CIS 정책 번들을 다운로드합니다.

    kpt pkg get https://github.com/GoogleCloudPlatform/gke-policy-library.git/anthos-bundles/cis-k8s-v1.7.1
    
  3. set-enforcement-action kpt 함수를 실행하여 정책의 시행 작업을 dryrun으로 설정합니다.

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

    cd cis-k8s-v1.7.1
    kpt live init
    
  5. kpt로 정책 제약조건을 적용합니다.

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

    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에서 CIS Kubernetes v1.7.1 정책 번들을 다운로드합니다.

    kpt pkg get https://github.com/GoogleCloudPlatform/gke-policy-library.git/anthos-bundles/cis-k8s-v1.7.1 policies/cis-k8s-v1.7.1
    
  4. set-enforcement-action kpt 함수를 실행하여 정책의 시행 작업을 dryrun으로 설정합니다.

    kpt fn eval policies/cis-k8s-v1.7.1 -i gcr.io/kpt-fn/set-enforcement-action:v0.1 -- enforcementAction=dryrun
    
  5. (선택사항) 생성될 정책 제약조건을 미리 봅니다.

    kpt live init policies/cis-k8s-v1.7.1
    kpt live apply --dry-run policies/cis-k8s-v1.7.1
    
  6. 구성 동기화의 동기화 디렉터리에 Kustomize가 사용되는 경우 루트 kustomization.yamlpolicies/cis-k8s-v1.7.1을 추가합니다. 그렇지 않으면 policies/cis-k8s-v1.7.1/kustomization.yaml 파일을 삭제합니다.

    rm SYNC_ROOT_DIR/policies/cis-k8s-v1.7.1/kustomization.yaml
    
  7. 구성 동기화 저장소에 변경사항을 푸시합니다.

    git add SYNC_ROOT_DIR/policies/cis-k8s-v1.7.1
    git commit -m 'Adding CIS Kubernetes v1.7.1 policy bundle'
    git push
    
  8. 설치 상태를 확인합니다.

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

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

정책 위반 보기

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

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

kubectl get constraint -l policycontroller.gke.io/bundleName=cis-k8s-v1.7.1 -o json | jq -cC '.items[]| [.metadata.name,.status.totalViolations]'

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

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

CIS Kubernetes v1.7.1 정책 번들 시정 조치 변경

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

kubectl

  1. kubectl을 사용하여 정책의 시정 조치를 warn로 설정합니다.

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

    kubectl get constraints -l policycontroller.gke.io/bundleName=cis-k8s-v1.7.1
    

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/cis-k8s-v1.7.1 -i gcr.io/kpt-fn/set-enforcement-action:v0.1 -- enforcementAction=warn
    
  3. 구성 동기화 저장소에 변경사항을 푸시합니다.

    git add SYNC_ROOT_DIR/policies/cis-k8s-v1.7.1
    git commit -m 'Adding CIS Kubernetes v1.7.1 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
        name: wordpress
EOF

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

Warning: [cis-k8s-v1.7.1-restrict-default-namespace] <default> namespace is restricted
Warning: [cis-k8s-v1.7.1-restrict-root-containers] Container wordpress is attempting to run without a required securityContext/runAsNonRoot or securityContext/runAsUser != 0
Warning: [cis-k8s-v1.7.1-restrict-privilege-escalation] Privilege escalation container is not allowed: wordpress
Warning: [cis-k8s-v1.7.1-require-seccomp-default] Seccomp profile 'not configured' is not allowed for container 'wordpress'. Found at: no explicit profile found. Allowed profiles: {"RuntimeDefault", "docker/default", "runtime/default"}
Warning: [cis-k8s-v1.7.1-psp-capabilities] container <wordpress> is not dropping all required capabilities. Container must drop all of ["NET_RAW"] or "ALL"
Warning: [cis-k8s-v1.7.1-require-securitycontext] securityContext must be defined for all Pod containers
pod/wp-non-compliant created

CIS Kubernetes v1.7.1 정책 번들 삭제

필요한 경우 클러스터에서 CIS Kubernetes v1.7.1 정책 번들을 삭제할 수 있습니다.

kubectl

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

  kubectl delete constraint -l policycontroller.gke.io/bundleName=cis-k8s-v1.7.1
  

kpt

정책을 삭제합니다.

  kpt live destroy
  

구성 동기화

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

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

    git rm -r SYNC_ROOT_DIR/policies/cis-k8s-v1.7.1
    git commit -m 'Removing CIS Kubernetes v1.7.1 policy bundle'
    git push
    
  2. 상태를 확인합니다.

    gcloud alpha anthos config sync repo list --project PROJECT_ID
    

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