정책 컨트롤러는 인터넷 보안 센터(CIS) GKE v1.5.0 정책 번들과 함께 사용할 수 있는 제약조건 템플릿의 기본 라이브러리가 함께 제공되며, 이 라이브러리를 통해 Google Cloud 클러스터의 GKE가 CIS Google Kubernetes Engine(GKE) 벤치마크 v1.5.0에 대해 규정을 준수하는지 감사할 수 있습니다. 이 벤치마크는 GKE 구성에 권장되는 보안 제어 집합입니다.
이 제약조건 번들에는 다음 도메인의 제어가 포함됩니다.
- RBAC 및 서비스 계정
- 포드 보안 정책
- 네트워크 정책 및 CNI
- 보안 비밀 관리
- 확장 가능한 허용 제어
- 일반 정책
- 관리형 서비스
CIS GKE v1.5.0 정책 번들 제약조건
제약조건 이름 | 제약조건 설명 | 제어 ID |
---|---|---|
cis-gke-v1.5.0-apparmor | 포드의 AppArmor 프로필을 제한합니다.
|
4.2.1 |
cis-gke-v1.5.0-restrict-creation-with-default-serviceaccount | 기본 ServiceAccount 를 사용하여 리소스 생성을 제한합니다.
|
4.1.5 |
cis-gke-v1.5.0-restrict-loadbalancer | LoadBalancer 유형의 모든 서비스를 허용하지 않습니다.
|
5.6.8 |
cis-gke-v1.5.0-restrict-secrets-of-type-basic-auth | 기본 인증 유형 보안 비밀을 제한합니다. | 4.4.2 |
cis-gke-v1.5.0-require-binauthz | 허용 웹훅 검증을 위한 Binary Authorization이 필요합니다. | 4.5.1, 5.10.4 |
cis-gke-v1.5.0-require-cos-node-image | Container-Optimized OS를 노드 OS 이미지로 요구합니다. | 5.5.1 |
cis-gke-v1.5.0-require-gke-metadata-server-enabled | 클러스터의 각 노드에서 GKE 메타데이터 서비스가 사용 설정되어 있어야 합니다. | 5.4.2 |
cis-gke-v1.5.0-require-ingress.class-gce | 모든 Ingress 객체에 kubernetes.io/ingress.class: gce 주석이 있어야 합니다.
|
5.6.8 |
cis-gke-v1.5.0-require-managed-certificates | 모든 Ingress 객체에 networking.gke.io/managed-certificates 주석이 있어야 합니다.
|
5.6.8 |
cis-gke-v1.5.0-require-namespace-networkpolicy | 클러스터에 정의된 모든 Namespace 에 NetworkPolicy 가 있어야 합니다. |
4.3.2 |
cis-gke-v1.5.0-require-seccomp-default | runtime/default 이외의 seccomp 프로필을 사용하는 컨테이너는 실행할 수 없습니다.
|
4.6.2 |
cis-gke-v1.5.0-require-securitycontext | 포드에 securityContext 가 정의되어야 합니다.
|
4.6.3 |
cis-gke-v1.5.0-capabilities | 나열된 기능 이외의 기능을 추가하는 것은 허용되지 않습니다. | 4.2.1 |
cis-gke-v1.5.0-restrict-cluster-admin-role | cluster-admin 역할 사용을 제한합니다.
|
4.1.1 |
cis-gke-v1.5.0-restrict-default-namespace | 기본 Namespace 를 사용하는 포드를 제한합니다.
|
4.6.1, 4.6.4 |
cis-gke-v1.5.0-restrict-env-var-secrets | 컨테이너 정의에서 환경 변수로 보안 비밀을 사용하는 것을 제한합니다. | 4.4.1 |
cis-gke-v1.5.0-host-namespace | hostPID 또는 hostIPC 가 true로 설정된 컨테이너를 제한합니다.
|
4.2.1 |
cis-gke-v1.5.0-restrict-pods-create | Roles 및 ClusterRoles 의 포드 생성을 제한합니다.
|
4.1.4 |
cis-gke-v1.5.0-restrict-privileged-containers | securityContext.privileged 가 true로 설정된 컨테이너를 제한합니다. |
4.2.1 |
cis-gke-v1.5.0-restrict-rbac-subjects | RBAC 주제에서 이름 사용을 허용된 값으로 제한합니다. | 5.8.2 |
cis-gke-v1.5.0-restrict-role-wildcards | Roles 및 ClusterRoles 에서 와일드 카드 사용을 제한합니다.
|
4.1.3 |
cis-gke-v1.5.0-restrict-role-secrets | Roles 및 ClusterRoles 에서 보안 비밀 사용을 제한합니다.
|
4.1.2 |
cis-gke-v1.5.0-restrict-automountserviceaccounttoken | 포드에 대한 서비스 계정 토큰 사용을 제한합니다. | 4.1.5, 4.1.6 |
cis-gke-v1.5.0-selinux | SELinux 유형을 설정하거나 커스텀 SELinux 사용자 또는 역할 옵션을 설정할 수 없습니다. | 4.2.1 |
cis-gke-v1.5.0-host-port | HostPorts 는 허용되지 않아야 합니다.
|
4.2.1 |
cis-gke-v1.5.0-hostpath-volumes | HostPath 볼륨은 금지되어야 합니다.
|
4.2.1 |
cis-gke-v1.5.0-hostprocess | securityContext.windowsOptions.hostProcess 가 true 로 설정된 컨테이너와 포드는 실행할 수 없습니다.
|
4.2.1 |
cis-gke-v1.5.0-proc-mount-type | procMount 가 Default 이외의 값으로 설정된 컨테이너는 실행할 수 없습니다.
|
4.2.1 |
cis-gke-v1.5.0-restrict-bind-escalate-impersonate | Roles 및 ClusterRoles 에서 역할/클러스터 역할의 바인드, 에스컬레이션, 가장에 대한 액세스를 제한합니다.
|
4.1.8 |
cis-gke-v1.5.0-restrict-certificatesigningrequests-approval | 클라이언트 인증서 승인이 제한됩니다. | 4.1.11 |
cis-gke-v1.5.0-restrict-nodes-proxy | Roles 및 ClusterRoles 에서 노드의 프록시 하위 리소스에 대한 액세스를 제한합니다.
|
4.1.10 |
cis-gke-v1.5.0-restrict-persistent-volume | Roles 및 ClusterRoles 의 persistentvolumes 생성을 제한합니다.
|
4.1.9 |
cis-gke-v1.5.0-restrict-serviceaccounts-token | Roles 및 ClusterRoles 의 서비스 계정 토큰 생성을 제한합니다.
|
4.1.13 |
cis-gke-v1.5.0-restrict-system-masters-group | system:masters 그룹 사용을 허용하지 않습니다.
|
5.1.7 |
cis-gke-v1.5.0-restrict-system-masters-group | Roles 및 ClusterRoles 에서 웹훅 구성 객체에 대한 액세스를 제한합니다.
|
4.1.12 |
cis-gke-v1.5.0-seccomp | Seccomp 프로필을 Unconfined 로 설정해서는 안 됩니다.
|
4.2.1 |
cis-gke-v1.5.0-sysctls | 컨테이너는 allowedSysctls 필드에 나열된 sysctls만 설정할 수 있습니다.
|
4.2.1 |
cis-gke-v1.5.0-host-namespaces-hostnetwork | 호스트 네임스페이스 hostNetwork 는 false 만 될 수 있습니다.
|
4.2.1 |
시작하기 전에
- 이 안내에서 사용되는
gcloud
및kubectl
명령어를 제공하는 Google Cloud CLI를 설치하고 초기화합니다. Cloud Shell을 사용하는 경우 Google Cloud CLI가 사전 설치됩니다. - 기본 제약조건 템플릿 라이브러리를 사용하여 클러스터에 v1.16.2 이상의 정책 컨트롤러를 설치합니다. 또한 이 번들에는 참조 제약조건이 포함되어 있으므로 참조 제약조건에 대한 지원을 사용 설정해야 합니다.
참조 제약조건 구성
다음 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"
policycontroller-config.yaml
매니페스트를 적용합니다.kubectl apply -f policycontroller-config.yaml
클러스터 및 워크로드 구성
cis-gke-v1.5.0-restrict-rbac-subjects
에서 RBAC용 Google 그룹스를 사용 설정하고 구성해야 합니다.cis-gke-v1.5.0-require-binauthz
에서 Binary Authorization을 사용 설정하고 구성해야 합니다.
감사 정책
정책 컨트롤러를 사용하면 Kubernetes 클러스터에 정책을 적용할 수 있습니다. 앞선 표에서 설명한 GKE v1.5.0 정책과 관련하여 워크로드와 규정 준수를 테스트하는 데 도움이 되도록, '감사' 모드에서 이러한 제약조건을 배포하여 위반 사항을 표시하고 해결할 수 있습니다.
kubectl, kpt 또는 구성 동기화를 사용하여 dryrun
으로 설정된 spec.enforcementAction
으로 이러한 정책을 적용할 수 있습니다.
kubectl
(선택사항) kubectl을 사용하여 정책 제약조건을 미리 봅니다.
kubectl kustomize https://github.com/GoogleCloudPlatform/gke-policy-library.git/anthos-bundles/cis-gke-v1.5.0
kubectl을 사용하여 정책 제약조건을 적용합니다.
kubectl apply -k https://github.com/GoogleCloudPlatform/gke-policy-library.git/anthos-bundles/cis-gke-v1.5.0
출력은 다음과 같습니다.
k8savoiduseofsystemmastersgroup.constraints.gatekeeper.sh/cis-gke-v1.5.0-restrict-system-masters-group created k8sblockcreationwithdefaultserviceaccount.constraints.gatekeeper.sh/cis-gke-v1.5.0-restrict-creation-with-default-serviceaccount created k8sblockloadbalancer.constraints.gatekeeper.sh/cis-gke-v1.5.0-restrict-loadbalancer created k8sblockobjectsoftype.constraints.gatekeeper.sh/cis-gke-v1.5.0-restrict-secrets-of-type-basic-auth created k8snoenvvarsecrets.constraints.gatekeeper.sh/cis-gke-v1.5.0-restrict-env-var-secrets created k8spspapparmor.constraints.gatekeeper.sh/cis-gke-v1.5.0-apparmor created k8spspcapabilities.constraints.gatekeeper.sh/cis-gke-v1.5.0-capabilities created k8spspforbiddensysctls.constraints.gatekeeper.sh/cis-gke-v1.5.0-sysctls created k8spsphostfilesystem.constraints.gatekeeper.sh/cis-gke-v1.5.0-hostpath-volumes created k8spsphostnamespace.constraints.gatekeeper.sh/cis-gke-v1.5.0-host-namespace created k8spsphostnetworkingports.constraints.gatekeeper.sh/cis-gke-v1.5.0-host-port created k8spspprivilegedcontainer.constraints.gatekeeper.sh/cis-gke-v1.5.0-privileged-containers created k8spspprocmount.constraints.gatekeeper.sh/cis-gke-v1.5.0-proc-mount-type created k8spspselinuxv2.constraints.gatekeeper.sh/cis-gke-v1.5.0-selinux created k8spspseccomp.constraints.gatekeeper.sh/cis-gke-v1.5.0-require-seccomp-default created k8spspseccomp.constraints.gatekeeper.sh/cis-gke-v1.5.0-seccomp created k8spspwindowshostprocess.constraints.gatekeeper.sh/cis-gke-v1.5.0-hostprocess created k8spodsrequiresecuritycontext.constraints.gatekeeper.sh/cis-gke-v1.5.0-require-securitycontext created k8sprohibitrolewildcardaccess.constraints.gatekeeper.sh/cis-gke-v1.5.0-restrict-role-wildcards created k8srequirebinauthz.constraints.gatekeeper.sh/cis-gke-v1.5.0-require-binauthz created k8srequirecosnodeimage.constraints.gatekeeper.sh/cis-gke-v1.5.0-require-cos-node-image created k8srequirenamespacenetworkpolicies.constraints.gatekeeper.sh/cis-gke-v1.5.0-require-namespace-networkpolicy created k8srequiredannotations.constraints.gatekeeper.sh/cis-gke-v1.5.0-require-ingress.class-gce created k8srequiredannotations.constraints.gatekeeper.sh/cis-gke-v1.5.0-require-managed-certificates created k8srequiredlabels.constraints.gatekeeper.sh/cis-gke-v1.5.0-require-gke-metadata-server-enabled created k8srestrictautomountserviceaccounttokens.constraints.gatekeeper.sh/cis-gke-v1.5.0-restrict-automountserviceaccounttoken created k8srestrictnamespaces.constraints.gatekeeper.sh/cis-gke-v1.5.0-restrict-default-namespace created k8srestrictrbacsubjects.constraints.gatekeeper.sh/cis-gke-v1.5.0-restrict-rbac-subjects created k8srestrictrolebindings.constraints.gatekeeper.sh/cis-gke-v1.5.0-restrict-cluster-admin-role created k8srestrictrolerules.constraints.gatekeeper.sh/cis-gke-v1.5.0-restrict-bind-escalate-impersonate created k8srestrictrolerules.constraints.gatekeeper.sh/cis-gke-v1.5.0-restrict-certificatesigningrequests-approval created k8srestrictrolerules.constraints.gatekeeper.sh/cis-gke-v1.5.0-restrict-nodes-proxy created k8srestrictrolerules.constraints.gatekeeper.sh/cis-gke-v1.5.0-restrict-persistent-volume created k8srestrictrolerules.constraints.gatekeeper.sh/cis-gke-v1.5.0-restrict-pods-create created k8srestrictrolerules.constraints.gatekeeper.sh/cis-gke-v1.5.0-restrict-role-secrets created k8srestrictrolerules.constraints.gatekeeper.sh/cis-gke-v1.5.0-restrict-serviceaccounts-token created k8srestrictrolerules.constraints.gatekeeper.sh/cis-gke-v1.5.0-restrict-webhook-config created
정책 제약조건이 설치되었는지 확인하고 클러스터 전체에 위반 사항이 있는지 확인합니다.
kubectl get constraints -l policycontroller.gke.io/bundleName=cis-gke-v1.5.0
출력은 다음과 비슷합니다.
NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8savoiduseofsystemmastersgroup.constraints.gatekeeper.sh/cis-gke-v1.5.0-restrict-system-masters-group dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8sblockcreationwithdefaultserviceaccount.constraints.gatekeeper.sh/cis-gke-v1.5.0-restrict-creation-with-default-serviceaccount dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8sblockloadbalancer.constraints.gatekeeper.sh/cis-gke-v1.5.0-restrict-loadbalancer dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8sblockobjectsoftype.constraints.gatekeeper.sh/cis-gke-v1.5.0-restrict-secrets-of-type-basic-auth dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8snoenvvarsecrets.constraints.gatekeeper.sh/cis-gke-v1.5.0-restrict-env-var-secrets dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8spodsrequiresecuritycontext.constraints.gatekeeper.sh/cis-gke-v1.5.0-require-securitycontext dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8sprohibitrolewildcardaccess.constraints.gatekeeper.sh/cis-gke-v1.5.0-restrict-role-wildcards dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8spspapparmor.constraints.gatekeeper.sh/cis-gke-v1.5.0-apparmor dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8spspcapabilities.constraints.gatekeeper.sh/cis-gke-v1.5.0-capabilities dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8spspforbiddensysctls.constraints.gatekeeper.sh/cis-gke-v1.5.0-sysctls dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8spsphostfilesystem.constraints.gatekeeper.sh/cis-gke-v1.5.0-hostpath-volumes dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8spsphostnamespace.constraints.gatekeeper.sh/cis-gke-v1.5.0-host-namespace dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8spsphostnetworkingports.constraints.gatekeeper.sh/cis-gke-v1.5.0-host-port dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8spspprivilegedcontainer.constraints.gatekeeper.sh/cis-gke-v1.5.0-privileged-containers dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8spspprocmount.constraints.gatekeeper.sh/cis-gke-v1.5.0-proc-mount-type dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8spspseccomp.constraints.gatekeeper.sh/cis-gke-v1.5.0-require-seccomp-default dryrun 0 k8spspseccomp.constraints.gatekeeper.sh/cis-gke-v1.5.0-seccomp dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8spspselinuxv2.constraints.gatekeeper.sh/cis-gke-v1.5.0-selinux dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8spspwindowshostprocess.constraints.gatekeeper.sh/cis-gke-v1.5.0-hostprocess dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8srequirebinauthz.constraints.gatekeeper.sh/cis-gke-v1.5.0-require-binauthz dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8srequirecosnodeimage.constraints.gatekeeper.sh/cis-gke-v1.5.0-require-cos-node-image dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8srequiredannotations.constraints.gatekeeper.sh/cis-gke-v1.5.0-require-ingress.class-gce dryrun 0 k8srequiredannotations.constraints.gatekeeper.sh/cis-gke-v1.5.0-require-managed-certificates dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8srequiredlabels.constraints.gatekeeper.sh/cis-gke-v1.5.0-require-gke-metadata-server-enabled dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8srequirenamespacenetworkpolicies.constraints.gatekeeper.sh/cis-gke-v1.5.0-require-namespace-networkpolicy dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8srestrictautomountserviceaccounttokens.constraints.gatekeeper.sh/cis-gke-v1.5.0-restrict-automountserviceaccounttoken dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8srestrictnamespaces.constraints.gatekeeper.sh/cis-gke-v1.5.0-restrict-default-namespace dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8srestrictrbacsubjects.constraints.gatekeeper.sh/cis-gke-v1.5.0-restrict-rbac-subjects dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8srestrictrolebindings.constraints.gatekeeper.sh/cis-gke-v1.5.0-restrict-cluster-admin-role dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8srestrictrolerules.constraints.gatekeeper.sh/cis-gke-v1.5.0-restrict-bind-escalate-impersonate dryrun 0 k8srestrictrolerules.constraints.gatekeeper.sh/cis-gke-v1.5.0-restrict-certificatesigningrequests-approval dryrun 0 k8srestrictrolerules.constraints.gatekeeper.sh/cis-gke-v1.5.0-restrict-nodes-proxy dryrun 0 k8srestrictrolerules.constraints.gatekeeper.sh/cis-gke-v1.5.0-restrict-persistent-volume dryrun 0 k8srestrictrolerules.constraints.gatekeeper.sh/cis-gke-v1.5.0-restrict-pods-create dryrun 0 k8srestrictrolerules.constraints.gatekeeper.sh/cis-gke-v1.5.0-restrict-role-secrets dryrun 0 k8srestrictrolerules.constraints.gatekeeper.sh/cis-gke-v1.5.0-restrict-serviceaccounts-token dryrun 0 k8srestrictrolerules.constraints.gatekeeper.sh/cis-gke-v1.5.0-restrict-webhook-config dryrun 0
kpt
kpt를 설치하고 설정합니다. 이 안내에서는 kpt를 사용하여 Kubernetes 리소스를 맞춤설정하고 배포합니다.
kpt를 사용하여 GitHub에서 CIS 정책 번들을 다운로드합니다.
kpt pkg get https://github.com/GoogleCloudPlatform/gke-policy-library.git/anthos-bundles/cis-gke-v1.5.0
set-enforcement-action
kpt 함수를 실행하여 정책의 시행 작업을dryrun
으로 설정합니다.kpt fn eval cis-gke-v1.5.0 -i gcr.io/kpt-fn/set-enforcement-action:v0.1 \ -- enforcementAction=dryrun
변경사항을 추적하는 리소스를 만드는 kpt로 작업 디렉터리를 초기화합니다.
cd cis-gke-v1.5.0 kpt live init
kpt로 정책 제약조건을 적용합니다.
kpt live apply
정책 제약조건이 설치되었는지 확인하고 클러스터 전체에 위반 사항이 있는지 확인합니다.
kpt live status --output table --poll-until current
CURRENT
상태는 제약조건이 성공적으로 설치되었음을 확인합니다.
구성 동기화
- kpt를 설치하고 설정합니다. 이 안내에서는 kpt를 사용하여 Kubernetes 리소스를 맞춤설정하고 배포합니다.
구성 동기화를 사용하여 클러스터에 정책을 배포하는 운영자는 다음 안내를 따르세요.
구성 동기화의 동기화 디렉터리로 변경합니다.
cd SYNC_ROOT_DIR
resourcegroup.yaml
로.gitignore
를 만들거나 추가하려면 다음 안내를 따르세요.echo resourcegroup.yaml >> .gitignore
전용
policies
디렉터리를 만듭니다.mkdir -p policies
kpt를 사용하여 GitHub에서 CIS GKE v1.5.0 정책 번들을 다운로드합니다.
kpt pkg get https://github.com/GoogleCloudPlatform/gke-policy-library.git/anthos-bundles/cis-gke-v1.5.0 policies/cis-gke-v1.5.0
set-enforcement-action
kpt 함수를 실행하여 정책의 시행 작업을dryrun
으로 설정합니다.kpt fn eval policies/cis-gke-v1.5.0 -i gcr.io/kpt-fn/set-enforcement-action:v0.1 -- enforcementAction=dryrun
(선택사항) 생성될 정책 제약조건을 미리 봅니다.
kpt live init policies/cis-gke-v1.5.0 kpt live apply --dry-run policies/cis-gke-v1.5.0
구성 동기화의 동기화 디렉터리에 Kustomize가 사용되는 경우 루트
kustomization.yaml
에policies/cis-gke-v1.5.0
을 추가합니다. 그렇지 않으면policies/cis-gke-v1.5.0/kustomization.yaml
파일을 삭제합니다.rm SYNC_ROOT_DIR/policies/cis-gke-v1.5.0/kustomization.yaml
구성 동기화 저장소에 변경사항을 푸시합니다.
git add SYNC_ROOT_DIR/policies/cis-gke-v1.5.0 git commit -m 'Adding CIS GKE v1.5.0 policy bundle' git push
설치 상태를 확인합니다.
watch gcloud beta container fleet config-management status --project PROJECT_ID
SYNCED
상태는 정책 설치를 확인합니다.
정책 위반 보기
정책 제약조건이 감사 모드로 설치되면 정책 컨트롤러 대시보드를 사용하여 UI에서 클러스터의 위반 사항을 볼 수 있습니다.
또한 kubectl
을 사용하여 다음 명령어로 클러스터에서 위반 사항을 볼 수 있습니다.
kubectl get constraint -l policycontroller.gke.io/bundleName=cis-gke-v1.5.0 -o json | jq -cC '.items[]| [.metadata.name,.status.totalViolations]'
위반 사항이 있는 경우 제약조건당 위반 메시지 목록을 다음에서 볼 수 있습니다.
kubectl get constraint -l policycontroller.gke.io/bundleName=cis-gke-v1.5.0 -o json | jq -C '.items[]| select(.status.totalViolations>0)| [.metadata.name,.status.violations[]?]'
CIS GKE v1.5.0 정책 번들 시행 작업 변경
클러스터에서 정책 위반을 검토한 후에는 허용 컨트롤러가 호환되지 않는 리소스가 클러스터에 적용되지 않도록 warn
또는 deny
를 수행할 수 있도록 시행 모드 변경을 고려할 수 있습니다.
kubectl
kubectl을 사용하여 정책의 시정 조치를
warn
로 설정합니다.kubectl get constraint -l policycontroller.gke.io/bundleName=cis-gke-v1.5.0 -o name | xargs -I {} kubectl patch {} --type='json' -p='[{"op":"replace","path":"/spec/enforcementAction","value":"warn"}]'
정책 제약조건 시정 조치가 업데이트되었는지 확인합니다.
kubectl get constraints -l policycontroller.gke.io/bundleName=cis-gke-v1.5.0
kpt
set-enforcement-action
kpt 함수를 실행하여 정책의 시행 작업을warn
으로 설정합니다.kpt fn eval -i gcr.io/kpt-fn/set-enforcement-action:v0.1 -- enforcementAction=warn
정책 제약조건을 적용합니다.
kpt live apply
구성 동기화
구성 동기화를 사용하여 클러스터에 정책을 배포하는 운영자는 다음 안내를 따르세요.
구성 동기화의 동기화 디렉터리로 변경합니다.
cd SYNC_ROOT_DIR
set-enforcement-action
kpt 함수를 실행하여 정책의 시행 작업을warn
으로 설정합니다.kpt fn eval policies/cis-gke-v1.5.0 -i gcr.io/kpt-fn/set-enforcement-action:v0.1 -- enforcementAction=warn
구성 동기화 저장소에 변경사항을 푸시합니다.
git add SYNC_ROOT_DIR/policies/cis-gke-v1.5.0 git commit -m 'Adding CIS GKE v1.5.0 policy bundle warn enforcement' git push
설치 상태를 확인합니다.
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-gke-v1.5.0-restrict-default-namespace] <default> namespace is restricted Warning: [cis-gke-v1.5.0-require-seccomp-default] Seccomp profile 'not configured' is not allowed for container 'wordpress'. Found at: no explicit profile found. Allowed profiles: {"RuntimeDefault", "runtime/default"} Warning: [cis-gke-v1.5.0-require-securitycontext] securityContext must be defined for all Pod containers pod/wp-non-compliant configured
CIS GKE v1.5.0 정책 번들 삭제
필요한 경우 클러스터에서 CIS GKE v1.5.0 정책 번들을 삭제할 수 있습니다.
kubectl
kubectl을 사용하여 정책을 삭제합니다.
kubectl delete constraint -l policycontroller.gke.io/bundleName=cis-gke-v1.5.0
kpt
정책을 삭제합니다.
kpt live destroy
구성 동기화
구성 동기화를 사용하여 클러스터에 정책을 배포하는 운영자는 다음 안내를 따르세요.
구성 동기화 저장소에 변경사항을 푸시합니다.
git rm -r SYNC_ROOT_DIR/policies/cis-gke-v1.5.0 git commit -m 'Removing CIS GKE v1.5.0 policy bundle' git push
상태를 확인합니다.
gcloud alpha anthos config sync repo list --project PROJECT_ID
SYNCED
열에 표시된 저장소는 정책 삭제를 확인합니다.