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

Aby można było włączyć kontrolę K3s , produkt Edge Gateway musi być w wersji 1.8.1 lub nowszej.

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.
Wszystkie dodatkowe konfiguracje są tworzone w obszarze /var/lib/rancher/k3s/server/manifests/ , a dzienniki są wyprowadzane do produktu /var/log/kubernetes/audit/ w następujący sposób:
sudo mkdir -p /var/lib/rancher/k3s/server/manifests /var/log/kubernetes/audit

Procedura

  1. 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 :

    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
    Więcej informacji na temat sposobu tworzenia strategii kontroli zawiera dokumentacja Kubernetes.
  2. 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.
    Konfiguracja zaplecza jest skonfigurowana w konfiguracji jednostki K3s’ systemd .
  3. 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:
    1. W pliku konfiguracyjnym k3s.service , w sekcji Service , dodaj opcje w ExecStart:
      vi /etc/systemd/system/k3s.service

      Następujące dwie opcje są wymagane i oba muszą być przekazywane przez produkt --kube-apiserver-arg=option-name=option-value:

      • audit-policy-file jest ścieżką strategii kontroli, zgodnie z opisem w pierwszym kroku.

      • audit-log-path jest ścieżką do wyjściowego dziennika kontroli.

      Aby sterować rotacją dziennika, można użyć następujących opcjonalnych argumentów:

      • audit-log-maxsize to maksymalna wielkość (w MB) przed rotacją dziennika.
      • audit-log-maxbackup to maksymalna liczba zatrzymanych dzienników rotaowanych.
      • audit-log-maxage to maksymalna liczba dni przechowywania starych, rotaowanych plików.
      Na poniższym rysunku przedstawiono przykład:
    2. Po zakończeniu konfigurowania jednostki systemd przeładuj i zrestartuj usługę, korzystając z następujących komend:
      systemctl daemon-reload
      systemctl restart k3s
      Wyjś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:
    1. Utwórz plik konfiguracyjny webhook . Ten plik zawiera adres i informacje autoryzacyjne dla połączeń HTTP i jest podobny do konfiguracji produktu kubectl w 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
      EOF

      Więcej informacji na ten temat zawiera publikacja Dokumentacja produktu Kubernetes.

    2. W pliku konfiguracyjnym k3s.service , w sekcji Service , dodaj opcje w ExecStart:
      vi /etc/systemd/system/k3s.service

      Następujące dwie opcje są wymagane i oba muszą być przekazywane przez produkt --kube-apiserver-arg=option-name=option-value:

      • audit-policy-file jest ścieżką strategii kontroli, zgodnie z opisem w pierwszym kroku.

      • audit-webhook-config-file jest ścieżką do konfiguracji webhook , zgodnie z opisem w poprzednim kroku.
    3. Po zakończeniu edycji konfiguracji jednostki systemd przeładuj i zrestartuj usługę:
      systemctl daemon-reload
      systemctl restart k3s

      Wyjś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.