Configurazione della registrazione di controllo

K3s è una distribuzione Kubernetes che fornisce la log di verifica, che è disabilitata per impostazione predefinita. Come amministratore, è possibile abilitare la registrazione di controllo sul cluster K3s-based IBM® Security Edge Gateway .

Prima di iniziare

Il tuo Edge Gateway deve essere versione 1.8.1 o successiva per abilitare il controllo K3s .

Informazioni su questa attività

La configurazione richiesta per la registrazione di controllo include:

  • Un file di definizione della politica di controllo, in cui vengono registrati gli eventi.
  • Configurazione di backend di controllo per la raccolta e la memorizzazione dei log.
Tutte le configurazioni aggiuntive vengono create in /var/lib/rancher/k3s/server/manifests/ e i log vengono emessi in /var/log/kubernetes/audit/ come segue:
sudo mkdir -p /var/lib/rancher/k3s/server/manifests /var/log/kubernetes/audit

Procedura

  1. Creare il file della normativa di controllo e definirne le regole.

    Il seguente esempio registra solo le creazioni di distribuzione, senza il body 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
    Per ulteriori informazioni su come creare la politica di verifica, consulta la documentazione diKubernetes.
  2. Scegliere il backend di verifica che si desidera tra i due disponibili:
    • Backend di log: che scrive gli eventi nel filesystem.
    • Backend Webhook: che invia eventi a un'API esterna HTTP.
    Il backend è configurato nella configurazione dell'unità K3s’ systemd .
  3. A seconda del backend di controllo utilizzato, completare una delle seguenti procedure.
    Per abilitare la registrazione di controllo con il backend del file system locale, è necessario aggiungere le configurazioni correlate agli argomenti di avvio K3s systemd , ricaricare la configurazione e riavviare il servizio K3s , nel modo seguente:
    1. Nel file di configurazione k3s.service , nella sezione Service , aggiungere le opzioni in ExecStart:
      vi /etc/systemd/system/k3s.service

      Le seguenti due opzioni sono obbligatorie ed entrambe devono essere inoltrate da --kube-apiserver-arg=option-name=option-value:

      • audit-policy-file è il percorso della politica di verifica, come descritto nel primo passo.

      • audit-log-path è il percorso del log di controllo di output.

      Puoi utilizzare i seguenti argomenti facoltativi per controllare la rotazione del log:

      • audit-log-maxsize è la dimensione massima in MB prima della rotazione del log.
      • audit-log-maxbackup è il numero massimo di log a rotazione conservati.
      • audit-log-maxage è il numero massimo di giorni per cui conservare i vecchi file ruotati.
      Il seguente grafico mostra un esempio:
    2. Dopo aver completato la configurazione dell'unità systemd , ricaricare e riavviare il servizio utilizzando i seguenti comandi:
      systemctl daemon-reload
      systemctl restart k3s
      Gli eventi di controllo di output vengono memorizzati nei file JSONline nell'ubicazione specificata nell'argomento di avvio del servizio. Il seguente esempio mostra l'output dopo l'associazione di un nuovo Edge Gateway con la politica di controllo descritta in questa procedura:
      {"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":""}}

      Per ulteriori informazioni, consulta la documentazione diKubernetes.

    Se si sta utilizzando il backend del log webhook remoto, è necessario creare la configurazione webhook, aggiungere le configurazioni correlate negli argomenti di avvio del sistema K3s , ricaricare la configurazione e riavviare il servizio K3s , come segue:
    1. Creare un file di configurazione webhook . Questo file contiene l'indirizzo e le credenziali per le connessioni HTTP ed è simile alla configurazione kubectl in $HOME/.kube/config. Il seguente esempio definisce un backend di loopback con autenticazione di base:
      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

      Per ulteriori informazioni, consulta la documentazione diKubernetes.

    2. Nel file di configurazione k3s.service , nella sezione Service , aggiungere le opzioni in ExecStart:
      vi /etc/systemd/system/k3s.service

      Le seguenti due opzioni sono obbligatorie ed entrambe devono essere inoltrate da --kube-apiserver-arg=option-name=option-value:

      • audit-policy-file è il percorso della politica di verifica, come descritto nel primo passo.

      • audit-webhook-config-file è il percorso della configurazione webhook , come descritto nel passo precedente.
    3. Dopo aver modificato la configurazione unità systemd , ricaricare e riavviare il servizio:
      systemctl daemon-reload
      systemctl restart k3s

      Gli eventi di audit in uscita verranno inviati in batch come elenchi di JSON in un corpo POST dell' HTTP. Di seguito viene riportato un esempio di output dopo l'associazione di un nuovo Edge Gateway con la politica di controllo descritta in questa procedura e il corpo della richiesta 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":""}}
        ]
      }

      Per ulteriori informazioni, consulta la documentazione diKubernetes.