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
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.
sudo mkdir -p /var/lib/rancher/k3s/server/manifests /var/log/kubernetes/auditProcedura
- 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:
Per ulteriori informazioni su come creare la politica di verifica, consulta la documentazione diKubernetes.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 - 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.
systemd. - 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:- Nel file di configurazione
k3s.service, nella sezioneService, aggiungere le opzioni inExecStart:vi /etc/systemd/system/k3s.serviceLe 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:
- Dopo aver completato la configurazione dell'unità
systemd, ricaricare e riavviare il servizio utilizzando i seguenti comandi:systemctl daemon-reload systemctl restart k3sGli 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:- Creare un file di configurazione
webhook. Questo file contiene l'indirizzo e le credenziali per le connessioni HTTP ed è simile alla configurazionekubectlin $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 EOFPer ulteriori informazioni, consulta la documentazione diKubernetes.
- Nel file di configurazione
k3s.service, nella sezioneService, aggiungere le opzioni inExecStart:vi /etc/systemd/system/k3s.serviceLe 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 configurazionewebhook, come descritto nel passo precedente.
- Dopo aver modificato la configurazione unità
systemd, ricaricare e riavviare il servizio:systemctl daemon-reload systemctl restart k3sGli 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.
- Nel file di configurazione