CIS Kubernetes Benchmark v1.7.1-Richtlinieneinschränkungen verwenden

Policy Controller enthält eine Standardbibliothek mit Einschränkungsvorlagen, die mit dem CIS-Bundle verwendet werden können, um die Compliance des Clusters mit der CIS-Kubernetes-Benchmark v1.7.1 zu prüfen. Diese Benchmark besteht aus einer Reihe von Empfehlungen für die Konfiguration von Kubernetes, um ein hohes Sicherheitsniveau zu gewährleisten.

Dieses Bundle mit Einschränkungen setzt Richtlinien in den folgenden Domains durch:

  • RBAC- und Dienstkonten
  • Pod-Sicherheitsrichtlinien
  • Netzwerkrichtlinien und CNI
  • Verwaltung von Secrets
  • Erweiterbare Zugriffskontrolle
  • Allgemeine Richtlinien

Einschränkungen für das CIS Kubernetes v1.7.1-Richtlinien-Bundle

Name der Einschränkung Beschreibung der Einschränkung Kontroll-IDs
cis-k8s-v1.7.1-restrict-system-masters-group Verhindert die Verwendung der Gruppe system:masters. Hat keine Auswirkungen während der Prüfung. 5.1.7
cis-k8s-v1.7.1-restrict-env-var-secrets Schränkt die Verwendung von Secrets als Umgebungsvariablen in Containerdefinitionen ein. 5.4.1
cis-k8s-v1.7.1-restrict-capabilities Container müssen die Funktion NET_RAW löschen und dürfen keine Funktionen wieder hinzufügen. 5.2.8, 5.2.9, 5.2.10
cis-k8s-v1.7.1-require-admission-controller Erfordert entweder Pod Security Admission oder ein externes Richtlinienkontrollsystem. 5.2.1
cis-k8s-v1.7.1-require-binauthz Erfordert den Zulassungs-Webhook der Binärautorisierung. 5.5.1
cis-k8s-v1.7.1-require-namespace-networkpolicy Erfordert, dass jeder im Cluster definierte Namespace eine NetworkPolicy hat. 5.3.2
cis-k8s-v1.7.1-require-seccomp-default Erfordert, dass Pods das seccomp-Profil auf runtime/default oder docker/default festlegen. 5.7.2
cis-k8s-v1.7.1-require-securitycontext Erfordert, dass Pods securityContext definieren. 5.7.3
cis-k8s-v1.7.1-restrict-aggregation-controller Schränkt die Verwendung der Rolle clusterrole-aggregation-controller ein. 5.1.8
cis-k8s-v1.7.1-restrict-automountserviceaccounttoken Beschränkt die Verwendung von Dienstkonto-Tokens. 5.1.5, 5.1.6
cis-k8s-v1.7.1-restrict-bind-escalate-impersonate Beschränkt den Zugriff auf die Bindung, die Eskalation und die Übernahme der Identität in Roles und ClusterRoles. 5.1.8
cis-k8s-v1.7.1-restrict-certificatesigningrequests-approval Schränkt den Zugriff auf die API für die Genehmigung von Clientzertifikaten ein. 5.1.11
cis-k8s-v1.7.1-restrict-cluster-admin-role Schränkt die Verwendung der Rolle cluster-admin ein. 5.1.1, 5.1.8
cis-k8s-v1.7.1-restrict-creation-with-default-serviceaccount Schränkt das Erstellen von Ressourcen mit einem Standarddienstkonto ein. Hat keine Auswirkungen während der Prüfung. 5.1.5
cis-k8s-v1.7.1-restrict-default-namespace Schränkt die Verwendung des Standard-Namespace durch Pods ein. 5.7.1, 5.7.4
cis-k8s-v1.7.1-restrict-host-namespace Beschränkt hostPID oder hostIPC auf true. 5.2.3, 5.2.4
cis-k8s-v1.7.1-restrict-host-port Schränkt die Ausführung von Containern mit konfiguriertem hostPort ein. 5.2.13
cis-k8s-v1.7.1-restrict-hostpath-volumes Schränkt die Verwendung von hostPath-Volumes ein. 5.2.12
cis-k8s-v1.7.1-restrict-hostnetwork Verhindert, dass Container mit dem auf true gesetzten Flag hostNetwork ausgeführt werden. 5.2.5
cis-k8s-v1.7.1-restrict-nodes-proxy Der Zugriff auf die Proxy-Unterressource von Knoten in Roles und ClusterRoles wird eingeschränkt. 5.1.10
cis-k8s-v1.7.1-restrict-persistent-volume Schränkt das Erstellen von persistentvolumes in Roles und ClusterRoles ein. 5.1.9
cis-k8s-v1.7.1-restrict-pods-create Schränkt das Erstellen von Pods in Roles und ClusterRoles ein. 5.1.4
cis-k8s-v1.7.1-restrict-privilege-escalation Beschränkt allowPrivilegeEscalation auf true. 5.2.6
cis-k8s-v1.7.1-restrict-privileged-containers Beschränkt securityContext.privileged auf true. 5.2.2
cis-k8s-v1.7.1-restrict-role-secrets Beschränkt die Verwendung von Secrets in Roles und ClusterRoles. 5.1.2
cis-k8s-v1.7.1-restrict-role-wildcards Beschränkt die Verwendung von Platzhaltern in Roles und ClusterRoles. 5.1.3
cis-k8s-v1.7.1-restrict-root-containers Verhindert, dass Container als Root-Nutzer ausgeführt werden. 5.2.7
cis-k8s-v1.7.1-restrict-secrets-of-type-basic-auth Beschränkt die Verwendung von Secrets des Typs basic-auth. 5.4.2
cis-k8s-v1.7.1-restrict-serviceaccounts-token Schränkt das Erstellen von Dienstkonto-Tokens in Roles und ClusterRoles ein. 5.1.13
cis-k8s-v1.7.1-restrict-webhook-config Beschränkt den Zugriff auf Webhook-Konfigurationsobjekte in Roles und ClusterRoles. 5.1.12
cis-k8s-v1.7.1-restrict-windows-hostprocess Schränkt die Ausführung von Windows-hostProcess-Containern oder -Pods ein. 5.2.11

Hinweise

  1. Installieren und initialisieren Sie das Google Cloud CLI, das die in dieser Anleitung verwendeten Befehle gcloud und kubectl enthält. Wenn Sie Cloud Shell verwenden, ist Google Cloud CLI vorinstalliert.
  2. Installieren Sie den Policy Controller auf Ihrem Cluster mit der Standardbibliothek an 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

  1. 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"
    
  2. Wenden Sie das policycontroller-config.yaml-Manifest an:

    kubectl apply -f policycontroller-config.yaml
    

Cluster und Arbeitslast konfigurieren

  1. Die Aktivierung und Konfiguration der Binärautorisierung ist in cis-k8s-v1.7.1-require-binauthz erforderlich.

CIS Kubernetes v1.7.1-Richtlinien-Bundle prüfen

Mit Policy Controller können Sie Richtlinien für Ihren Kubernetes-Cluster erzwingen. Damit Sie Ihre Arbeitslasten und deren Compliance in Bezug auf die in der vorherigen Tabelle beschriebenen CIS Kubernetes v1.7.1-Richtlinien testen können, 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

  1. (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-k8s-v1.7.1
    
  2. Wenden Sie die Richtlinieneinschränkungen mit kubectl an:

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

    Die Ausgabe sieht so aus:

    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. 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-k8s-v1.7.1
    

    Die Ausgabe sieht in etwa so aus:

    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. Installieren und richten Sie kpt ein. kpt wird in dieser Anleitung verwendet, um Kubernetes-Ressourcen anzupassen und bereitzustellen.

  2. 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-k8s-v1.7.1
    
  3. Führen Sie die kpt-Funktion set-enforcement-action aus, um die Erzwingungsaktion der Richtlinien auf dryrun festzulegen:

    kpt fn eval cis-k8s-v1.7.1 -i gcr.io/kpt-fn/set-enforcement-action:v0.1 \
      -- enforcementAction=dryrun
    
  4. Initialisieren Sie das Arbeitsverzeichnis mit kpt, wodurch eine Ressource erstellt wird, um Änderungen verfolgen zu können:

    cd cis-k8s-v1.7.1
    kpt live init
    
  5. Wenden Sie die Richtlinieneinschränkungen mit kpt an:

    kpt live apply
    
  6. 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

  1. 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:

  1. Wechseln Sie in das Synchronisierungsverzeichnis für Config Sync:

    cd SYNC_ROOT_DIR
    

    So erstellen Sie .gitignore oder hängen es mit resourcegroup.yaml an:

    echo resourcegroup.yaml >> .gitignore
    

  2. Erstellen Sie ein dediziertes policies-Verzeichnis:

    mkdir -p policies
    
  3. Laden Sie das CIS-Kubernetes-Richtlinien-Bundle v1.7.1 von GitHub mit kpt herunter:

    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. Führen Sie die kpt-Funktion set-enforcement-action aus, um die Erzwingungsaktion der Richtlinien auf dryrun festzulegen:

    kpt fn eval policies/cis-k8s-v1.7.1 -i gcr.io/kpt-fn/set-enforcement-action:v0.1 -- enforcementAction=dryrun
    
  5. (Optional) Sehen Sie sich eine Vorschau der zu erstellenden Richtlinieneinschränkungen an:

    kpt live init policies/cis-k8s-v1.7.1
    kpt live apply --dry-run policies/cis-k8s-v1.7.1
    
  6. Wenn Ihr Synchronisierungsverzeichnis für Config Sync Kustomize verwendet, fügen Sie policies/cis-k8s-v1.7.1 in Ihre Stamm-kustomization.yaml ein. Andernfalls entfernen Sie die Datei policies/cis-k8s-v1.7.1/kustomization.yaml:

    rm SYNC_ROOT_DIR/policies/cis-k8s-v1.7.1/kustomization.yaml
    
  7. Übertragen Sie Änderungen per Push in das Config Sync-Repository:

    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. 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 Benutzeroberfläche über das Policy Controller-Dashboard angezeigt 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-k8s-v1.7.1 -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 mit:

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[]?]'

Erzwingungsaktion des CIS Kubernetes v1.7.1-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

  1. Verwenden Sie kubectl, um die Erzwingungsaktion der Richtlinien auf warn festzulegen:

    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. Prüfen Sie, ob die Durchsetzungsaktion für Richtlinieneinschränkungen aktualisiert wurde:

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

KPT

  1. Führen Sie die kpt-Funktion set-enforcement-action aus, um die Erzwingungsaktion der Richtlinien auf warn festzulegen:

    kpt fn eval -i gcr.io/kpt-fn/set-enforcement-action:v0.1 -- enforcementAction=warn
    
  2. 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:

  1. Wechseln Sie in das Synchronisierungsverzeichnis für Config Sync:

    cd SYNC_ROOT_DIR
    
  2. Führen Sie die kpt-Funktion set-enforcement-action aus, um die Erzwingungsaktion der Richtlinien auf warn festzulegen:

    kpt fn eval policies/cis-k8s-v1.7.1 -i gcr.io/kpt-fn/set-enforcement-action:v0.1 -- enforcementAction=warn
    
  3. Übertragen Sie Änderungen per Push in das Config Sync-Repository:

    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. 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-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-Richtlinien-Bundle entfernen

Bei Bedarf kann das CIS Kubernetes v1.7.1-Richtlinien-Bundle aus dem Cluster entfernt werden.

kubectl

Verwenden Sie kubectl, um die Richtlinien zu entfernen:

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

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:

  1. Übertragen Sie Änderungen per Push in das Config Sync-Repository:

    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. 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.