|
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. |
Richtliniengruppen
Die Funktion der Richtliniengruppe ermöglicht es Benutzern, komplexe Richtlinien zu erstellen, indem sie einfachere kombinieren. Es werden zwei neue benutzerdefinierte Ressourcenbeschreibungen (CRDs) eingeführt:
-
AdmissionPolicyGroup: für Zulassungsrichtlinien, die auf bestimmte Namespaces angewendet werden. -
ClusterAdmissionPolicyGroup: für Zulassungsrichtlinien, die im gesamten Cluster gelten.
Diese Richtliniengruppen ermöglichen es Benutzern, vorhandene Richtlinien zu verwenden, wodurch der Bedarf an der Erstellung benutzerdefinierter Richtlinien verringert und die Wiederverwendbarkeit erhöht wird. Durch die Vermeidung von Duplizierung der Richtlinienlogik können Benutzer das Management vereinfachen und benutzerdefinierte Richtlinien mit einer DSL-ähnlichen Konfiguration erstellen.
Richtliniengruppen ermöglichen die kombinierte Bewertung mehrerer Richtlinien unter Verwendung logischer Operatoren. Dies erlaubt die Definition komplexer Logik. Allerdings können gewöhnliche Richtlinien Mutationslogik enthalten, um Ressourcen während der Zulassung zu ändern, während Richtliniengruppen nur validieren.
Die Konfiguration für Richtliniengruppen ist ähnlich wie die von gewöhnlichen Richtlinien. Der Unterschied besteht in der Hinzufügung der Felder expression, message und policies sowie der Deklaration kontextabhängiger Regeln an einem anderen Ort.
Dies ist ein Beispiel für ein ClusterAdmissionPolicyGroup, das Sie in den nächsten Abschnitten verwenden können, um die verschiedenen Felder zu erklären:
Ein ClusterAdmissionPolicyGroup, das Pods ablehnt, die Bilder mit dem latest-Tag verwenden, es sei denn, die Bilder sind von zwei vertrauenswürdigen Parteien signiert: Alice und Bob.
apiVersion: policies.kubewarden.io/v1
kind: ClusterAdmissionPolicyGroup # or AdmissionPolicyGroup
metadata:
name: demo
spec:
rules:
- apiGroups: [""]
apiVersions: ["v1"]
resources: ["pods"]
operations:
- CREATE
- UPDATE
policies:
signed_by_alice:
module: ghcr.io/kubewarden/policies/verify-image-signatures:v0.3.0
settings:
modifyImagesWithDigest: false
signatures:
- image: "*"
pubKeys:
- |
-----BEGIN PUBLIC KEY-----
MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEyg65hiNHt8FXTamzCn34IE3qMGcV
yQz3gPlhoKq3yqa1GIofcgLjUZtcKlUSVAU2/S5gXqyDnsW6466Jx/ZVlg==
-----END PUBLIC KEY-----
signed_by_bob:
module: ghcr.io/kubewarden/policies/verify-image-signatures:v0.3.0
settings:
modifyImagesWithDigest: false
signatures:
- image: "*"
pubKeys:
- |
-----BEGIN PUBLIC KEY-----
MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEswA3Ec4w1ErOpeLPfCdkrh8jvk3X
urm8ZrXi4S3an70k8bf1OlGnI/aHCcGleewHbBk1iByySMwr8BabchXGSg==
-----END PUBLIC KEY-----
reject_latest:
module: registry://ghcr.io/kubewarden/policies/trusted-repos:v0.2.0
settings:
tags:
reject:
- latest
expression: "reject_latest() || (signed_by_alice() && signed_by_bob())"
message: "the image is using the latest tag or is not signed by Alice and Bob"
Hauptkonfigurationsfelder
Dieser Abschnitt behandelt die Hauptkonfigurationsfelder einer Richtliniengruppe.
Das Attribut policies
Das Feld für Richtlinien ist eine Zuordnung gewöhnlicher Richtlinien. SUSE Security Admission Controller ruft Richtlinien durch die Richtliniengruppe auf, um zu bestimmen, ob die Ressource, die bewertet wird, akzeptiert oder abgelehnt wird. Die Definitionen dieser Richtlinien sind eine vereinfachte Version von gewöhnlichen Admission Controller Richtlinien, die nur die Attribute module, settings und contextAwareResources enthalten. Diese Elemente sind notwendig, damit die Richtlinien innerhalb einer Richtliniengruppe funktionieren.
Ein einzigartiger Name identifiziert jede Richtlinie der Richtliniengruppe. Zum Beispiel definiert der folgende Ausschnitt drei Richtlinien: signed_by_alice, signed_by_bob und reject_latest_tag.
policies:
signed_by_alice:
module: ghcr.io/kubewarden/policies/verify-image-signatures:v0.2.8
settings: {} # settings for the policy
signed_by_bob:
module: ghcr.io/kubewarden/policies/verify-image-signatures:v0.2.8
settings: {} # settings for the policy
reject_latest_tag:
module: ghcr.io/kubewarden/policies/trusted-repos-policy:v0.2.0
settings: {} # settings for the policy
|
Eine Richtliniengruppe kann dieselbe Richtlinie mehrfach mit unterschiedlichen Einstellungen enthalten. |
Das Attribut expression
Das expression Attribut enthält eine Aussage, die aus den Richtlinienidentifikatoren besteht, die durch logische Operatoren verbunden sind.
Die Auswertung der expression Aussage muss zu einem booleschen Wert führen.
Die Darstellung der Richtlinien erfolgt als Funktion, die nach dem im .spec.policies Map angegebenen Identifikator benannt ist. Die Ergebnisse, die durch die Auswertung der Richtlinien erzeugt werden, werden dann unter Verwendung der vom Benutzer bereitgestellten logischen Operatoren ausgewertet.
Dies sind die unterstützten Operatoren:
-
&&: wird verwendet, umANDOperationen durchzuführen. -
||: wird verwendet, umOROperationen durchzuführen. -
!: wird verwendet, umNOTOperationen durchzuführen.
Sie können runde Klammern ( ) verwenden, um die Auswertungsprioritäten zu definieren.
Zum Beispiel, bei dem folgenden Ausdruck:
reject_latest() || (signed_by_alice() && signed_by_bob())
Die Richtlinie lehnt Arbeitslasten ab, die Bilder mit dem latest-Tag verwenden, es sei denn, sowohl Alice als auch Bob haben die Bilder signiert.
Das message Attribut und das Antwortformat
Das message Feld gibt die Nachricht an, die zurückgegeben wird, wenn die Auswertung der expression zu einer Ablehnung führt. Die Antwort enthält die Nachricht zusammen mit den Ergebnissen der individuellen Richtlinenauswertung.
|
Die Auswertung von Richtlinien, die zur Gruppe gehören, erfolgt nur, wenn es notwendig ist. Zum Beispiel, bei dem folgenden Ausdruck:
Die In ähnlicher Weise wird die Dies vermeidet unnötige Auswertungen von Richtlinien in der Gruppe und ermöglicht schnelle Antworten auf die Zulassungsanfragen. |
Das System sendet alle Bewertungsdetails der Richtliniengruppen als Teil der Zulassungsantwort .status.details.causes, wenn eine Richtliniengruppe eine Ablehnung vornimmt.
Sie können die vollständigen Details einer abgelehnten Zulassungsanfrage erhalten, indem Sie das Verbosity-Level von kubectl erhöhen:
kubectl -v4 apply -f signed-pod.yml
I0919 18:29:40.251332 4330 helpers.go:246] server response object: [{
"kind": "Status",
"apiVersion": "v1",
"metadata": {},
"status": "Failure",
"message": "error when creating \"signed-pod.yml\": admission webhook \"clusterwide-demo.kubewarden.admission\" denied the request: the image is using the latest tag or is not signed by Alice and Bob",
"details": {
"causes": [
{
"message": "Resource signed is not accepted: verification of image testing.registry.svc.lan/busybox:latest failed: Host error: Callback evaluation failure: Image verification failed: missing signatures\nThe following constraints were not satisfied:\nkind: pubKey\nowner: null\nkey: |\n -----BEGIN PUBLIC KEY-----\n MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEswA3Ec4w1ErOpeLPfCdkrh8jvk3X\n urm8ZrXi4S3an70k8bf1OlGnI/aHCcGleewHbBk1iByySMwr8BabchXGSg==\n -----END PUBLIC KEY-----\nannotations: null\n",
"field": "spec.policies.signed_by_bob"
},
{
"message": "not allowed, reported errors: tags not allowed: latest",
"field": "spec.policies.reject_latest"
}
]
},
"code": 400
}]
Error from server: error when creating "signed-pod.yml": admission webhook "clusterwide-demo.kubewarden.admission" denied the request: the image is using the latest tag or is not signed by Alice and Bob
Die vollständige Zulassungsantwort ist in den Protokollen des Richtlinienservers verfügbar, wenn dieser im Debug-Modus läuft. Darüber hinaus sind die Bewertungsdetails immer Teil der von des Richtlinienservers ausgegebenen OpenTelemetry-Traces.
Kontextabhängige Richtlinien
Ein weiterer Unterschied zwischen Richtliniengruppen und gewöhnlichen Richtlinien ist der Standort der Definition kontextabhängiger Ressourcenregeln. Jede Richtlinie in einer Richtliniengruppe akzeptiert ein optionales contextAwareResources-Feld, um die Ressourcen anzugeben, auf die die Richtlinie während der Bewertung zugreifen kann. Ähnlich wie bei gewöhnlichen Richtlinien können Sie kontextabhängige Funktionen nur nutzen, indem Sie eine ClusterAdmissionPolicyGroup definieren. Dies geschieht aus Sicherheitsgründen, da nur unprivilegierte Benutzer AdmissionPolicyGroup-Ressourcen bereitstellen können. Für weitere Details siehe die Dokumentation zu den kontextabhängigen Richtlinien.
Ein Beispiel für eine Richtliniengruppe, die eine kontextabhängige Richtlinie verwendet.
apiVersion: policies.kubewarden.io/v1
kind: ClusterAdmissionPolicyGroup # or AdmissionPolicyGroup
metadata:
name: demo-ctx-aware
spec:
rules:
- apiGroups:
- ""
apiVersions:
- v1
resources:
- services
operations:
- CREATE
- UPDATE
policies:
unique_service_selector:
module: registry://ghcr.io/kubewarden/policies/unique-service-selector-policy:v0.1.0
contextAwareResources:
- apiVersion: v1
kind: Service
settings:
app.kubernetes.io/name: MyApp
owned_by_foo_team:
module: registry://ghcr.io/kubewarden/policies/safe-annotations:v0.2.9
settings:
mandatory_annotations:
- owner
constrained_annotations:
owner: "foo-team"
expression: "unique_service_selector() || (!unique_service_selector() && owned_by_foo_team())"
message: "the service selector is not unique or the service is not owned by the foo team"
Im vorherigen Beispiel kann die unique_service_selector-Richtlinie auf die Service-Ressource zugreifen. Die owned_by_foo_team hat jedoch keinen Zugriff auf Kubernetes-Ressourcen.
Validierung der Einstellungen
Wenn der Richtlinienserver startet, validiert er die Einstellungen sowohl der Richtliniengruppen als auch der gewöhnlichen Richtlinien. Die Richtliniengruppen durchlaufen jedoch einen zusätzlichen Validierungsschritt, um zu überprüfen, ob der Ausdruck gültig ist und zu einem booleschen Wert evaluiert.
Audit-Scanner
Ähnlich wie bei den AdmissionPolicy- und ClusterAdmissionPolicy-CRDs gibt das backgroundAudit-Feld an, ob die Richtliniengruppe während der Audit-Prüfungen einbezogen werden soll.
Richtlinienserver
Sie können die policies.yml-Einstellungsdatei erweitern, um Richtliniengruppen neben gewöhnlichen Richtlinien einzuschließen. Wie bei gewöhnlichen Richtlinien erfolgt der Download von Modulen einmalig. Sie verwenden dasselbe Richtlinienmodul sowohl in einer Richtliniengruppe als auch in einer gewöhnlichen Richtlinie.