Konfigurowanie rejestrowania kontroli
K3s to dystrybucja Kubernetes , która udostępnia rejestrowanie kontroli, które domyślnie jest wyłączone. Administrator może włączyć rejestrowanie kontroli w klastrze K3s-based IBM® Security Edge Gateway .
Zanim rozpoczniesz
Informacje o tym zadaniu
Konfiguracja, która jest wymagana do rejestrowania kontroli, obejmuje:
- Plik definicji strategii kontroli, do którego rejestrowane są zdarzenia.
- Kontrola konfiguracji zaplecza dla gromadzenia i zapisywania dzienników.
sudo mkdir -p /var/lib/rancher/k3s/server/manifests /var/log/kubernetes/auditProcedura
- Utwórz plik strategii kontroli i zdefiniuj reguły strategii.
W poniższym przykładzie rejestrowane są tylko kreacje wdrożeniowe, bez treści
request/response:
Więcej informacji na temat sposobu tworzenia strategii kontroli zawiera dokumentacja Kubernetes.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 - Wybierz zaplecze kontroli, które ma być dostępne w dwóch dostępnych:
- Protokół zaplecza: zapisuje zdarzenia w systemie plików.
- Postprocesor Webhook: który wysyła zdarzenia do zewnętrznego interfejsu API HTTP.
systemd. - W zależności od tego, który postprocesor kontroli jest używany, wykonaj jedną z następujących procedur.Aby włączyć rejestrowanie w dzienniku kontroli w lokalnym systemie plików, należy dodać pokrewne konfiguracje do argumentów uruchamiania K3s
systemd, przeładować konfigurację i zrestartować usługę K3s w następujący sposób:- W pliku konfiguracyjnym
k3s.service, w sekcjiService, dodaj opcje wExecStart:vi /etc/systemd/system/k3s.serviceNastępujące dwie opcje są wymagane i oba muszą być przekazywane przez produkt
--kube-apiserver-arg=option-name=option-value:audit-policy-filejest ścieżką strategii kontroli, zgodnie z opisem w pierwszym kroku.audit-log-pathjest ścieżką do wyjściowego dziennika kontroli.
Aby sterować rotacją dziennika, można użyć następujących opcjonalnych argumentów:
audit-log-maxsizeto maksymalna wielkość (w MB) przed rotacją dziennika.audit-log-maxbackupto maksymalna liczba zatrzymanych dzienników rotaowanych.audit-log-maxageto maksymalna liczba dni przechowywania starych, rotaowanych plików.
Na poniższym rysunku przedstawiono przykład:
- Po zakończeniu konfigurowania jednostki
systemdprzeładuj i zrestartuj usługę, korzystając z następujących komend:systemctl daemon-reload systemctl restart k3sWyjściowe zdarzenia kontroli są przechowywane w plikach JSONline w położeniu określonym argumentem uruchamiania usługi. Poniższy przykład przedstawia dane wyjściowe po parowaniu nowego Edge Gateway ze strategią kontroli, która została opisana w tej procedurze:{"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":""}}Więcej informacji na ten temat zawiera publikacja Dokumentacja produktu Kubernetes.
Jeśli używany jest postprocesor dziennika zdalnego webhook, należy utworzyć konfigurację haka WWW, dodać pokrewne konfiguracje do systemowych argumentów K3s , przeładować konfigurację i zrestartować usługę K3s w następujący sposób:- Utwórz plik konfiguracyjny
webhook. Ten plik zawiera adres i informacje autoryzacyjne dla połączeń HTTP i jest podobny do konfiguracji produktukubectlw produkcie $HOME/.kube/config. W poniższym przykładzie zdefiniowano zaplecze pętli zwrotnej z uwierzytelnianiem podstawowym: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 EOFWięcej informacji na ten temat zawiera publikacja Dokumentacja produktu Kubernetes.
- W pliku konfiguracyjnym
k3s.service, w sekcjiService, dodaj opcje wExecStart:vi /etc/systemd/system/k3s.serviceNastępujące dwie opcje są wymagane i oba muszą być przekazywane przez produkt
--kube-apiserver-arg=option-name=option-value:audit-policy-filejest ścieżką strategii kontroli, zgodnie z opisem w pierwszym kroku.audit-webhook-config-filejest ścieżką do konfiguracjiwebhook, zgodnie z opisem w poprzednim kroku.
- Po zakończeniu edycji konfiguracji jednostki
systemdprzeładuj i zrestartuj usługę:systemctl daemon-reload systemctl restart k3sWyjściowe zdarzenia kontroli będą wysyłane w trybie wsadowym jako listy obiektów JSON w treści HTTP POST. Poniżej przedstawiono przykład danych wyjściowych po parowaniu nowego Edge Gateway ze strategią kontroli opisaną w tej procedurze oraz z treścią żądania
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":""}} ] }Więcej informacji na ten temat zawiera publikacja Dokumentacja produktu Kubernetes.
- W pliku konfiguracyjnym