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.

Überprüfen Sie die Bilder der Rancher-Anwendungssammlung

Dieser Abschnitt beschreibt, wie man Anwendungen und Bilder aus der Rancher-Anwendungssammlung mit SUSE Security Admission Controller überprüft.

Sie führen die Bildüberprüfung durch, indem Sie die Bildsignaturen überprüfen-Richtlinie bereitstellen und die PolicyServer so konfigurieren, dass sie die Signaturschichten der Bilder aus der Anwendungssammlung abrufen.

Sie benötigen ein Zugriffstoken oder eine Dienstkonto-Authentifizierung für die Anwendungssammlung.

Authentifizierung bei der Rancher-Anwendungssammlung

Befolgen Sie die Dokumentation zur Anwendungssammlung, erstellen Sie ein Zugriffstoken und konfigurieren Sie den Cluster, um aus dem Registry der Anwendungssammlung mit einem Docker Config Secret abzurufen:

$ kubectl create secret docker-registry application-collection \
  --docker-server=dp.apps.rancher.io \
  --docker-username=<mymail> \
  --docker-password=<mytoken>

Erstellen Sie ein Secret für den PolicyServer, damit er aus der Rancher-Anwendungssammlung abrufen kann

Der verwendete PolicyServer benötigt eine Konfiguration, damit er die Bildschichten abrufen kann, die die Signaturen enthalten.

Befolgen Sie die private Registries Anleitung für Policy-Server, um ein Docker Config Secret im PolicyServer-Namespace zu erstellen. Sie tun dies, indem Sie ein Secret mit denselben Inhalten wie das vorherige application-collection instanziieren.

Für den PolicyServer default, installiert mit dem kubewarden-defaults Helm-Chart unter dem kubewarden Namespace, wäre es:

$ kubectl create secret docker-registry application-collection-kw -n kubewarden \
  --docker-server=dp.apps.rancher.io \
  --docker-username=<mymail> \
  --docker-password=<mytoken>

Konfigurieren Sie die PolicyServer, um das neue Secret zu verwenden

Wenn Sie den PolicyServer default aus dem kubewarden-defaults Helm-Chart verwenden, konfigurieren Sie ihn mit dem imagePullSecret application-collection-kw. Dies im selben Namespace und erfolgt durch Setzen der folgenden Werte für das Chart:

$ helm upgrade -i --wait --namespace kubewarden \
  --create-namespace kubewarden-defaults kubewarden/kubewarden-defaults \
  --reuse-values \
  --set policyServer.imagePullSecret=application-collection-kw

Wenn Sie andere PolicyServer verwenden, setzen Sie deren spec.imagePullSecret. Das Secret muss im selben Namespace wie der PolicyServer sein.

Wenden Sie die Richtlinie an.

Sie können eine ClusterAdmissionPolicy anwenden, indem Sie die Bildsignaturen überprüfen Richtlinie nutzen. Diese Richtlinie überprüft alle Containerbilder von dp.apps.rancher.io/containers/*. Die Richtlinie unterstützt OCI-Registries und Artefakte.

Sie können die Richtlinieneinstellungen mit dem öffentlichen Schlüssel aus der Anwendungssammlung (zum Zeitpunkt des Schreibens) im pubKeys Array konfigurieren.

$ kubectl apply -f - <<EOF
apiVersion: policies.kubewarden.io/v1
kind: ClusterAdmissionPolicy
metadata:
  annotations:
    artifacthub/pkg: verify-image-signatures/verify-image-signatures/0.2.9
  name: check-appcollection-signatures
spec:
  backgroundAudit: true
  mode: protect
  module: ghcr.io/kubewarden/policies/verify-image-signatures:v0.2.9
  mutating: true
  policyServer: default
  # On first policy call, the policy-server downloads the image layers to
  # verify the signatures. Later on it's cached. It may be useful to increase
  # this timeout:
  timeoutSeconds: 30 # default 10 seconds.
  rules:
    - apiGroups: [""]
      apiVersions: ["v1"]
      resources: ["pods"]
      operations: ["CREATE", "UPDATE"]
    - apiGroups: [""]
      apiVersions: ["v1"]
      resources: ["replicationcontrollers"]
      operations: ["CREATE", "UPDATE"]
    - apiGroups: ["apps"]
      apiVersions: ["v1"]
      resources: ["deployments", "replicasets", "statefulsets", "daemonsets"]
      operations: ["CREATE", "UPDATE"]
    - apiGroups: ["batch"]
      apiVersions: ["v1"]
      resources: ["jobs", "cronjobs"]
      operations: ["CREATE", "UPDATE"]
  settings:
    modifyImagesWithDigest: true
    rule: PublicKey
    signatures:
      - image: dp.apps.rancher.io/containers/*
        pubKeys:
          # Note: this array constitutes an AND in validation, not an OR.
          - |-
            -----BEGIN PUBLIC KEY-----
            MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA02FtEt5gBywiyxbmkVsb
            CujcBg5lur0kpEbfDk10gCcs9shVEqEO3ZsOXHursgoaDAWqdPtsYhsgczGeJz9w
            Aw+r6BuRV8YOkE37A8s/7IOQUW0tlqtnt11OKhIiZ9+e5l3ed2H1ymKQO3dgreSy
            rShqYdA3hrItswyp41ApF6zhjSPlR6lAmq3X4wMYLAPptmzfxigTnR4hxB5UNPhs
            i2qA4vLrUM/i+NohECuLr1EAymvupH26HLEdM+eZnlQn+WbhIP5Grc4ba7XrBv7K
            kywgTC7CxkiJZR0mUcUD2wTX/Je8Ewj6oPSalx09e2jtzvmU5Kr9XUyMF7Zsj5CA
            IwIDAQAB
            -----END PUBLIC KEY-----
EOF
$ kubectl apply -f mypolicy.yml
$ kubectl get admissionpolicies -n default # wait for status active

Um es zu testen, stellen Sie ein Pod mit einem signierten Bild aus der Anwendungssammlung bereit:

$ kubectl run nginx --image [dp.apps.rancher.io/containers/nginx:1.24.0](http://dp.apps.rancher.io/containers/nginx:1.24.0) --overrides='{"spec": {"imagePullSecrets":[{"name": "application-collection"}]}}'
 pod/nginx created

Sie können die Protokolle Ihres PolicyServer-Pods einsehen, um zu sehen, dass die Überprüfung stattgefunden hat.