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
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.
sudo mkdir -p /var/lib/rancher/k3s/server/manifests /var/log/kubernetes/auditVorgehensweise
- Erstellen Sie Ihre Prüfrichtliniendatei und definieren Sie die Richtlinienregeln.
Im folgenden Beispiel werden nur die Erstellungen der Bereitstellung ohne den Hauptteil
request/responseaufgezeichnet:
Weitere Informationen zum Erstellen der Prüfrichtlinie finden Sie in der Dokumentation zuKubernetes.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 - 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.
systemd-Einheitenkonfiguration konfiguriert. - 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
systemdhinzufügen, die Konfiguration erneut laden und den K3s -Service wie folgt erneut starten:- Fügen Sie in der Konfigurationsdatei
k3s.serviceunter dem AbschnittServiceOptionen in der DateiExecStarthinzu:vi /etc/systemd/system/k3s.serviceDie folgenden beiden Optionen sind erforderlich und müssen von
--kube-apiserver-arg=option-name=option-valueübergeben werden:audit-policy-fileist der Pfad der Prüfrichtlinie, wie im ersten Schritt beschrieben.audit-log-pathist der Pfad des Ausgabeprüfprotokolls.
Sie können die folgenden optionalen Argumente verwenden, um die Protokollrotation zu steuern:
audit-log-maxsizeist die maximale Größe in MB vor der Protokollrotation.audit-log-maxbackupist die maximale Anzahl rotierter Protokolle, die aufbewahrt werden.audit-log-maxageist die maximale Anzahl Tage, die alte gewechselte Dateien aufbewahrt werden sollen.
Die folgende Abbildung zeigt ein Beispiel:
- Laden Sie nach Abschluss der
systemd-Einheitenkonfiguration den Service mit den folgenden Befehlen erneut und starten Sie ihn erneut:systemctl daemon-reload systemctl restart k3sDie 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:- Erstellen Sie eine
webhook-Konfigurationsdatei. Diese Datei enthält die Adresse und die Anmeldeinformationen für HTTP -Verbindungen und ähnelt derkubectl-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 EOFWeitere Informationen finden Sie in der Kubernetes -Dokumentation.
- Hängen Sie in der Konfigurationsdatei
k3s.serviceim AbschnittServiceOptionen an die DateiExecStartan:vi /etc/systemd/system/k3s.serviceDie folgenden beiden Optionen sind erforderlich und müssen von
--kube-apiserver-arg=option-name=option-valueübergeben werden:audit-policy-fileist der Pfad der Prüfrichtlinie, wie im ersten Schritt beschrieben.audit-webhook-config-fileist der Pfad derwebhook-Konfiguration, wie im vorherigen Schritt beschrieben.
- Laden Sie nach dem Bearbeiten der
systemd-Einheitenkonfiguration den Service erneut und starten Sie ihn erneut:systemctl daemon-reload systemctl restart k3sDie 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.
- Fügen Sie in der Konfigurationsdatei