

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**  
 [Informieren Sie](https://aws-experience.com/emea/smb/events/series/get-hands-on-with-amazon-eks?trk=4a9b4147-2490-4c63-bc9f-f8a84b122c8c&sc_channel=el) sich in Amazon EKS-Workshops über bewährte Verfahren.

Das Sammeln und Analysieren von [Audit-] Protokollen ist aus verschiedenen Gründen nützlich. Protokolle können bei der Ursachenanalyse und -zuweisung helfen, d. h. bei der Zuordnung einer Änderung zu einem bestimmten Benutzer. Wenn genügend Protokolle gesammelt wurden, können sie auch zur Erkennung ungewöhnlicher Verhaltensweisen verwendet werden. Auf EKS werden die Audit-Logs an Amazon Cloudwatch Logs gesendet. Die Audit-Richtlinie 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>

### Audit-Logs aktivieren
<a name="_enable_audit_logs"></a>

Die Auditprotokolle sind Teil der von EKS verwalteten Kubernetes-Steuerebenenprotokolle, die von EKS verwaltet werden. Anweisungen für enabling/disabling die Protokolle der Kontrollebene, zu denen die Protokolle für den Kubernetes-API-Server, den Controller-Manager und den Scheduler sowie das Audit-Protokoll gehören, finden Sie hier: -plane-logs.html\$1 -export. https://docs.aws.amazon.com/eks/ latest/userguide/control enabling-control-plane-log

**Anmerkung**  
[Wenn Sie die Protokollierung auf der Kontrollebene aktivieren, fallen Kosten für das Speichern der Logs an.](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. finanzielle Verluste, Rufschädigung usw. Möglicherweise stellen Sie fest, dass Sie Ihre Umgebung angemessen schützen können, wenn Sie nur einige der Empfehlungen in diesem Leitfaden 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 Größe der Kubernetes-API-Anfrage 1,5 MiB beträgt. Protokolleinträge, die größer als 1 MB sind, werden entweder gekürzt oder enthalten nur die Metadaten der Anfrage.

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

Die Audit-Logs von Kubernetes enthalten zwei Anmerkungen, die angeben, ob eine Anfrage autorisiert wurde oder nicht, `authorization.k8s.io/decision` und den Grund für die Entscheidung. `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 benachrichtigt, wenn die Anzahl der Antworten 403 Verboten und 401 Unbefugt zunimmt, und verwenden Sie dann Attribute wie `host``sourceIPs`,, und, `k8s_user.username` um herauszufinden, woher diese Anfragen kommen.

### 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 `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, um 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 für 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 für ClusterRoleBindings:

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

Plottet unautorisierte Lesevorgänge gegen 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)
```

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>

 APIs AWS-Aufrufe durch Pods, die IAM Roles for Service Accounts (IRSA) verwenden, werden automatisch CloudTrail zusammen mit dem Namen des Dienstkontos angemeldet. Wenn der Name eines Dienstkontos, 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 war. Im Allgemeinen ist Cloudtrail eine hervorragende Möglichkeit, AWS-API-Aufrufe bestimmten IAM-Prinzipalen zuzuordnen.

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

CloudTrail Insights analysiert automatisch Ereignisse bei der Schreibverwaltung anhand von CloudTrail Pfaden und warnt Sie vor ungewöhnlichen Aktivitäten. Auf diese Weise können Sie feststellen, wann das Anrufvolumen beim Schreiben APIs in Ihrem AWS-Konto zunimmt, auch von Pods, die IRSA verwenden, um eine IAM-Rolle zu übernehmen. Weitere Informationen finden Sie unter [Ankündigung von CloudTrail Erkenntnissen: Identifizierung und Reaktion auf ungewöhnliche API-Aktivitäten](https://aws.amazon.com/blogs/aws/announcing-cloudtrail-insights-identify-and-respond-to-unusual-api-activity/).

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

Wenn das Volumen der Protokolle zunimmt, kann es unwirksam werden, sie mit Log Insights oder einem anderen Protokollanalysetool zu analysieren und zu filtern. [Als Alternative sollten Sie in Betracht ziehen, [Sysdig Falco](https://github.com/falcosecurity/falco) und ekscloudwatch auszuführen.](https://github.com/sysdiglabs/ekscloudwatch) Falco analysiert Auditprotokolle und kennzeichnet Anomalien oder Missbrauch über einen längeren Zeitraum. Das ekscloudwatch-Projekt leitet Auditprotokollereignisse zur Analyse von 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 Forest-Algorithmus](https://docs.aws.amazon.com/sagemaker/latest/dg/randomcutforest.html) für anomale Verhaltensweisen zu verwenden, die weitere Untersuchungen rechtfertigen.

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

Anhand der folgenden kommerziellen und Open-Source-Projekte können Sie beurteilen, ob Ihr Cluster an etablierten Best Practices ausgerichtet ist:
+  [Workshop zum Eintauchen in die Sicherheit von 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) weist den Workloads, die in Ihrem Cluster ausgeführt werden, eine Risikobewertung gemäß dem Kubernetes Common Configuration Scoring System-Framework zu
+  [kubesec.io](https://kubesec.io/) 
+  [Polaris](https://github.com/FairwindsOps/polaris) 
+  [Steuerbord](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) ist ein Open-Source-Kubernetes-Sicherheitstool, das Cluster, YAML-Dateien und Helm-Diagramme scannt. [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)