Policy Controller enthält eine Standardbibliothek mit Einschränkungsvorlagen, die mit dem CIS-Richtlinien-Bundle v1.5.0 (Center for Internet Security) verwendet werden können. Sie dienen zur Prüfung der Compliance Ihres GKE on Google Cloud-Clusters mit den CIS Google Kubernetes Engine (GKE) Benchmarks v1.5.0. Diese Benchmark besteht aus einer Reihe empfohlener Sicherheitskontrollen für die Konfiguration von GKE.
Dieses Einschränkungs-Bundle umfasst Kontrollen in den folgenden Domains:
- RBAC- und Dienstkonten
- Pod-Sicherheitsrichtlinien
- Netzwerkrichtlinien und CNI
- Verwaltung von Secrets
- Erweiterbare Zugangskontrolle
- Allgemeine Richtlinien
- Verwaltete Dienste
Einschränkungen für das CIS-GKE-v1.5.0-Richtlinien-Bundle
Name der Einschränkung | Beschreibung der Einschränkung | Kontroll-IDs |
---|---|---|
cis-gke-v1.5.0-apparmor | Schränkt das Profil AppArmor für Pods ein.
|
4.2.1 |
cis-gke-v1.5.0-restrict-creation-with-default-serviceaccount | Schränkt die Ressourcenerstellung mit einem Standard-ServiceAccount ein.
|
4.1.5 |
cis-gke-v1.5.0-restrict-loadbalancer | Verhindert alle Dienste mit dem Typ LoadBalancer .
|
5.6.8 |
cis-gke-v1.5.0-restrict-secrets-of-type-basic-auth | Schränkt die Verwendung von Secrets vom Typ „basic-auth“ ein. | 4.4.2 |
cis-gke-v1.5.0-require-binauthz | Erfordert den Zulassungs-Webhook der Binärautorisierung. | 4.5.1, 5.10.4 |
cis-gke-v1.5.0-require-cos-node-image | Erfordert Container-Optimized OS als Knoten-Betriebssystem-Image. | 5.5.1 |
cis-gke-v1.5.0-require-gke-metadata-server-enabled | Macht es erforderlich, dass der GKE-Metadatendienst auf jedem Knoten im Cluster aktiviert ist. | 5.4.2 |
cis-gke-v1.5.0-require-ingress.class-gce | Macht es erforderlich, dass alle Ingress -Objekte eine kubernetes.io/ingress.class: gce -Annotation haben.
|
5.6.8 |
cis-gke-v1.5.0-require-managed-certificates | Macht es erforderlich, dass alle Ingress -Objekte eine networking.gke.io/managed-certificates -Annotation haben.
|
5.6.8 |
cis-gke-v1.5.0-require-namespace-networkpolicy | Macht es erforderlich, dass jeder im Cluster definierte Namespace eine NetworkPolicy hat.
|
4.3.2 |
cis-gke-v1.5.0-require-seccomp-default | Container können nicht mit einem anderen seccomp -Profil als runtime/default ausgeführt werden.
|
4.6.2 |
cis-gke-v1.5.0-require-securitycontext | Erfordert, dass Pods securityContext definieren.
|
4.6.3 |
cis-gke-v1.5.0-capabilities | Das Hinzufügen von Funktionen über die aufgeführten Elemente hinaus ist nicht zulässig. | 4.2.1 |
cis-gke-v1.5.0-restrict-cluster-admin-role | Schränkt die Verwendung der Rolle cluster-admin ein.
|
4.1.1 |
cis-gke-v1.5.0-restrict-default-namespace | Schränkt die Verwendung des Standard-Namespace durch Pods ein.
|
4.6.1, 4.6.4 |
cis-gke-v1.5.0-restrict-env-var-secrets | Schränkt die Verwendung von Secrets als Umgebungsvariablen in Containerdefinitionen ein. | 4.4.1 |
cis-gke-v1.5.0-host-namespace | Beschränkt Container, bei denen hostPID oder hostIPC auf „true“ gesetzt ist.
|
4.2.1 |
cis-gke-v1.5.0-restrict-pods-create | Schränkt das Erstellen von Pods in Roles und ClusterRoles ein.
|
4.1.4 |
cis-gke-v1.5.0-restrict-privileged-containers | Schränkt Container ein, bei denen securityContext.privileged auf „true“ gesetzt ist.
|
4.2.1 |
cis-gke-v1.5.0-restrict-rbac-subjects | Schränkt die Verwendung von Namen in RBAC auf zulässige Werte ein. | 5.8.2 |
cis-gke-v1.5.0-restrict-role-wildcards | Schränkt die Verwendung von Platzhaltern in Roles und ClusterRoles ein.
|
4.1.3 |
cis-gke-v1.5.0-restrict-role-secrets | Schränkt die Verwendung von Secrets in Roles und ClusterRoles ein.
|
4.1.2 |
cis-gke-v1.5.0-restrict-automountserviceaccounttoken | Schränkt die Verwendung von Dienstkonto-Tokens für Pods ein. | 4.1.5, 4.1.6 |
cis-gke-v1.5.0-selinux | Der SELinux-Typ oder die benutzerdefinierte SELinux-Nutzer- oder -Rollenoption kann nicht festgelegt werden. | 4.2.1 |
cis-gke-v1.5.0-host-port | HostPorts sollte nicht zugelassen sein.
|
4.2.1 |
cis-gke-v1.5.0-hostpath-volumes | HostPath -Volumes müssen unzulässig sein.
|
4.2.1 |
cis-gke-v1.5.0-hostprocess | Container und Pods können nicht ausgeführt werden, wenn securityContext.windowsOptions.hostProcess auf true gesetzt ist.
|
4.2.1 |
cis-gke-v1.5.0-proc-mount-type | Container können nicht ausgeführt werden, wenn procMount auf einen anderen Wert als Default festgelegt ist.
|
4.2.1 |
cis-gke-v1.5.0-restrict-bind-escalate-impersonate | Schränkt den Zugriff auf Bindung, Eskalation und Übernahme der Identität von Rollen/Clusterrollen in Roles und ClusterRoles ein.
|
4.1.8 |
cis-gke-v1.5.0-restrict-certificatesigningrequests-approval | Die Genehmigung der Clientzertifikate ist eingeschränkt. | 4.1.11 |
cis-gke-v1.5.0-restrict-nodes-proxy | Der Zugriff auf die Proxy-Unterressource von Knoten in Roles und ClusterRoles wird eingeschränkt.
|
4.1.10 |
cis-gke-v1.5.0-restrict-persistent-volume | Schränkt das Erstellen von persistentvolumes in Roles und ClusterRoles ein.
|
4.1.9 |
cis-gke-v1.5.0-restrict-serviceaccounts-token | Schränkt das Erstellen von Dienstkonto-Tokens in Roles und ClusterRoles ein.
|
4.1.13 |
cis-gke-v1.5.0-restrict-system-masters-group | Verhindert die Verwendung der Gruppe system:masters .
|
5.1.7 |
cis-gke-v1.5.0-restrict-system-masters-group | Beschränkt den Zugriff auf Webhook-Konfigurationsobjekte in Roles und ClusterRoles .
|
4.1.12 |
cis-gke-v1.5.0-seccomp | Das Seccomp-Profil darf nicht auf Unconfined gesetzt sein.
|
4.2.1 |
cis-gke-v1.5.0-sysctls | Container können nur sysctls festlegen, die im Feld allowedSysctls aufgelistet sind.
|
4.2.1 |
Hinweise
- Installieren und initialisieren Sie das Google Cloud CLI, das die in dieser Anleitung verwendeten Befehle
gcloud
undkubectl
enthält. Wenn Sie Cloud Shell verwenden, ist Google Cloud CLI vorinstalliert. - Installieren Sie Policy Controller v1.16.2 oder höher in Ihrem Cluster mit der Standardbibliothek der Einschränkungsvorlagen. Sie müssen auch die Unterstützung für referenzielle Einschränkungen aktivieren, da dieses Bundle referenzielle Einschränkungen enthält.
Für referenzielle Einschränkungen konfigurieren
Speichern Sie das folgende YAML-Manifest in einer Datei als
policycontroller-config.yaml
. Das Manifest konfiguriert Policy Controller so, dass bestimmte Arten von Objekten beobachtet werden.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"
Wenden Sie das
policycontroller-config.yaml
-Manifest an:kubectl apply -f policycontroller-config.yaml
Cluster und Arbeitslast konfigurieren
- In
cis-gke-v1.5.0-restrict-rbac-subjects
ist die Aktivierung und Konfiguration von Google Groups for RBAC erforderlich. - Die Aktivierung und Konfiguration der Binärautorisierung ist in
cis-gke-v1.5.0-require-binauthz
erforderlich.
Audit-Richtlinien
Mit Policy Controller können Sie Richtlinien für Ihren Kubernetes-Cluster erzwingen. Um Ihre Arbeitslasten und deren Compliance in Bezug auf die in der vorherigen Tabelle beschriebenen CIS GKE v1.5.0-Richtlinien zu testen, können Sie diese Einschränkungen im „Audit”-Modus bereitstellen, um Verstöße aufzudecken und zu beheben.
Sie können diese Richtlinien mit kpt oder Config Sync festlegen, wobei spec.enforcementAction
auf dryrun
gesetzt ist.
kubectl
(Optional) Sehen Sie sich eine Vorschau der Richtlinieneinschränkungen mit kubectl an:
kubectl kustomize https://github.com/GoogleCloudPlatform/gke-policy-library.git/anthos-bundles/cis-gke-v1.5.0
Wenden Sie die Richtlinieneinschränkungen mit kubectl an:
kubectl apply -k https://github.com/GoogleCloudPlatform/gke-policy-library.git/anthos-bundles/cis-gke-v1.5.0
Die Ausgabe sieht so aus:
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
Prüfen Sie, ob Richtlinieneinschränkungen installiert wurden, und prüfen Sie, ob im Cluster Verstöße vorliegen:
kubectl get constraints -l policycontroller.gke.io/bundleName=cis-gke-v1.5.0
Die Ausgabe sieht in etwa so aus:
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
Installieren und richten Sie kpt ein. kpt wird in dieser Anleitung verwendet, um Kubernetes-Ressourcen anzupassen und bereitzustellen.
Laden Sie das CIS-Richtlinien-Bundle von GitHub mit kpt herunter:
kpt pkg get https://github.com/GoogleCloudPlatform/gke-policy-library.git/anthos-bundles/cis-gke-v1.5.0
Führen Sie die kpt-Funktion
set-enforcement-action
aus, um die Erzwingungsaktion der Richtlinien aufdryrun
festzulegen:kpt fn eval cis-gke-v1.5.0 -i gcr.io/kpt-fn/set-enforcement-action:v0.1 \ -- enforcementAction=dryrun
Initialisieren Sie das Arbeitsverzeichnis mit kpt, wodurch eine Ressource erstellt wird, um Änderungen verfolgen zu können:
cd cis-gke-v1.5.0 kpt live init
Wenden Sie die Richtlinieneinschränkungen mit kpt an:
kpt live apply
Prüfen Sie, ob Richtlinieneinschränkungen installiert wurden, und prüfen Sie, ob im Cluster Verstöße vorliegen:
kpt live status --output table --poll-until current
Der Status
CURRENT
bestätigt die erfolgreiche Installation der Einschränkungen.
Config Sync
- Installieren und richten Sie kpt ein. kpt wird in dieser Anleitung verwendet, um Kubernetes-Ressourcen anzupassen und bereitzustellen.
Operatoren, die Config Sync zum Bereitstellen von Richtlinien für ihre Cluster verwenden, können die folgende Anleitung verwenden:
Wechseln Sie in das Synchronisierungsverzeichnis für Config Sync:
cd SYNC_ROOT_DIR
So erstellen Sie
.gitignore
oder hängen es mitresourcegroup.yaml
an:echo resourcegroup.yaml >> .gitignore
Erstellen Sie ein dediziertes
policies
-Verzeichnis:mkdir -p policies
Laden Sie das CIS-GKE-Richtlinien-Bundle v1.5.0 mit kpt von GitHub herunter:
kpt pkg get https://github.com/GoogleCloudPlatform/gke-policy-library.git/anthos-bundles/cis-gke-v1.5.0 policies/cis-gke-v1.5.0
Führen Sie die kpt-Funktion
set-enforcement-action
aus, um die Erzwingungsaktion der Richtlinien aufdryrun
festzulegen:kpt fn eval policies/cis-gke-v1.5.0 -i gcr.io/kpt-fn/set-enforcement-action:v0.1 -- enforcementAction=dryrun
(Optional) Sehen Sie sich eine Vorschau der Richtlinieneinschränkungen an, die erstellt werden sollen:
kpt live init policies/cis-gke-v1.5.0 kpt live apply --dry-run policies/cis-gke-v1.5.0
Wenn Ihr Synchronisierungsverzeichnis für Config Sync Kustomize verwendet, fügen Sie
policies/cis-gke-v1.5.0
Ihrer Stamm-kustomization.yaml
hinzu. Andernfalls entfernen Sie die Dateipolicies/cis-gke-v1.5.0/kustomization.yaml
:rm SYNC_ROOT_DIR/policies/cis-gke-v1.5.0/kustomization.yaml
Übertragen Sie Änderungen per Push in das Config Sync-Repository:
git add SYNC_ROOT_DIR/policies/cis-gke-v1.5.0 git commit -m 'Adding CIS GKE v1.5.0 policy bundle' git push
Prüfen Sie den Status der Installation:
watch gcloud beta container fleet config-management status --project PROJECT_ID
Der Status
SYNCED
bestätigt die Installation der Richtlinien.
Richtlinienverstöße ansehen
Sobald die Richtlinieneinschränkungen im Prüfmodus installiert sind, können Verstöße im Cluster in der UI über das Policy Controller-Dashboard eingesehen werden.
Mit kubectl
können Sie auch mit dem folgenden Befehl Verstöße im Cluster aufrufen:
kubectl get constraint -l policycontroller.gke.io/bundleName=cis-gke-v1.5.0 -o json | jq -cC '.items[]| [.metadata.name,.status.totalViolations]'
Wenn Verstöße vorhanden sind, kann eine Liste der Verstoßmeldungen pro Einschränkung angezeigt werden; dazu nutzen Sie:
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[]?]'
Maßnahme des CIS-GKE v1.5.0-Richtlinien-Bundles ändern
Nachdem Sie die Richtlinienverstöße in Ihrem Cluster überprüft haben, können Sie den Erzwingungsmodus ändern, sodass der Zulassungs-Controller entweder den Modus warn
aktiviert oder sogar deny
verhindert, dass nicht konforme Ressourcen auf das Cluster angewendet werden.
kubectl
Verwenden Sie kubectl, um die Maßnahme der Richtlinien auf
warn
festzulegen: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"}]'
Prüfen Sie, ob die Maßnahme für Richtlinieneinschränkungen aktualisiert wurde:
kubectl get constraints -l policycontroller.gke.io/bundleName=cis-gke-v1.5.0
KPT
Führen Sie die kpt-Funktion
set-enforcement-action
aus, um die Erzwingungsaktion der Richtlinien aufwarn
festzulegen:kpt fn eval -i gcr.io/kpt-fn/set-enforcement-action:v0.1 -- enforcementAction=warn
Wenden Sie die Richtlinieneinschränkungen an:
kpt live apply
Config Sync
Operatoren, die Config Sync zum Bereitstellen von Richtlinien für ihre Cluster verwenden, können die folgende Anleitung verwenden:
Wechseln Sie in das Synchronisierungsverzeichnis für Config Sync:
cd SYNC_ROOT_DIR
Führen Sie die kpt-Funktion
set-enforcement-action
aus, um die Erzwingungsaktion der Richtlinien aufwarn
festzulegen:kpt fn eval policies/cis-gke-v1.5.0 -i gcr.io/kpt-fn/set-enforcement-action:v0.1 -- enforcementAction=warn
Übertragen Sie Änderungen per Push in das Config Sync-Repository:
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
Prüfen Sie den Status der Installation:
gcloud alpha anthos config sync repo list --project PROJECT_ID
Ihr Repository, das in der Spalte
SYNCED
angezeigt wird, bestätigt die Installation der Richtlinien.
Richtlinienerzwingung testen
Erstellen Sie mit dem folgenden Befehl eine nicht konforme Ressource im Cluster:
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
Der Admission-Controller sollte eine Warnung ausgeben, in der die Richtlinienverstöße aufgeführt sind, gegen die diese Ressource verstößt, wie im folgenden Beispiel gezeigt:
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-Richtlinien-Bundle v1.5.0 entfernen
Bei Bedarf kann das CIS-GKE-Richtlinien-Bundle v1.5.0 aus dem Cluster entfernt werden.
kubectl
Verwenden Sie kubectl, um die Richtlinien zu entfernen:
kubectl delete constraint -l policycontroller.gke.io/bundleName=cis-gke-v1.5.0
KPT
Entfernen Sie die Richtlinien:
kpt live destroy
Config Sync
Operatoren, die Config Sync zum Bereitstellen von Richtlinien für ihre Cluster verwenden, können die folgende Anleitung verwenden:
Übertragen Sie Änderungen per Push in das Config Sync-Repository:
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
Prüfen Sie den Status:
gcloud alpha anthos config sync repo list --project PROJECT_ID
Ihr Repository, das in der Spalte
SYNCED
angezeigt wird, bestätigt das Entfernen der Richtlinien.