Konfigurowanie rejestrowania kontroli
K3s jest dystrybucją systemu Kubernetes , która udostępnia rejestrowanie kontroli i jest domyślnie wyłączona. 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, w którym są rejestrowane zdarzenia.
- Konfiguracja zaplecza kontroli do 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 tworzenia wdrożenia bez treści
request/response:
Więcej informacji na temat tworzenia strategii kontroli zawiera dokumentacja systemuKubernetes.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 żądany postprocesor kontroli spośród dwóch dostępnych:
- Postprocesor dziennika: zapisuje zdarzenia w systemie plików.
- Zaplecze haka WWW: wysyła zdarzenia do zewnętrznego interfejsu API HTTP.
systemd. - W zależności od używanego zaplecza kontroli wykonaj jedną z następujących procedur.Aby włączyć rejestrowanie kontroli za pomocą lokalnego zaplecza dziennika systemu plików, należy dodać pokrewne konfiguracje do argumentów początkowych K3s
systemd, przeładować konfigurację i zrestartować usługę K3s w następujący sposób:- W pliku konfiguracyjnym
k3s.servicew sekcjiServicedodaj opcje w plikuExecStart:vi /etc/systemd/system/k3s.serviceNastępujące dwie opcje są wymagane i obie muszą zostać przekazane przez
--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ą wyjściowego dziennika kontroli.
Do sterowania 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 przechowywanych dzienników poddanych rotacji.audit-log-maxage: maksymalna liczba dni przechowywania starych plików podlegających rotacji.
Poniższy rysunek przedstawia przykład:
- Po zakończeniu konfigurowania jednostki
systemdprzeładuj i zrestartuj usługę za pomocą następujących komend:systemctl daemon-reload && systemctl restart k3sWyjściowe zdarzenia kontrolowane są zapisywane w plikach JSONline w położeniu określonym w argumencie uruchamiania usługi. Poniższy przykład przedstawia dane wyjściowe po spasowaniu nowego Edge Gateway ze strategią kontroli opisaną 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 dokumentacja systemuKubernetes.
Jeśli używany jest zdalny serwer zaplecza dziennika haka WWW, należy utworzyć konfigurację haka WWW, dodać pokrewne konfiguracje do argumentów uruchamiania systemd 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 konfiguracjikubectlw pliku $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 dokumentacja systemuKubernetes.
- W pliku konfiguracyjnym
k3s.servicew sekcjiServicedodaj opcje w plikuExecStart:vi /etc/systemd/system/k3s.serviceNastępujące dwie opcje są wymagane i obie muszą zostać przekazane przez
--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ą konfiguracjiwebhook, zgodnie z opisem w poprzednim kroku.
- Po edycji konfiguracji jednostki
systemdprzeładuj i zrestartuj usługę:systemctl daemon-reload && systemctl restart k3sWyjściowe zdarzenia kontrolowane będą wysyłane w trybie wsadowym jako listy JSON w treści żądania HTTP POST. Poniżej przedstawiono przykład danych wyjściowych po spasowaniu nowego Edge Gateway ze strategią kontroli opisaną w tej procedurze i 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 dokumentacja systemuKubernetes.
- W pliku konfiguracyjnym