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.

Häufige Tasks

Dies beschreibt allgemeine Aufgaben, nachdem Sie installieren SUSE Security Admission Controller in Ihrem Kubernetes-Cluster.

Die einzelnen Aufgaben sind in einer logischen Reihenfolge angeordnet.

Richtlinien testen

Admission Controller verwendet zwei Werkzeuge, um Ihnen zu helfen, Richtlinien zu finden und sie lokal zu testen:

  • Artifact Hub, mit ihrem Paketfilter für Admission Controller Richtlinien

  • kwctl, ein CLI-Tool

Artifact Hub

Artifact Hub stellt von der Community bereitgestellte Richtlinien bereit. Zum Beispiel können Sie Ersatz für die ausgelaufenen Kubernetes Pod-Sicherheitsrichtlinien finden, die von den Admission Controller Entwicklern erstellt wurden.

Wie im Screenshot unten gezeigt, wählen Sie, sobald Sie eine interessante Richtlinie gefunden haben, die Install Schaltfläche und verwenden Sie kwctl, um die Richtlinie für Ihr Cluster abzurufen.

Artifact Hub

Früher konnten Admission Controller Richtlinien im Admission Controller Policy Hub gefunden werden. Dies wurde eingestellt. Richtlinien sind jetzt verfügbar von https://artifacthub.io.

kwctl CLI-Tool

kwctl ist das CLI-Tool von Admission Controller für Richtlinienautoren und Cluster-Administratoren, um Richtlinien vor der Anwendung in einem Kubernetes-Cluster zu testen.

Dieses Tool hat eine ähnliche Benutzeroberfläche wie das docker CLI-Tool.

Einsatzbereiche

Sie können kwctl in diesen Szenarien verwenden:

Als Autor von Richtlinien

  • End-to-End-Tests Ihrer Richtlinie: Testen Sie Ihre Richtlinie gegen erstellte Kubernetes-Anfragen und stellen Sie sicher, dass sich Ihre Richtlinie wie erwartet verhält. Sie können sogar kontextabhängige Richtlinien testen, die Zugriff auf einen laufenden Cluster erfordern.

  • Metadaten in Ihr Wasm-Modul einbetten: Die Binärdatei enthält Annotationen der Berechtigungen, die zum Ausführen benötigt werden. Sie können diese Annotationen mit kwctl inspizieren und ändern.

  • Richtlinien in OCI-Registries veröffentlichen: Die Binärdatei ist ein vollständig konformes OCI-Objekt und kann in OCI-Registries gespeichert werden.

Als Clusteradministrator

  • Remote-Richtlinien inspizieren: Gegeben eine Richtlinie in einer OCI-Registry oder auf einem HTTP-Server, zeigen Sie alle statischen Informationen über die Richtlinie an.

  • Trockenlauf einer Richtlinie in Ihrem Cluster: Testen Sie die Richtlinie gegen erstellte Kubernetes-Anfragen und stellen Sie sicher, dass sich die Richtlinie wie erwartet verhält, basierend auf den von Ihnen bereitgestellten Eingabedaten. Sie können auch kontextabhängige Richtlinien testen, die im Trockenlaufmodus Zugriff auf einen laufenden Cluster erfordern.

  • Erzeugen Sie das anfängliche ClusterAdmissionPolicy Gerüst für Ihre Richtlinie: Erzeugen Sie eine YAML Datei mit allen erforderlichen Einstellungen, die auf Ihren Kubernetes-Cluster mit kubectl angewendet werden können.

Installation

kwctl Binärdateien für die stabilen Versionen sind im GitHub-Repository verfügbar. Um kwctl aus dem GitHub Repo zu erstellen, benötigen Sie eine Rust Entwicklungsumgebung.

Verwendung

Sie können alle kwctl Optionen und Unterbefehle auflisten, indem Sie den folgenden Befehl ausführen:

$ kwctl --help
kwctl 0.2.5
Admission Controller Developers <cncf-kubewarden-maintainers@lists.cncf.io>
Tool to manage Admission Controller policies

USAGE:
    kwctl [OPTIONS] <SUBCOMMAND>

OPTIONS:
    -h, --help       Print help information
    -v               Increase verbosity
    -V, --version    Print version information

SUBCOMMANDS:
    annotate       Add Admission Controller metadata to a WebAssembly module
    completions    Generate shell completions
    digest         Fetch the digest of its OCI manifest
    help           Print this message or the help of the given subcommand(s)
    inspect        Inspect Admission Controller policy
    policies       Lists all downloaded policies
    pull           Pulls a Admission Controller policy from a given URI
    push           Pushes a Admission Controller policy to an OCI registry
    rm             Removes a Admission Controller policy from the store
    run            Runs a Admission Controller policy from a given URI
    scaffold       Scaffold a Kubernetes resource or configuration file
    verify         Verify a Admission Controller policy from a given URI using Sigstore

Hier sind einige Beispiele für die Verwendung von Befehlen:

  • Listen Sie die Richtlinien: listet alle in der lokalen kwctl registrierten Richtlinien auf

    • Befehl: kwctl policies

  • Erhalten Sie die Richtlinie: laden Sie die Richtlinie herunter und speichern Sie sie im lokalen kwctl Speicher

    • Befehl: kwctl pull <policy URI>

      $ kwctl pull registry://ghcr.io/kubewarden/policies/pod-privileged:v0.1.9
      
      $ kwctl policies
      +--------------------------------------------------------------+----------+---------------+--------------+----------+
      | Policy                                                       | Mutating | Context aware | SHA-256      | Size     |
      +--------------------------------------------------------------+----------+---------------+--------------+----------+
      | registry://ghcr.io/kubewarden/policies/pod-privileged:v0.1.9 | no       | no            | 59e34f482b40 | 21.86 kB |
      +--------------------------------------------------------------+----------+---------------+--------------+----------+
  • Verstehen Sie, wie die Richtlinie funktioniert: überprüfen Sie die Metadaten der Richtlinie

    • Befehl: kwctl inspect <policy URI>

        $ kwctl inspect registry://ghcr.io/kubewarden/policies/pod-privileged:v0.1.9
        Details
        title:              pod-privileged
        description:        Limit the ability to create privileged containers
        author:             Flavio Castelli
        url:                https://github.com/kubewarden/pod-privileged-policy
        source:             https://github.com/kubewarden/pod-privileged-policy
        license:            Apache-2.0
        mutating:           false
        context aware:      false
        execution mode:     kubewarden-wapc
        protocol version:   1
      
        Annotations
        io.kubewarden.kwctl 0.1.9
      
        Rules
        ────────────────────
        ---
        - apiGroups:
            - ""
          apiVersions:
            - v1
          resources:
            - pods
          operations:
            - CREATE
        ────────────────────
      
        Usage
        This policy doesn't have a configuration. Once enforced, it will reject
        the creation of Pods that have at least a privileged container defined.
  • Bewerten Sie die Richtlinie: Bewerten Sie die Richtlinie und finden Sie, falls verfügbar, die richtigen Konfigurationswerte, um Ihren Anforderungen gerecht zu werden.

    Sie benötigen etwas Vertrautheit mit den Kubernetes REST APIs.

    • Befehl: kwctl run -r <"Kubernetes Admission request" file path> -s <"JSON document" file path> <policy URI>

    • Szenario 1:

      • Anfrage zur Bewertung: Erstellen Sie einen Pod ohne 'privilegierten' Container

        $ kwctl run registry://ghcr.io/kubewarden/policies/pod-privileged:v0.1.9 -r unprivileged-pod-request.json
        {"uid":"C6E115F4-A789-49F8-B0C9-7F84C5961FDE","allowed":true,"status":{"message":""}}
      • Entsprechender Befehl mit der heruntergeladenen Richtlinien-Binärdatei:

        `$ kwctl run file://$PWD/pod-privileged-policy.wasm -r unprivileged-pod-request.json
        {"uid":"C6E115F4-A789-49F8-B0C9-7F84C5961FDE","allowed":true,"status":{"message":""}}
      • Ergebnis: Die Richtlinie erlaubt die Anfrage

    • Szenario 2:

      • Anfrage zur Bewertung: Erstellen Sie einen Pod mit mindestens einem 'privilegierten' Container

      • Befehl:

        kwctl run registry://ghcr.io/kubewarden/policies/pod-privileged:v0.1.9 -r privileged-pod-request.json
      • Entsprechender Befehl mit der heruntergeladenen Richtlinien-Binärdatei: kwctl run file://$PWD/pod-privileged-policy.wasm -r privileged-pod-request.json

      • Ausgabe:

        {
          "uid": "8EE6AF8C-C8C8-45B0-9A86-CB52A70EC50D",
          "allowed": false,
          "status": { "message": "User 'kubernetes-admin' cannot schedule privileged containers" }
        }
      • Ergebnis: Die Richtlinie verweigert die Anfrage

    Für komplexere Beispiele siehe den Blogbeitrag Einführung von kwctl für Kubernetes-Administratoren.

Richtlinien durchsetzen

Sie setzen eine Richtlinie durch, indem Sie eine ClusterAdmissionPolicy definieren und sie dann mit kubectl in Ihrem Cluster bereitstellen.

kwctl hilft, eine ClusterAdmissionPolicy aus der Richtlinie zu generieren, die Sie durchsetzen möchten.

Nachdem Sie die ClusterAdmissionPolicy generiert und auf Ihren Cluster angewendet haben, können Sie die unten beschriebenen Schritte im Kurzanleitung befolgen:

  • Generieren Sie die ClusterAdmissionPolicy aus der Richtlinie manifest und speichern Sie sie in einer Datei.

    • Befehl: kwctl scaffold manifest -t ClusterAdmissionPolicy <policy URI> > <"policy name".yaml>

      $ kwctl scaffold manifest -t ClusterAdmissionPolicy registry://ghcr.io/kubewarden/policies/pod-privileged:v0.1.9
      ---
      apiVersion: policies.kubewarden.io/v1alpha2
      kind: ClusterAdmissionPolicy
      metadata:
        name: privileged-pods
      spec:
        module: "registry://ghcr.io/kubewarden/policies/pod-privileged:v0.1.9"
        settings: {}
        rules:
          - apiGroups:
              - ""
            apiVersions:
              - v1
            resources:
              - pods
            operations:
              - CREATE
        mutating: false

    Standardmäßig ist der name Wert auf generated-policy festgelegt. Sie möchten es möglicherweise bearbeiten, bevor Sie die ClusterAdmissionPolicy bereitstellen. Der Name im vorherigen Beispiel ist auf privileged-pods festgelegt.

  • Stellen Sie die ClusterAdmissionPolicy in Ihrem Kubernetes-Cluster bereit.

    • Befehl: kubectl apply -f <"policy name".yaml>

      $ kubectl apply -f pod-privileged-policy.yaml
      clusteradmissionpolicy.policies.kubewarden.io/privileged-pods created

Nach der Bereitstellung der ClusterAdmissionPolicy werden alle an Ihren Cluster gesendeten Anfragen von der Richtlinie bewertet, ob sie im Geltungsbereich der Richtlinie liegen.

Nächste Schritte