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
Das Sammeln und Analysieren von [Prüf-] 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 Prüfrichtlinie 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
Audit-Logs aktivieren
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# -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.
Warnung
Die maximale Größe für einen CloudWatch Logs-Eintrag beträgt 256 KB, wohingegen die maximale Größe der Kubernetes-API-Anforderung 1,5 MiB beträgt. Protokolleinträge, die größer als 256 KB sind, werden entweder gekürzt oder enthalten nur die Metadaten der Anfrage.
Verwenden Sie Audit-Metadaten
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
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
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 auf 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 für 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
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
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
Weitere Ressourcen
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
Eine weitere Option könnte darin bestehen, die Auditprotokolle in S3 zu speichern und den SageMaker Random Cut Forest-Algorithmus für anomale Verhaltensweisen zu verwenden, die weitere Untersuchungen rechtfertigen.
Tools und Ressourcen
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
-
kube-scan
weist den Workloads, die in Ihrem Cluster ausgeführt werden, eine Risikobewertung gemäß dem Kubernetes Common Configuration Scoring System-Framework zu -
Kubescape Kubescape
ist ein Open-Source-Kubernetes-Sicherheitstool, das Cluster, YAML-Dateien und Helm-Diagramme scannt. Es erkennt Fehlkonfigurationen anhand mehrerer Frameworks (einschließlich NSA-CISA und MITRE ATT&CK®).