정책 컨트롤러는 인터넷 보안 센터(CIS) GKE v1.5.0 정책 번들과 함께 사용할 수 있는 제약조건 템플릿의 기본 라이브러리가 함께 제공되며, 이 라이브러리를 통해 Google Cloud 클러스터의 GKE가 CIS Google Kubernetes Engine(GKE) 벤치마크 v1.5.0에 대해 규정을 준수하는지 감사할 수 있습니다. 이 벤치마크는 GKE 구성에 권장되는 보안 제어 집합입니다.
이 페이지는 감사 또는 시행 자동화를 제공하고 유지하여 클라우드 플랫폼 내에서 실행되는 모든 리소스가 조직의 규정 준수 요구사항을 충족하도록 보장하려는 IT 관리자와 운영자를 위해 작성되었습니다. Google Cloud 콘텐츠에서 참조하는 일반적인 역할과 예시 태스크에 대한 자세한 내용은 일반 GKE Enterprise 사용자 역할 및 태스크를 참조하세요.
이 제약조건 번들에는 다음 도메인의 제어가 포함됩니다.
- 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
열에 표시된 저장소는 정책 삭제를 확인합니다.