Dieses Dokument wurde mithilfe automatisierter maschineller Übersetzungstechnologie übersetzt. Wir bemühen uns um korrekte Übersetzungen, übernehmen jedoch keine Gewähr für die Vollständigkeit, Richtigkeit oder Zuverlässigkeit der übersetzten Inhalte. Im Falle von Abweichungen ist die englische Originalversion maßgebend und stellt den verbindlichen Text dar.

Dies ist eine unveröffentlichte Dokumentation für Admission Controller 1.34-dev.

Schnelleinführung

Der SUSE Security Admission Controller Stack besteht aus:

  • Einer oder mehreren ClusterAdmissionPolicy Ressourcen: dies definiert Richtlinien für Kubernetes-Cluster.

  • Einer oder mehreren PolicyServer Ressourcen: repräsentiert eine Implementierung eines Admission Controller PolicyServer. Der Admission Controller PolicyServer lädt und bewertet die Richtlinien Ihres Administrators.

  • Einer oder mehreren AdmissionPolicy Ressourcen: Richtlinien für einen definierten Namespace.

  • Eine Bereitstellung eines kubewarden-controller: dieser Controller überwacht die ClusterAdmissionPolicy Ressourcen und interagiert mit den Admission Controller PolicyServer Komponenten.

Admission Controller beschreibt seine Kubernetes Custom Resource Definitions (CRDs) hier.

Admission Controller CRDs, die in diesem Tutorial und im Rest der Dokumentation erwähnt werden, haben kurze Namen, die einfacher zu verwenden sind. Dies sind die kurzen Namen für die CRDs:

Ressource shortName

AdmissionPolicies

ap

ClusterAdmissionPolicies

cap

AdmissionPolicyGroups

apg

ClusterAdmissionPolicyGroups

capg

PolicyServers

ps

Installation

Authentifizierung

Sie können Admission Controller Richtlinien aus dem GitHub-Container-Registry unter https://ghcr.io. abrufen. Sie benötigen eine Authentifizierung, um das Repository mit der Admission Controller CLI zu verwenden, ein GitHub-Personen-Zugriffstoken (PAT). Ihre Dokumentation führt Sie durch die Erstellung eines, falls Sie dies noch nicht getan haben. Dann authentifizieren Sie sich mit einem Befehl wie:

echo $PAT | docker login ghcr.io --username <my-gh-username> --password-stdin

Stellen Sie den Admission Controller Stack mit helm Charts wie folgt bereit:

helm repo add kubewarden https://charts.kubewarden.io
helm repo update kubewarden

Installieren Sie die folgenden Helm-Charts im kubewarden Namespace in Ihrem Kubernetes-Cluster:

  • kubewarden-crds, das die ClusterAdmissionPolicy, AdmissionPolicy und PolicyServer benutzerdefinierte Ressourcenbeschreibungen registriert. Außerdem die {report} benutzerdefinierte Ressourcenbeschreibungen, die vom Audit-Scanner verwendet werden.

  • kubewarden-controller, das den Admission Controller Controller und den Audit-Scanner installiert.

    Wenn Sie die Komponente des Audit-Scanners deaktivieren müssen, überprüfen Sie die Installationsdokumentation des Audit-Scanners Dokumentationsseite.

  • kubewarden-defaults, das eine PolicyServer Ressource mit dem Namen default erstellt. Es kann auch eine Reihe empfohlener Richtlinien installieren, um Ihren Cluster durch Durchsetzung bekannter Best Practices abzusichern.

helm install --wait -n kubewarden --create-namespace kubewarden-crds kubewarden/kubewarden-crds
helm install --wait -n kubewarden kubewarden-controller kubewarden/kubewarden-controller
helm install --wait -n kubewarden kubewarden-defaults kubewarden/kubewarden-defaults

Da v0.4.0 wird eine PolicyServer Ressource mit dem Namen default nicht mit dem kubewarden-controller Chart erstellt. Jetzt installiert ein Helm-Chart namens kubewarden-defaults den Standardrichtlinienserver.

Das bedeutet, dass, wenn Sie nicht die neueste Version des kubewarden-controller verwenden, während Sie aktualisieren oder löschen, Ihr Standardrichtlinienserver nicht aktualisiert oder gelöscht wird. Sie könnten auf Probleme stoßen, wenn Sie versuchen, den kubewarden-defaults mit widersprüchlichen Informationen zu installieren, zum Beispiel denselben Richtlinienserver-Namen. Um zukünftige Upgrades des kubewarden-defaults Helm-Charts zu installieren, entfernen Sie die vorhandene PolicyServer Ressource, die von dem kubewarden-controller erstellt wurde, bevor Sie das neue Chart installieren. Jetzt können Sie Ihren Richtlinienserver mit Helm-Upgrade ohne Ressourcenkonflikte aktualisieren. Wenn Sie das PolicyServer entfernen, entfernen Sie auch alle daran gebundenen Richtlinien.

Die Standardkonfigurationswerte sind für die meisten Implementierungen ausreichend. Die Dokumentation beschreibt alle Optionen.

Hauptkomponenten

Admission Controller hat drei Hauptkomponenten, mit denen Sie interagieren:

PolicyServer

Der kubewarden-controller verwaltet ein Admission Controller PolicyServer. Sie können mehrere PolicyServers im selben Kubernetes-Cluster bereitstellen.

Ein PolicyServer validiert eingehende Anfragen, indem er Admission Controller Richtlinien gegen sie ausführt.

Dies ist die Standardkonfiguration für PolicyServer:

apiVersion: policies.kubewarden.io/v1
kind: PolicyServer
metadata:
  name: reserved-instance-for-tenant-a
spec:
  image: ghcr.io/kubewarden/policy-server:v1.3.0
  replicas: 2
  serviceAccountName: ~
  env:
    - name: KUBEWARDEN_LOG_LEVEL
      value: debug

Überprüfen Sie die neueste veröffentlichte PolicyServer Version und ändern Sie das Tag entsprechend.

Übersicht über die Attribute der PolicyServer Ressource:

required Placeholder Beschreibung

Y

image

Der Name des Container-Images

Y

replicas

Die Anzahl der gewünschten Instanzen

N

serviceAccountName

Der Name des ServiceAccount, der für die PolicyServer Implementierung verwendet werden soll. Wenn kein Wert angegeben ist, wird der Standardwert ServiceAccount aus dem Installations-Namespace, von kubewarden-controller, verwendet.

N

env

Die Liste der Umgebungsvariablen

N

annotations

Die Liste der Annotationen

Die Änderung eines dieser Attribute führt zu einer PolicyServer Implementierung mit der neuen Konfiguration.

ClusterAdmissionPolicy

Die ClusterAdmissionPolicy Ressource ist der Kernel des Admission Controller Stacks. Sie definiert, wie Richtlinien Anfragen bewerten.

Die Durchsetzung von Richtlinien ist die häufigste Operation, die ein Kubernetes-Administrator durchführt. Sie können so viele Richtlinien deklarieren, wie Sie möchten, jede richtet sich an eine oder mehrere Kubernetes-Ressourcen (das heißt, pods, Custom Resource und andere). Sie geben auch den Typ der auf die Zielressourcen angewendeten Operationen an. Die verfügbaren Vorgänge sind CREATE, UPDATE, DELETE und CONNECT.

Standard-ClusterAdmissionPolicy-Konfiguration:

apiVersion: policies.kubewarden.io/v1
kind: ClusterAdmissionPolicy
metadata:
  name: psp-capabilities
spec:
  policyServer: reserved-instance-for-tenant-a
  module: registry://ghcr.io/kubewarden/policies/psp-capabilities:v0.1.9
  rules:
    - apiGroups: [""]
      apiVersions: ["v1"]
      resources: ["pods"]
      operations:
        - CREATE
        - UPDATE
  mutating: true
  settings:
    allowed_capabilities:
      - CHOWN
    required_drop_capabilities:
      - NET_ADMIN

Übersicht über die Attribute der ClusterAdmissionPolicy Ressource:

required Placeholder Beschreibung

N

policy-server

Identifiziert ein vorhandenes PolicyServer Objekt. Nur diese PolicyServer Instanz dient der Richtlinie. Der Richtlinienserver mit dem Namen default bedient ein ClusterAdmissionPolicy ohne eine explizite PolicyServer.

Y

module

Der Standort der Admission Controller Richtlinie. Die folgenden Schemen sind erlaubt:

N

- registry: Richtlinien-Download von einem OCI-Artefakten konformen Container-Registry. Beispiel: registry://<OCI registry/policy URL>

N

- http, https: Richtlinien-Download von einem regulären HTTP(s) Server. Beispiel: https://<website/policy URL>

N

- file: Laden Sie die Richtlinie aus einer Datei im Dateisystem des Computers. Beispiel: file:///<policy WASM binary full path>

Y

resources

Die Kubernetes-Ressourcen, die von der Richtlinie bewertet werden

Y

operations

Welche Vorgänge für die zuvor angegebenen Typen sollten vom API-Server zur Bewertung an diese Zulassungsrichtlinie weitergeleitet werden.

Y

mutating

Setzen Sie diesen booleschen Wert true für Richtlinien, die eingehende Anfragen verändern können.

N

settings

Ein Freiform-Objekt, das die Konfigurationswerte der Richtlinie enthält.

N

failurePolicy

Die Aktion, die zu ergreifen ist, wenn die von einer Richtlinie bewertete Anfrage zu einem Fehler führt. Die folgenden Optionen sind erlaubt:

N

- Ignore: Ignoriere einen Fehler beim Aufruf des Webhooks, und die API-Anfrage wird fortgesetzt.

N

- Fail: Ein Fehler beim Aufruf des Webhooks führt dazu, dass die Zulassung fehlschlägt und die API-Anfrage abgelehnt wird.

Der Controller registriert die ClusterAdmissionPolicy Ressourcen * Webhook scope. Das bedeutet, dass registrierte Webhooks alle Anfragen weiterleiten, die mit dem gegebenen resources und operations übereinstimmen – entweder namespace-gebundene oder clusterweite Ressourcen.

AdmissionPolicy

AdmissionPolicy ist eine namespace-weite Ressource. Die Richtlinie verarbeitet nur die Anfragen, die auf den Namespace mit dem definierten AdmissionPolicy abzielen. Abgesehen davon gibt es keine funktionalen Unterschiede zwischen den AdmissionPolicy und ClusterAdmissionPolicy Ressourcen.

AdmissionPolicy erfordert Kubernetes 1.21.0 oder höher. Das liegt daran, dass Admission Controller das kubernetes.io/metadata.name Label verwendet, das in Kubernetes 1.21.0 eingeführt wurde.

Die vollständige Dokumentation dieser benutzerdefinierten Ressourcen ist hier oder auf docs.crds.dev.

Beispiel: Setzen Sie Ihre erste Richtlinie durch.

Wir werden die pod-privileged Richtlinie verwenden. Wir möchten die Erstellung von privilegierten Containern in unserem Kubernetes-Cluster verhindern, indem wir diese Richtlinie durchsetzen.

Lassen Sie uns eine ClusterAdmissionPolicy definieren, um dies zu erreichen:

kubectl apply -f - <<EOF
apiVersion: policies.kubewarden.io/v1
kind: ClusterAdmissionPolicy
metadata:
  name: privileged-pods
spec:
  module: registry://ghcr.io/kubewarden/policies/pod-privileged:v0.2.2
  rules:
  - apiGroups: [""]
    apiVersions: ["v1"]
    resources: ["pods"]
    operations:
    - CREATE
    - UPDATE
  mutating: false
EOF

Dies erzeugt die folgende Ausgabe:

clusteradmissionpolicy.policies.kubewarden.io/privileged-pods created

Nach der Instanziierung einer ClusterAdmissionPolicy wird der Status pending, und es erzwingt einen Rollout des gezielten PolicyServer. Im Beispiel ist es die PolicyServer mit dem Namen default. Sie können den Rollout überwachen, indem Sie den folgenden Befehl ausführen:

kubectl get clusteradmissionpolicy.policies.kubewarden.io/privileged-pods

Sie sollten die folgende Ausgabe sehen:

NAME              POLICY SERVER   MUTATING   STATUS
privileged-pods   default         false      pending

Sobald die neue Richtlinie bereit ist, registriert die kubewarden-controller ein ValidatingWebhookConfiguration Objekt, um sie bereitzustellen.

Der ClusterAdmissionPolicy Status wird active, sobald die Implementierung für jede PolicyServer Instanz abgeschlossen ist. Zeigen Sie ValidatingWebhookConfigurations mit folgendem Befehl an:

kubectl get validatingwebhookconfigurations.admissionregistration.k8s.io -l kubewarden

Sie sollten die folgende Ausgabe sehen:

NAME                          WEBHOOKS   AGE
clusterwide-privileged-pods   1          9s

Sobald der ClusterAdmissionPolicy aktiv ist und der ValidatingWebhookConfiguration registriert ist, können Sie die Richtlinie testen.

Zuerst können Sie einen Pod mit einem Container not im privileged-Modus erstellen:

kubectl apply -f - <<EOF
apiVersion: v1
kind: Pod
metadata:
  name: unprivileged-pod
spec:
  containers:
    - name: nginx
      image: nginx:latest
EOF

Dies erzeugt die folgende Ausgabe:

pod/unprivileged-pod created

Der Pod wurde erfolgreich erstellt.

Jetzt können Sie einen Pod mit mindestens einem Container privileged Flag erstellen:

kubectl apply -f - <<EOF
apiVersion: v1
kind: Pod
metadata:
  name: privileged-pod
spec:
  containers:
    - name: nginx
      image: nginx:latest
      securityContext:
          privileged: true
EOF

Die Richtlinie verweigert die Erstellung des Pods und Sie sollten die folgende Nachricht sehen:

Error from server: error when creating "STDIN": admission webhook "clusterwide-privileged-pods.kubewarden.admission" denied the request: Privileged container is not allowed

Beide Beispiele haben kein namespace definiert, was bedeutet, dass der default Namespace das Ziel war. Wie Sie im zweiten Beispiel sehen konnten, wird die Richtlinie dennoch angewendet. Wie bereits erwähnt, liegt das daran, dass der Geltungsbereich clusterweit ist und nicht auf einen bestimmten Namespace abzielt.

Deinstallieren

Sie können die Ressourcen entfernen, die durch das Deinstallieren der helm Charts erstellt wurden, wie folgt:

helm uninstall --namespace kubewarden kubewarden-defaults
helm uninstall --namespace kubewarden kubewarden-controller
helm uninstall --namespace kubewarden kubewarden-crds

Nach der Entfernung der helm Charts entfernen Sie den Kubernetes-Namespace, der zum Bereitstellen des Admission Controller Stacks verwendet wurde:

kubectl delete namespace kubewarden

Admission Controller enthält einen Helm-Vorab-Lösch-Hook, der alle PolicyServer`s und `kubewarden-controller`s entfernt. Dann löscht der `kubewarden-controller alle Ressourcen, daher ist es wichtig, dass kubewarden-controller läuft, wenn helm uninstall ausgeführt wird.

Admission Controller löscht ValidatingWebhookConfigurations und MutatingWebhookConfigurations. Überprüfen Sie dies mit:

kubectl get validatingwebhookconfigurations.admissionregistration.k8s.io -l "kubewarden"
kubectl get mutatingwebhookconfigurations.admissionregistration.k8s.io -l "kubewarden"

Wenn diese Ressourcen nicht automatisch entfernt werden, entfernen Sie sie manuell mit dem folgenden Befehl:

kubectl delete -l "kubewarden" validatingwebhookconfigurations.admissionregistration.k8s.io
kubectl delete -l "kubewarden" mutatingwebhookconfigurations.admissionregistration.k8s.io

Zusammenfassung

ClusterAdmissionPolicy ist die Kernel-Ressource, die ein Cluster-Operator verwalten muss. Das kubewarden-controller Modul kümmert sich automatisch um die Konfiguration der restlichen Ressourcen, die benötigt werden, um die Richtlinien auszuführen.

Weitere Schritte

Jetzt sind Sie bereit, Admission Controller bereitzustellen! Werfen Sie einen Blick auf die Richtlinien auf artifacthub.io, auf GitHub oder verwenden Sie vorhandene Rego-Richtlinien, wie in den folgenden Kapiteln gezeigt.

Vollständige Liste der verfügbaren Richtlinien auf ArtifactHub