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

Aby włączyć kontrolę K3s , 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, w którym są rejestrowane zdarzenia.
  • Konfiguracja zaplecza kontroli do gromadzenia i zapisywania dzienników.
Wszystkie dodatkowe konfiguracje są tworzone w katalogu /var/lib/rancher/k3s/server/manifests/ , a dzienniki są zapisywane w katalogu /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 tworzenia wdrożenia 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 tworzenia strategii kontroli zawiera dokumentacja systemuKubernetes.
  2. 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.
    Zaplecze jest skonfigurowane w konfiguracji jednostki K3s’ systemd .
  3. 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:
    1. W pliku konfiguracyjnym k3s.service w sekcji Service dodaj opcje w pliku ExecStart:
      vi /etc/systemd/system/k3s.service

      Następujące dwie opcje są wymagane i obie muszą zostać przekazane przez --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ą wyjściowego dziennika kontroli.

      Do sterowania 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 przechowywanych dzienników poddanych rotacji.
      • audit-log-maxage : maksymalna liczba dni przechowywania starych plików podlegających rotacji.
      Poniższy rysunek przedstawia przykład:
      przykład argumentów wiersza komend
    2. Po zakończeniu konfigurowania jednostki systemd przeładuj i zrestartuj usługę za pomocą następujących komend:
      systemctl daemon-reload &&
      systemctl restart k3s
      Wyjś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:
    1. Utwórz plik konfiguracyjny webhook . Ten plik zawiera adres i informacje autoryzacyjne dla połączeń HTTP i jest podobny do konfiguracji kubectl w 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
      EOF

      Więcej informacji na ten temat zawiera dokumentacja systemuKubernetes.

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

      Następujące dwie opcje są wymagane i obie muszą zostać przekazane przez --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ą konfiguracji webhook , zgodnie z opisem w poprzednim kroku.
        Przykład opcji wiersza komend opisanych w tekście
    3. Po edycji konfiguracji jednostki systemd przeładuj i zrestartuj usługę:
      systemctl daemon-reload &&
      systemctl restart k3s

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