Konfigurieren der Prüfprotokollierung

K3s ist eine Kubernetes -Distribution, die Prüfprotokollierung bereitstellt, die standardmäßig inaktiviert ist. Als Administrator können Sie die Prüfprotokollierung im K3s-based IBM® Security Edge Gateway -Cluster aktivieren.

Vorbereitende Schritte

Edge Gateway muss Version 1.8.1 oder höher sein, um die K3s -Prüfung zu aktivieren.

Informationen zu dieser Task

Die Konfiguration, die für die Prüfprotokollierung erforderlich ist:

  • Eine Prüfrichtliniendefinitionsdatei, in der Ereignisse protokolliert werden.
  • Back-End-Prüfkonfiguration zum Erfassen und Speichern der Protokolle.
Alle zusätzlichen Konfigurationen werden unter /var/lib/rancher/k3s/server/manifests/ erstellt und die Protokolle werden wie folgt an /var/log/kubernetes/audit/ ausgegeben:
sudo mkdir -p /var/lib/rancher/k3s/server/manifests /var/log/kubernetes/audit

Vorgehensweise

  1. Erstellen Sie Ihre Prüfrichtliniendatei und definieren Sie die Richtlinienregeln.

    Im folgenden Beispiel werden nur die Erstellungen der Bereitstellung ohne den Hauptteil request/response aufgezeichnet:

    cat >/var/lib/rancher/k3s/server/manifests/policy.yaml <<EOF
    # Log only deployment creations at the Metadata level.
    apiVersion: audit.k8s.io/v1
    kind: Policy
    rules:
      - level: Metadata
        verbs: ["create"]
        resources:
        - group: "apps"
          resources: ["deployments"]
    EOF
    Weitere Informationen zum Erstellen der Prüfrichtlinie finden Sie in der Dokumentation zuKubernetes.
  2. Wählen Sie das gewünschte Audit-Back-End aus den beiden verfügbaren aus:
    • Protokoll-Back-End: Schreibt Ereignisse in das Dateisystem.
    • Webhook-Backend: sendet Ereignisse an eine externe HTTP -API.
    Das Back-End wird in der K3s’ systemd -Einheitenkonfiguration konfiguriert.
  3. Führen Sie abhängig vom verwendeten Audit-Back-End eine der folgenden Prozeduren aus.
    Um die Prüfprotokollierung mit dem lokalen Dateisystemprotokoll-Back-End zu aktivieren, müssen Sie die zugehörigen Konfigurationen den Startargumenten von K3s systemd hinzufügen, die Konfiguration erneut laden und den K3s -Service wie folgt erneut starten:
    1. Fügen Sie in der Konfigurationsdatei k3s.service unter dem Abschnitt Service Optionen in der Datei ExecStarthinzu:
      vi /etc/systemd/system/k3s.service

      Die folgenden beiden Optionen sind erforderlich und müssen von --kube-apiserver-arg=option-name=option-valueübergeben werden:

      • audit-policy-file ist der Pfad der Prüfrichtlinie, wie im ersten Schritt beschrieben.

      • audit-log-path ist der Pfad des Ausgabeprüfprotokolls.

      Sie können die folgenden optionalen Argumente verwenden, um die Protokollrotation zu steuern:

      • audit-log-maxsize ist die maximale Größe in MB vor der Protokollrotation.
      • audit-log-maxbackup ist die maximale Anzahl rotierter Protokolle, die aufbewahrt werden.
      • audit-log-maxage ist die maximale Anzahl Tage, die alte gewechselte Dateien aufbewahrt werden sollen.
      Die folgende Abbildung zeigt ein Beispiel:
    2. Laden Sie nach Abschluss der systemd -Einheitenkonfiguration den Service mit den folgenden Befehlen erneut und starten Sie ihn erneut:
      systemctl daemon-reload
      systemctl restart k3s
      Die Ausgabeprüfungsereignisse werden in JSONline-Dateien an der Position gespeichert, die im Servicestartargument angegeben ist. Das folgende Beispiel zeigt die Ausgabe nach der Paarung eines neuen Edge Gateway mit der in dieser Prozedur beschriebenen Prüfrichtlinie:
      {"kind":"Event","apiVersion":"audit.k8s.io/v1","level":"Metadata","auditID":"b20ac0e0-bd02-4b93-90fd-dd24b73c9330","stage":"RequestReceived","requestURI":"/apis/apps/v1/namespaces/cfd3995c-c011-4e1f-aa05-8c6787d1861b/deployments","verb":"create","user":{"username":"system:admin","groups":["system:masters","system:authenticated"]},"sourceIPs":["127.0.0.1"],"userAgent":"okhttp/3.12.12","objectRef":{"resource":"deployments","namespace":"cfd3995c-c011-4e1f-aa05-8c6787d1861b","apiGroup":"apps","apiVersion":"v1"},"requestReceivedTimestamp":"2022-11-30T07:52:23.440012Z","stageTimestamp":"2022-11-30T07:52:23.440012Z"}
      {"kind":"Event","apiVersion":"audit.k8s.io/v1","level":"Metadata","auditID":"b20ac0e0-bd02-4b93-90fd-dd24b73c9330","stage":"ResponseComplete","requestURI":"/apis/apps/v1/namespaces/cfd3995c-c011-4e1f-aa05-8c6787d1861b/deployments","verb":"create","user":{"username":"system:admin","groups":["system:masters","system:authenticated"]},"sourceIPs":["127.0.0.1"],"userAgent":"okhttp/3.12.12","objectRef":{"resource":"deployments","namespace":"cfd3995c-c011-4e1f-aa05-8c6787d1861b","name":"deployment-synchronizer","apiGroup":"apps","apiVersion":"v1"},"responseStatus":{"metadata":{},"code":201},"requestReceivedTimestamp":"2022-11-30T07:52:23.440012Z","stageTimestamp":"2022-11-30T07:52:23.446914Z","annotations":{"authorization.k8s.io/decision":"allow","authorization.k8s.io/reason":""}}
      {"kind":"Event","apiVersion":"audit.k8s.io/v1","level":"Metadata","auditID":"c10353df-095a-4454-96c5-ca028988911a","stage":"RequestReceived","requestURI":"/apis/apps/v1/namespaces/cfd3995c-c011-4e1f-aa05-8c6787d1861b/deployments","verb":"create","user":{"username":"system:admin","groups":["system:masters","system:authenticated"]},"sourceIPs":["127.0.0.1"],"userAgent":"okhttp/3.12.12","objectRef":{"resource":"deployments","namespace":"cfd3995c-c011-4e1f-aa05-8c6787d1861b","apiGroup":"apps","apiVersion":"v1"},"requestReceivedTimestamp":"2022-11-30T07:52:23.521285Z","stageTimestamp":"2022-11-30T07:52:23.521285Z"}
      {"kind":"Event","apiVersion":"audit.k8s.io/v1","level":"Metadata","auditID":"c10353df-095a-4454-96c5-ca028988911a","stage":"ResponseComplete","requestURI":"/apis/apps/v1/namespaces/cfd3995c-c011-4e1f-aa05-8c6787d1861b/deployments","verb":"create","user":{"username":"system:admin","groups":["system:masters","system:authenticated"]},"sourceIPs":["127.0.0.1"],"userAgent":"okhttp/3.12.12","objectRef":{"resource":"deployments","namespace":"cfd3995c-c011-4e1f-aa05-8c6787d1861b","name":"deployment-operator","apiGroup":"apps","apiVersion":"v1"},"responseStatus":{"metadata":{},"code":201},"requestReceivedTimestamp":"2022-11-30T07:52:23.521285Z","stageTimestamp":"2022-11-30T07:52:23.531923Z","annotations":{"authorization.k8s.io/decision":"allow","authorization.k8s.io/reason":""}}

      Weitere Informationen finden Sie in der Kubernetes -Dokumentation.

    Wenn Sie das ferne Webhook-Protokoll-Back-End verwenden, müssen Sie die Webhook-Konfiguration erstellen, die zugehörigen Konfigurationen wie folgt zu K3s -Systemd-Startargumenten hinzufügen, die Konfiguration erneut laden und den Service K3s erneut starten:
    1. Erstellen Sie eine webhook -Konfigurationsdatei. Diese Datei enthält die Adresse und die Anmeldeinformationen für HTTP -Verbindungen und ähnelt der kubectl -Konfiguration in $HOME/.kube/config. Im folgenden Beispiel wird ein Loopback-Back-End mit Basisauthentifizierung definiert:
      cat >/var/lib/rancher/k3s/server/manifests/webhook.yaml <<EOF
      apiVersion: v1
      kind: Config
      preferences: {}
      
      clusters:
      # address and port of remote server
      - name: example-audit-backend
        cluster:
          server: http://localhost:8888
      
      users:
      # client credential
      - name: example-user
        user:
          username: example-username
          password: example-password
      
      contexts:
      # link the remote server address and credential
      - name: example-context
        context:
          cluster: example-audit-backend
          user: example-user
      current-context: example-context
      EOF

      Weitere Informationen finden Sie in der Kubernetes -Dokumentation.

    2. Hängen Sie in der Konfigurationsdatei k3s.service im Abschnitt Service Optionen an die Datei ExecStartan:
      vi /etc/systemd/system/k3s.service

      Die folgenden beiden Optionen sind erforderlich und müssen von --kube-apiserver-arg=option-name=option-valueübergeben werden:

      • audit-policy-file ist der Pfad der Prüfrichtlinie, wie im ersten Schritt beschrieben.

      • audit-webhook-config-file ist der Pfad der webhook -Konfiguration, wie im vorherigen Schritt beschrieben.
    3. Laden Sie nach dem Bearbeiten der systemd -Einheitenkonfiguration den Service erneut und starten Sie ihn erneut:
      systemctl daemon-reload
      systemctl restart k3s

      Die Ergebnisse der Prüfungsereignisse werden als Listen von JSON-Dateien im HTTP POST-Text gesammelt gesendet. Im Folgenden sehen Sie ein Beispiel für die Ausgabe nach der Paarung einer neuen Edge Gateway mit der Prüfrichtlinie, die in dieser Prozedur beschrieben wird, und dem Anforderungshauptteil webhook :

      {
        "kind":"EventList",
        "apiVersion":"audit.k8s.io/v1",
        "metadata":{},
        "items":
        [
          {"level":"Metadata","auditID":"86fcb3ac-9ae2-4f8f-a102-9efa0747f513","stage":"RequestReceived","requestURI":"/apis/apps/v1/namespaces/cfd3995c-c011-4e1f-aa05-8c6787d1861b/deployments","verb":"create","user":{"username":"system:admin","groups":["system:masters","system:authenticated"]},"sourceIPs":["127.0.0.1"],"userAgent":"okhttp/3.12.12","objectRef":{"resource":"deployments","namespace":"cfd3995c-c011-4e1f-aa05-8c6787d1861b","apiGroup":"apps","apiVersion":"v1"},"requestReceivedTimestamp":"2022-12-02T09:02:10.502140Z","stageTimestamp":"2022-12-02T09:02:10.502140Z"},
          {"level":"Metadata","auditID":"86fcb3ac-9ae2-4f8f-a102-9efa0747f513","stage":"ResponseComplete","requestURI":"/apis/apps/v1/namespaces/cfd3995c-c011-4e1f-aa05-8c6787d1861b/deployments","verb":"create","user":{"username":"system:admin","groups":["system:masters","system:authenticated"]},"sourceIPs":["127.0.0.1"],"userAgent":"okhttp/3.12.12","objectRef":{"resource":"deployments","namespace":"cfd3995c-c011-4e1f-aa05-8c6787d1861b","name":"deployment-synchronizer","apiGroup":"apps","apiVersion":"v1"},"responseStatus":{"metadata":{},"code":201},"requestReceivedTimestamp":"2022-12-02T09:02:10.502140Z","stageTimestamp":"2022-12-02T09:02:10.511688Z","annotations":{"authorization.k8s.io/decision":"allow","authorization.k8s.io/reason":""}},
          {"level":"Metadata","auditID":"4366e4f2-f437-44f7-bc8d-97dec21b54ef","stage":"RequestReceived","requestURI":"/apis/apps/v1/namespaces/cfd3995c-c011-4e1f-aa05-8c6787d1861b/deployments","verb":"create","user":{"username":"system:admin","groups":["system:masters","system:authenticated"]},"sourceIPs":["127.0.0.1"],"userAgent":"okhttp/3.12.12","objectRef":{"resource":"deployments","namespace":"cfd3995c-c011-4e1f-aa05-8c6787d1861b","apiGroup":"apps","apiVersion":"v1"},"requestReceivedTimestamp":"2022-12-02T09:02:10.583000Z","stageTimestamp":"2022-12-02T09:02:10.583000Z"},
          {"level":"Metadata","auditID":"4366e4f2-f437-44f7-bc8d-97dec21b54ef","stage":"ResponseComplete","requestURI":"/apis/apps/v1/namespaces/cfd3995c-c011-4e1f-aa05-8c6787d1861b/deployments","verb":"create","user":{"username":"system:admin","groups":["system:masters","system:authenticated"]},"sourceIPs":["127.0.0.1"],"userAgent":"okhttp/3.12.12","objectRef":{"resource":"deployments","namespace":"cfd3995c-c011-4e1f-aa05-8c6787d1861b","name":"deployment-operator","apiGroup":"apps","apiVersion":"v1"},"responseStatus":{"metadata":{},"code":201},"requestReceivedTimestamp":"2022-12-02T09:02:10.583000Z","stageTimestamp":"2022-12-02T09:02:10.612983Z","annotations":{"authorization.k8s.io/decision":"allow","authorization.k8s.io/reason":""}}
        ]
      }

      Weitere Informationen finden Sie in der Kubernetes -Dokumentation.