

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

# Controllo e registrazione
<a name="auditing-and-logging"></a>

**Suggerimento**  
 [Esplora le](https://aws-experience.com/emea/smb/events/series/get-hands-on-with-amazon-eks?trk=4a9b4147-2490-4c63-bc9f-f8a84b122c8c&sc_channel=el) best practice tramite i workshop Amazon EKS.

La raccolta e l'analisi dei log [di controllo] è utile per una serie di motivi diversi. I log possono aiutare nell'analisi e nell'attribuzione delle cause principali, ad esempio nell'attribuire una modifica a un particolare utente. Una volta raccolti un numero sufficiente di log, è possibile utilizzarli anche per rilevare comportamenti anomali. Su EKS, i log di controllo vengono inviati ad Amazon Cloudwatch Logs. La politica di audit per EKS è la seguente:

```
apiVersion: audit.k8s.io/v1beta1
kind: Policy
rules:
  # Log full request and response for changes to aws-auth ConfigMap in kube-system namespace
  - level: RequestResponse
    namespaces: ["kube-system"]
    verbs: ["update", "patch", "delete"]
    resources:
      - group: "" # core
        resources: ["configmaps"]
        resourceNames: ["aws-auth"]
    omitStages:
      - "RequestReceived"
  # Do not log watch operations performed by kube-proxy on endpoints and services
  - level: None
    users: ["system:kube-proxy"]
    verbs: ["watch"]
    resources:
      - group: "" # core
        resources: ["endpoints", "services", "services/status"]
  # Do not log get operations performed by kubelet on nodes and their statuses
  - level: None
    users: ["kubelet"] # legacy kubelet identity
    verbs: ["get"]
    resources:
      - group: "" # core
        resources: ["nodes", "nodes/status"]
  # Do not log get operations performed by the system:nodes group on nodes and their statuses
  - level: None
    userGroups: ["system:nodes"]
    verbs: ["get"]
    resources:
      - group: "" # core
        resources: ["nodes", "nodes/status"]
  # Do not log get and update operations performed by controller manager, scheduler, and endpoint-controller on endpoints in kube-system namespace
  - level: None
    users:
      - system:kube-controller-manager
      - system:kube-scheduler
      - system:serviceaccount:kube-system:endpoint-controller
    verbs: ["get", "update"]
    namespaces: ["kube-system"]
    resources:
      - group: "" # core
        resources: ["endpoints"]
  # Do not log get operations performed by apiserver on namespaces and their statuses/finalizations
  - level: None
    users: ["system:apiserver"]
    verbs: ["get"]
    resources:
      - group: "" # core
        resources: ["namespaces", "namespaces/status", "namespaces/finalize"]
  # Do not log get and list operations performed by controller manager on metrics.k8s.io resources
  - level: None
    users:
      - system:kube-controller-manager
    verbs: ["get", "list"]
    resources:
      - group: "metrics.k8s.io"
  # Do not log access to health, version, and swagger non-resource URLs
  - level: None
    nonResourceURLs:
      - /healthz*
      - /version
      - /swagger*
  # Do not log events resources
  - level: None
    resources:
      - group: "" # core
        resources: ["events"]
  # Log request for updates/patches to nodes and pods statuses by kubelet and node problem detector
  - level: Request
    users: ["kubelet", "system:node-problem-detector", "system:serviceaccount:kube-system:node-problem-detector"]
    verbs: ["update", "patch"]
    resources:
      - group: "" # core
        resources: ["nodes/status", "pods/status"]
    omitStages:
      - "RequestReceived"
  # Log request for updates/patches to nodes and pods statuses by system:nodes group
  - level: Request
    userGroups: ["system:nodes"]
    verbs: ["update", "patch"]
    resources:
      - group: "" # core
        resources: ["nodes/status", "pods/status"]
    omitStages:
      - "RequestReceived"
  # Log delete collection requests by namespace-controller in kube-system namespace
  - level: Request
    users: ["system:serviceaccount:kube-system:namespace-controller"]
    verbs: ["deletecollection"]
    omitStages:
      - "RequestReceived"
  # Log metadata for secrets, configmaps, and tokenreviews to protect sensitive data
  - level: Metadata
    resources:
      - group: "" # core
        resources: ["secrets", "configmaps"]
      - group: authentication.k8s.io
        resources: ["tokenreviews"]
    omitStages:
      - "RequestReceived"
  # Log requests for serviceaccounts/token resources
  - level: Request
    resources:
      - group: "" # core
        resources: ["serviceaccounts/token"]
  # Log get, list, and watch requests for various resource groups
  - level: Request
    verbs: ["get", "list", "watch"]
    resources:
      - group: "" # core
      - group: "admissionregistration.k8s.io"
      - group: "apiextensions.k8s.io"
      - group: "apiregistration.k8s.io"
      - group: "apps"
      - group: "authentication.k8s.io"
      - group: "authorization.k8s.io"
      - group: "autoscaling"
      - group: "batch"
      - group: "certificates.k8s.io"
      - group: "extensions"
      - group: "metrics.k8s.io"
      - group: "networking.k8s.io"
      - group: "policy"
      - group: "rbac.authorization.k8s.io"
      - group: "scheduling.k8s.io"
      - group: "settings.k8s.io"
      - group: "storage.k8s.io"
    omitStages:
      - "RequestReceived"
  # Default logging level for known APIs to log request and response
  - level: RequestResponse
    resources:
      - group: "" # core
      - group: "admissionregistration.k8s.io"
      - group: "apiextensions.k8s.io"
      - group: "apiregistration.k8s.io"
      - group: "apps"
      - group: "authentication.k8s.io"
      - group: "authorization.k8s.io"
      - group: "autoscaling"
      - group: "batch"
      - group: "certificates.k8s.io"
      - group: "extensions"
      - group: "metrics.k8s.io"
      - group: "networking.k8s.io"
      - group: "policy"
      - group: "rbac.authorization.k8s.io"
      - group: "scheduling.k8s.io"
      - group: "settings.k8s.io"
      - group: "storage.k8s.io"
    omitStages:
      - "RequestReceived"
  # Default logging level for all other requests to log metadata only
  - level: Metadata
    omitStages:
      - "RequestReceived"
```

## Raccomandazioni
<a name="_recommendations"></a>

### Abilita i registri di controllo
<a name="_enable_audit_logs"></a>

I log di controllo fanno parte dei log del piano di controllo Kubernetes gestiti da EKS e gestiti da EKS. Le istruzioni per i log enabling/disabling del piano di controllo, che includono i log per il server dell'API Kubernetes, il controller manager e lo scheduler, insieme al registro di controllo, sono disponibili qui, -plane-logs.html\$1 -export. https://docs.aws.amazon.com/eks/ latest/userguide/control enabling-control-plane-log

**Nota**  
[Quando abiliti la registrazione del piano di controllo, dovrai sostenere dei costi per l'archiviazione dei log.](https://aws.amazon.com/cloudwatch/pricing/) CloudWatch Ciò solleva una questione più ampia relativa ai costi correnti della sicurezza. In ultima analisi, dovrete soppesare tali costi rispetto al costo di una violazione della sicurezza, ad esempio perdite finanziarie, danni alla vostra reputazione, ecc. Potresti scoprire di poter proteggere adeguatamente il tuo ambiente implementando solo alcuni dei consigli di questa guida.

**avvertimento**  
La dimensione massima per una voce CloudWatch Logs è di [1 MB](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/cloudwatch_limits_cwl.html), mentre la dimensione massima della richiesta dell'API Kubernetes è 1,5 MiB. Le voci di registro superiori a 1 MB verranno troncate o includeranno solo i metadati della richiesta.

### Utilizza i metadati di controllo
<a name="_utilize_audit_metadata"></a>

I log di controllo di Kubernetes includono due annotazioni che indicano se una richiesta è stata autorizzata `authorization.k8s.io/decision` o meno e il motivo della decisione. `authorization.k8s.io/reason` Utilizza questi attributi per accertare il motivo per cui è stata consentita una particolare chiamata API.

### Crea allarmi per eventi sospetti
<a name="_create_alarms_for_suspicious_events"></a>

Crea un allarme per avvisarti automaticamente in caso di aumento di 403 risposte proibite e 401 non autorizzate, quindi utilizza attributi come `host``sourceIPs`, e `k8s_user.username` per scoprire da dove provengono tali richieste.

### Analizza i log con Log Insights
<a name="_analyze_logs_with_log_insights"></a>

Usa CloudWatch Log Insights per monitorare le modifiche agli oggetti RBAC, ad esempio Ruoli, RoleBindings, ClusterRoles e. ClusterRoleBindings Di seguito sono riportate alcune query di esempio:

Elenca gli aggiornamenti a: `aws-auth` ConfigMap

```
fields @timestamp, @message
| filter @logStream like "kube-apiserver-audit"
| filter verb in ["update", "patch"]
| filter objectRef.resource = "configmaps" and objectRef.name = "aws-auth" and objectRef.namespace = "kube-system"
| sort @timestamp desc
```

Elenca la creazione di nuovi webhook di convalida o le modifiche apportate:

```
fields @timestamp, @message
| filter @logStream like "kube-apiserver-audit"
| filter verb in ["create", "update", "patch"] and responseStatus.code = 201
| filter objectRef.resource = "validatingwebhookconfigurations"
| sort @timestamp desc
```

Elenchi per creare, aggiornare ed eliminare le operazioni relative ai ruoli:

```
fields @timestamp, @message
| sort @timestamp desc
| limit 100
| filter objectRef.resource="roles" and verb in ["create", "update", "patch", "delete"]
```

Operazioni di creazione, aggiornamento ed eliminazione degli elenchi per RoleBindings:

```
fields @timestamp, @message
| sort @timestamp desc
| limit 100
| filter objectRef.resource="rolebindings" and verb in ["create", "update", "patch", "delete"]
```

Elenca le operazioni di creazione, aggiornamento ed eliminazione per ClusterRoles:

```
fields @timestamp, @message
| sort @timestamp desc
| limit 100
| filter objectRef.resource="clusterroles" and verb in ["create", "update", "patch", "delete"]
```

Elenca le operazioni di creazione, aggiornamento ed eliminazione per ClusterRoleBindings:

```
fields @timestamp, @message
| sort @timestamp desc
| limit 100
| filter objectRef.resource="clusterrolebindings" and verb in ["create", "update", "patch", "delete"]
```

Registra le operazioni di lettura non autorizzate su Secrets:

```
fields @timestamp, @message
| sort @timestamp desc
| limit 100
| filter objectRef.resource="secrets" and verb in ["get", "watch", "list"] and responseStatus.code="401"
| stats count() by bin(1m)
```

Elenco delle richieste anonime non riuscite:

```
fields @timestamp, @message, sourceIPs.0
| sort @timestamp desc
| limit 100
| filter user.username="system:anonymous" and responseStatus.code in ["401", "403"]
```

### Controlla i tuoi CloudTrail registri
<a name="_audit_your_cloudtrail_logs"></a>

Le APIs chiamate AWS tramite pod che utilizzano IAM Roles for Service Accounts (IRSA) vengono automaticamente registrate CloudTrail insieme al nome dell'account di servizio. Se nel registro compare il nome di un account di servizio che non era esplicitamente autorizzato a chiamare un'API, potrebbe essere un'indicazione che la policy di fiducia del ruolo IAM non è stata configurata correttamente. In generale, Cloudtrail è un ottimo modo per attribuire chiamate API AWS a principi IAM specifici.

### Usa Insights per scoprire attività sospette CloudTrail
<a name="_use_cloudtrail_insights_to_unearth_suspicious_activity"></a>

CloudTrail insights analizza automaticamente gli eventi di gestione delle scritture provenienti dai CloudTrail trail e ti avvisa di attività insolite. Questo può aiutarti a identificare quando c'è un aumento del volume di chiamate in scrittura APIs nel tuo account AWS, anche da pod che utilizzano IRSA per assumere un ruolo IAM. Per ulteriori informazioni[, consulta Announcing CloudTrail Insights: Identify and Response to Unusual API Activity](https://aws.amazon.com/blogs/aws/announcing-cloudtrail-insights-identify-and-respond-to-unusual-api-activity/).

### Risorse aggiuntive
<a name="_additional_resources"></a>

Con l'aumento del volume dei log, l'analisi e il filtraggio con Log Insights o un altro strumento di analisi dei log potrebbero diventare inefficaci. [In alternativa, potresti prendere in considerazione l'utilizzo di [Sysdig Falco e ekscloudwatch](https://github.com/falcosecurity/falco).](https://github.com/sysdiglabs/ekscloudwatch) Falco analizza i log di controllo e segnala anomalie o abusi per un periodo di tempo prolungato. Il progetto ekscloudwatch inoltra gli eventi dei registri di controllo a Falco per l'analisi. CloudWatch Falco fornisce una serie di [regole di controllo predefinite](https://github.com/falcosecurity/plugins/blob/master/plugins/k8saudit/rules/k8s_audit_rules.yaml) oltre alla possibilità di aggiungerne di proprie.

Un'altra opzione potrebbe essere quella di archiviare i log di controllo in S3 e utilizzare l'algoritmo SageMaker [Random Cut Forest](https://docs.aws.amazon.com/sagemaker/latest/dg/randomcutforest.html) per comportamenti anomali che richiedono ulteriori indagini.

## Strumenti e risorse
<a name="_tools_and_resources"></a>

I seguenti progetti commerciali e open source possono essere utilizzati per valutare l'allineamento del cluster alle migliori pratiche consolidate:
+  [Workshop di immersione nella sicurezza di Amazon EKS - Detective Controls](https://catalog.workshops.aws/eks-security-immersionday/en-US/5-detective-controls) 
+  [kubeaudit](https://github.com/Shopify/kubeaudit) 
+  [kube-scan](https://github.com/octarinesec/kube-scan) assegna un punteggio di rischio ai carichi di lavoro in esecuzione nel cluster in conformità con il framework Kubernetes Common Configuration Scoring System
+  [kubesec.io](https://kubesec.io/) 
+  [polare](https://github.com/FairwindsOps/polaris) 
+  [A tribordo](https://github.com/aquasecurity/starboard) 
+  [Snyk](https://support.snyk.io/hc/en-us/articles/360003916138-Kubernetes-integration-overview) 
+  [Kubescape Kubescape](https://github.com/kubescape/kubescape) è uno strumento di sicurezza Kubernetes open source che analizza cluster, file YAML e grafici Helm. [https://www.armosec.io/blog/kubernetes-hardening-guidance-summary-by-armo/?utm_source=github&utm_medium=repository](https://www.armosec.io/blog/kubernetes-hardening-guidance-summary-by-armo/?utm_source=github&utm_medium=repository)