Audit Logging

Audit Logging protokolliert alle Anfragen an den Kubernetes API Server. Die PSKE stellt seit Version 1.35 die Auditing Extension bereit, die über das Shoot-Manifest aktiviert und konfiguriert wird.

Konfiguration im Shoot-Manifest

Die Extension wird unter spec.extensions aktiviert. Gleichzeitig wird das Audit-Backend und die Audit Policy referenziert:

spec:
  extensions:
    - type: auditing
      providerConfig:
        apiVersion: auditing.extensions.gardener.cloud/v1alpha1
        kind: AuditConfiguration
        backends:
          - http:
              url: https://audit-backend.example.com/audit
              tls:
                secretReferenceName: audit-mtls-creds
            deliveryMode: Guaranteed
  resources:
    - name: audit-mtls-creds
      resourceRef:
        apiVersion: v1
        kind: Secret
        name: mtls-credentials
  kubernetes:
    kubeAPIServer:
      auditConfig:
        auditPolicy:
          configMapRef:
            name: audit-policy

Backend-Konfiguration

Audit Events werden vom API Server an einen HTTP(S)-Endpunkt weitergeleitet. Als Backend-Typ wird http unterstützt, der Endpunkt muss HTTPS mit mTLS unterstützen.

FeldTypBeschreibung
http.urlstringHTTPS-URL des Backends
http.tls.secretReferenceNamestringVerweis auf einen Eintrag in spec.resources
http.compressionstringOptional: gzip
deliveryModestringGuaranteed oder BestEffort. Bei mehreren Backends muss genau eines Guaranteed sein.

mTLS-Secret

Das referenzierte Secret muss folgende Felder enthalten:

apiVersion: v1
kind: Secret
metadata:
  name: mtls-credentials
  namespace: garden-<projektname>-<id>
data:
  ca.crt: <base64>    # Optional: Server-Zertifikat validieren
  client.crt: <base64>
  client.key: <base64>

Mehrere Backends

backends:
  - http:
      url: https://primary-backend.example.com/audit
    deliveryMode: Guaranteed
  - http:
      url: https://secondary-backend.example.com/audit
    deliveryMode: BestEffort

Audit Policy

Die Audit Policy definiert, welche API-Anfragen protokolliert werden und in welchem Detailgrad. Sie wird als ConfigMap angelegt und im Shoot-Manifest referenziert.

apiVersion: v1
kind: ConfigMap
metadata:
  name: audit-policy
  namespace: garden-<projektname>-<id>
data:
  policy: |
    apiVersion: audit.k8s.io/v1
    kind: Policy
    rules:
      # Lesende Anfragen auf unkritische Ressourcen nicht protokollieren
      - level: None
        verbs: ["get", "list", "watch"]
        resources:
          - group: ""
            resources: ["endpoints", "services", "configmaps"]

      # Alle anderen Anfragen auf Metadata-Ebene protokollieren
      - level: Metadata

Audit Levels

LevelBeschreibung
NoneNicht protokollieren
MetadataHTTP-Methode, URL, Benutzer, Zeitstempel — kein Body
RequestZusätzlich der Request Body
RequestResponseRequest und Response Body — erzeugt sehr große Datenmengen

Vollständiges Beispiel

Die folgenden drei Ressourcen müssen im Gardener-Projektnamespace (garden-<projektname>-<id>) angelegt werden, bevor die Extension aktiv wird.

Schritt 1 — mTLS-Secret anlegen:

apiVersion: v1
kind: Secret
metadata:
  name: mtls-credentials
  namespace: garden-meinprojekt-abc12
data:
  ca.crt: <base64 PEM CA-Bundle>
  client.crt: <base64 PEM Client-Zertifikat>
  client.key: <base64 PEM Client-Key>

Schritt 2 — Audit Policy als ConfigMap anlegen:

apiVersion: v1
kind: ConfigMap
metadata:
  name: audit-policy
  namespace: garden-meinprojekt-abc12
data:
  policy: |
    apiVersion: audit.k8s.io/v1
    kind: Policy
    rules:
      - level: None
        verbs: ["get", "list", "watch"]
        resources:
          - group: ""
            resources: ["endpoints", "services", "configmaps"]
      - level: Metadata

Schritt 3 — Shoot-Manifest anpassen:

apiVersion: core.gardener.cloud/v1beta1
kind: Shoot
metadata:
  name: mein-cluster
  namespace: garden-meinprojekt-abc12
spec:
  extensions:
    - type: auditing
      providerConfig:
        apiVersion: auditing.extensions.gardener.cloud/v1alpha1
        kind: AuditConfiguration
        backends:
          - http:
              url: https://audit-backend.example.com/audit
              tls:
                secretReferenceName: audit-mtls-creds
            deliveryMode: Guaranteed
  resources:
    - name: audit-mtls-creds
      resourceRef:
        apiVersion: v1
        kind: Secret
        name: mtls-credentials
  kubernetes:
    kubeAPIServer:
      auditConfig:
        auditPolicy:
          configMapRef:
            name: audit-policy

Hinweise

  • Die Audit Policy ConfigMap muss im Gardener-Projektnamespace (garden-<projektname>-<id>) angelegt werden, nicht im Cluster selbst.
  • Der auditlog-forwarder reichert jedes Event mit Gardener-Metadaten an (Shoot-Name, Seed-Name etc.) bevor es ans Backend weitergeleitet wird.
  • Zu ausführliche Policies (RequestResponse auf breiter Basis) können den API Server verlangsamen.
Zuletzt geändert 29.04.2026: Correntcions (d9f3dab)