

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

# Prüfung und Protokollierung
<a name="auditing-and-logging"></a>

**Tipp**  
 [Lernen Sie in Amazon EKS-Workshops ](https://aws-experience.com/emea/smb/events/series/get-hands-on-with-amazon-eks?trk=4a9b4147-2490-4c63-bc9f-f8a84b122c8c&sc_channel=el) bewährte Methoden kennen.

Das Sammeln und Analysieren von [Prüf-] Protokollen ist aus einer Vielzahl von Gründen nützlich. Protokolle können bei der Ursachenanalyse und Zuordnung helfen, d. h. bei der Zuordnung einer Änderung zu einem bestimmten Benutzer. Wenn genügend Protokolle gesammelt wurden, können sie auch verwendet werden, um anomale Verhaltensweisen zu erkennen. Auf EKS werden die Auditprotokolle an Amazon Cloudwatch Logs gesendet. Die Prüfungsrichtlinie für EKS lautet wie folgt:

```
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"
```

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

### Auditprotokolle aktivieren
<a name="_enable_audit_logs"></a>

Die Auditprotokolle sind Teil der von EKS verwalteten Kubernetes-Steuerungsebenenprotokolle, die von EKS verwaltet werden. Anweisungen für enabling/disabling die Control Plane-Logs, zu denen neben dem Audit-Log auch die Logs für den Kubernetes-API-Server, den Controller-Manager und den Scheduler gehören, finden Sie hier, \#enabling -control-plane-log-export. https://docs.aws.amazon.com/eks/latest/userguide/control-plane-logs.html

**Anmerkung**  
Wenn Sie die Protokollierung auf der Kontrollebene aktivieren, fallen Kosten für das Speichern der Logs an. [https://aws.amazon.com/cloudwatch/pricing/](https://aws.amazon.com/cloudwatch/pricing/) CloudWatch Dies wirft ein umfassenderes Problem in Bezug auf die laufenden Sicherheitskosten auf. Letztlich müssen Sie diese Kosten gegen die Kosten einer Sicherheitsverletzung abwägen, z. B. finanzieller Verlust, Rufschädigung usw. Möglicherweise stellen Sie fest, dass Sie Ihre Umgebung angemessen schützen können, indem Sie nur einige der Empfehlungen in diesem Handbuch umsetzen.

**Warnung**  
Die maximale Größe für einen CloudWatch Logs-Eintrag beträgt [ 1 MB, ](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/cloudwatch_limits_cwl.html) wohingegen die maximale Kubernetes-API-Anforderungsgröße 1,5 MB beträgt. Logeinträge, die größer als 1 MB sind, werden entweder gekürzt oder enthalten nur die Anforderungsmetadaten.

### Verwenden Sie Audit-Metadaten
<a name="_utilize_audit_metadata"></a>

Die Kubernetes-Auditprotokolle enthalten zwei Anmerkungen, die angeben, ob eine Anfrage autorisiert wurde oder nicht, `authorization.k8s.io/decision` und den Grund für die Entscheidung angeben. `authorization.k8s.io/reason` Verwenden Sie diese Attribute, um festzustellen, warum ein bestimmter API-Aufruf zulässig war.

### Erstellen Sie Alarme für verdächtige Ereignisse
<a name="_create_alarms_for_suspicious_events"></a>

Erstellen Sie einen Alarm, der Sie automatisch warnt, wenn es zu einem Anstieg von 403 verbotenen und 401 unautorisierten Antworten kommt. Verwenden Sie dann Attribute wie `host``sourceIPs`, und, `k8s_user.username` um herauszufinden, woher diese Anfragen stammen.

### Analysieren Sie Protokolle mit Log Insights
<a name="_analyze_logs_with_log_insights"></a>

Verwenden Sie CloudWatch Log Insights, um Änderungen an RBAC-Objekten zu überwachen, z. B. Rollen, RoleBindings ClusterRoles, und. ClusterRoleBindings Nachfolgend finden Sie einige Beispielabfragen:

Listet Aktualisierungen für Folgendes auf `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
```

Listet die Erstellung neuer oder Änderungen an Validierungs-Webhooks auf:

```
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
```

Listet Operationen zum Erstellen, Aktualisieren und Löschen von Rollen auf:

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

Listet Operationen zum Erstellen, Aktualisieren und Löschen auf RoleBindings:

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

Listet Operationen zum Erstellen, Aktualisieren und Löschen auf ClusterRoles:

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

Listet Operationen zum Erstellen, Aktualisieren und Löschen auf ClusterRoleBindings:

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

Zeichnet unbefugte Leseoperationen gegen Secrets auf:

```
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)
```

Liste der fehlgeschlagenen anonymen Anfragen:

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

### Überprüfe deine CloudTrail Logs
<a name="_audit_your_cloudtrail_logs"></a>

AWS-APIs, die von Pods aufgerufen werden, die IAM Roles for Service Accounts (IRSA) verwenden, werden automatisch CloudTrail zusammen mit dem Namen des Dienstkontos protokolliert. Wenn der Name eines Servicekontos, das nicht ausdrücklich zum Aufrufen einer API autorisiert wurde, im Protokoll erscheint, kann dies ein Hinweis darauf sein, dass die Vertrauensrichtlinie der IAM-Rolle falsch konfiguriert wurde. Im Allgemeinen ist Cloudtrail eine hervorragende Möglichkeit, AWS-API-Aufrufe bestimmten IAM-Prinzipalen zuzuordnen.

### Verwenden Sie Insights, um verdächtige Aktivitäten aufzudecken CloudTrail
<a name="_use_cloudtrail_insights_to_unearth_suspicious_activity"></a>

CloudTrail Insights analysiert automatisch, schreibt Managementereignisse aus den CloudTrail Trails und warnt Sie vor ungewöhnlichen Aktivitäten. Auf diese Weise können Sie erkennen, wann das Aufrufvolumen auf den Schreib-APIs in Ihrem AWS-Konto zunimmt, auch von Pods, die IRSA verwenden, um eine IAM-Rolle zu übernehmen. Weitere Informationen [ finden Sie unter Announcing CloudTrail Insights: Ungewöhnliche API-Aktivitäten ](https://aws.amazon.com/blogs/aws/announcing-cloudtrail-insights-identify-and-respond-to-unusual-api-activity/) erkennen und darauf reagieren.

### Weitere Ressourcen
<a name="_additional_resources"></a>

Wenn das Volumen der Protokolle zunimmt, kann das Analysieren und Filtern mit Log Insights oder einem anderen Protokollanalysetool unwirksam werden. Als Alternative sollten Sie in Betracht ziehen, [ Sysdig ](https://github.com/falcosecurity/falco) Falco und ekscloudwatch auszuführen. [https://github.com/sysdiglabs/ekscloudwatch](https://github.com/sysdiglabs/ekscloudwatch) Falco analysiert Auditprotokolle und markiert Anomalien oder Missbrauch über einen längeren Zeitraum. Das ekscloudwatch-Projekt leitet Audit-Log-Ereignisse zur Analyse an Falco weiter. CloudWatch Falco bietet eine Reihe von [ Standard-Auditregeln ](https://github.com/falcosecurity/plugins/blob/master/plugins/k8saudit/rules/k8s_audit_rules.yaml) sowie die Möglichkeit, eigene hinzuzufügen.

Eine weitere Option könnte darin bestehen, die Auditprotokolle in S3 zu speichern und den SageMaker [ Random Cut ](https://docs.aws.amazon.com/sagemaker/latest/dg/randomcutforest.html) Forest-Algorithmus für anomale Verhaltensweisen zu verwenden, die eine weitere Untersuchung rechtfertigen.

## Tools und Ressourcen
<a name="_tools_and_resources"></a>

Die folgenden kommerziellen und Open-Source-Projekte können verwendet werden, um zu beurteilen, ob Ihr Cluster den etablierten Best Practices entspricht:
+  [Amazon EKS Security Immersion Workshop — 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) Weist den in Ihrem Cluster ausgeführten Workloads gemäß dem Kubernetes Common Configuration Scoring System-Framework eine Risikobewertung zu
+  [kubesec.io ](https://kubesec.io/) 
+  [Polaris ](https://github.com/FairwindsOps/polaris) 
+  [Steuerbord ](https://github.com/aquasecurity/starboard) 
+  [Snyk ](https://docs.snyk.io/scan-with-snyk/snyk-container/kubernetes-integration) 
+  [Kubescape ](https://github.com/kubescape/kubescape) Kubescape ist ein Open-Source-Kubernetes-Sicherheitstool, das Cluster, YAML-Dateien und Helm-Diagramme scannt. Es erkennt Fehlkonfigurationen gemäß mehreren Frameworks (einschließlich MITRE ATT&CK®). [ NSA-CISA ](https://www.armosec.io/blog/kubernetes-hardening-guidance-summary-by-armo/?utm_source=github&utm_medium=repository) [https://www.microsoft.com/security/blog/2021/03/23/secure-containerized-environments-with-updated-threat-matrix-for-kubernetes/](https://www.microsoft.com/security/blog/2021/03/23/secure-containerized-environments-with-updated-threat-matrix-for-kubernetes/)