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
Tipp
Lernen Sie in Amazon EKS-Workshops
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
Auditprotokolle aktivieren
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/
Warnung
Die maximale Größe für einen CloudWatch Logs-Eintrag beträgt 1 MB, 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
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
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 hostsourceIPs, und, k8s_user.username um herauszufinden, woher diese Anfragen stammen.
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 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
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
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
Weitere Ressourcen
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
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 eine weitere Untersuchung rechtfertigen.
Tools und Ressourcen
Die folgenden kommerziellen und Open-Source-Projekte können verwendet werden, um zu beurteilen, ob Ihr Cluster den etablierten Best Practices entspricht:
-
kube-scan
Weist den in Ihrem Cluster ausgeführten Workloads gemäß dem Kubernetes Common Configuration Scoring System-Framework eine Risikobewertung zu -
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.microsoft.com/security/blog/2021/03/23/secure-containerized-environments-with-updated-threat-matrix-for-kubernetes/