Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.
Auditoría y registro
La recopilación y el análisis de los registros [de auditoría] son útiles por diversas razones. Los registros pueden ayudar a analizar y atribuir la causa raíz, es decir, a atribuir un cambio a un usuario concreto. Cuando se han recopilado suficientes registros, también se pueden utilizar para detectar comportamientos anómalos. En EKS, los registros de auditoría se envían a Amazon Cloudwatch Logs. La política de auditoría de EKS es la siguiente:
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"
Recomendaciones
Habilite los registros de auditoría
Los registros de auditoría forman parte de los registros del plano de control de Kubernetes gestionados por EKS y gestionados por EKS. Las instrucciones para enabling/disabling los registros del plano de control, que incluyen los registros del servidor API de Kubernetes, el administrador del controlador y el programador, junto con el registro de auditoría, se encuentran aquí, -plane-logs.html# -export. https://docs.aws.amazon.com/eks/ latest/userguide/control enabling-control-plane-log
nota
Si habilita el registro en el plano de control, incurrirá en costes por almacenar los registros.
aviso
El tamaño máximo de una entrada de CloudWatch registros es de 256 KB, mientras que el tamaño máximo de una solicitud de API de Kubernetes es de 1,5 MB. Las entradas de registro de más de 256 KB se truncarán o solo incluirán los metadatos de la solicitud.
Utilice los metadatos de auditoría
Los registros de auditoría de Kubernetes incluyen dos anotaciones que indican si una solicitud se autorizó o no authorization.k8s.io/decision
y el motivo de la decisión. authorization.k8s.io/reason
Usa estos atributos para determinar por qué se permitió una llamada a la API en particular.
Cree alarmas para eventos sospechosos
Crea una alarma que te avise automáticamente si hay un aumento de 403 respuestas prohibidas y 401 no autorizadas y, a continuación host
sourceIPs
, utiliza atributos como, y k8s_user.username
para averiguar de dónde provienen esas solicitudes.
Analice los registros con Log Insights
Utilice CloudWatch Log Insights para monitorear los cambios en los objetos del RBAC, por ejemplo, los roles RoleBindings ClusterRoles, y. ClusterRoleBindings A continuación, se muestran algunos ejemplos de consultas:
Enumera las actualizaciones de 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
Muestra la creación de webhooks de validación nuevos o los cambios en ellos:
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
Enumera las operaciones de creación, actualización y eliminación de los roles:
fields @timestamp, @message | sort @timestamp desc | limit 100 | filter objectRef.resource="roles" and verb in ["create", "update", "patch", "delete"]
Las listas crean, actualizan y eliminan operaciones para RoleBindings:
fields @timestamp, @message | sort @timestamp desc | limit 100 | filter objectRef.resource="rolebindings" and verb in ["create", "update", "patch", "delete"]
Las listas crean, actualizan y eliminan operaciones para ClusterRoles:
fields @timestamp, @message | sort @timestamp desc | limit 100 | filter objectRef.resource="clusterroles" and verb in ["create", "update", "patch", "delete"]
Las listas crean, actualizan y eliminan operaciones para ClusterRoleBindings:
fields @timestamp, @message | sort @timestamp desc | limit 100 | filter objectRef.resource="clusterrolebindings" and verb in ["create", "update", "patch", "delete"]
Planifica operaciones de lectura no autorizadas de 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)
Lista de solicitudes anónimas fallidas:
fields @timestamp, @message, sourceIPs.0 | sort @timestamp desc | limit 100 | filter user.username="system:anonymous" and responseStatus.code in ["401", "403"]
Audite sus CloudTrail registros
Los pods que utilizan funciones de IAM para cuentas de servicio (IRSA) APIs llaman a AWS y se registran automáticamente CloudTrail junto con el nombre de la cuenta de servicio. Si en el registro aparece el nombre de una cuenta de servicio que no estaba autorizada explícitamente a llamar a una API, puede ser un indicio de que la política de confianza del rol de IAM estaba mal configurada. En términos generales, Cloudtrail es una excelente forma de atribuir las llamadas a la API de AWS a principios de IAM específicos.
Utilice Insights para descubrir actividades sospechosas CloudTrail
CloudTrail Insights analiza automáticamente los eventos de gestión y escritura de los CloudTrail senderos y te alerta de cualquier actividad inusual. Esto puede ayudarlo a identificar cuándo se produce un aumento en el volumen de llamadas por escritura APIs en su cuenta de AWS, incluso de grupos que utilizan IRSA para asumir una función de IAM. Para obtener más información, consulte Announcing CloudTrail Insights: Identify and Response to Unnusual API Activity
Recursos adicionales
A medida que aumenta el volumen de registros, analizarlos y filtrarlos con Log Insights u otra herramienta de análisis de registros puede resultar ineficaz. Como alternativa, puede considerar la posibilidad de ejecutar Sysdig Falco y ekscloudwatch
Otra opción podría ser almacenar los registros de auditoría en S3 y utilizar el algoritmo SageMaker Random Cut Forest para detectar comportamientos anómalos que justifiquen una investigación más profunda.
Herramientas y recursos
Los siguientes proyectos comerciales y de código abierto se pueden utilizar para evaluar la alineación del clúster con las mejores prácticas establecidas:
-
Taller de inmersión en seguridad de Amazon EKS - Detective Controls
-
kube-scan
asigna una puntuación de riesgo a las cargas de trabajo que se ejecutan en el clúster de acuerdo con el marco del sistema de puntuación de configuración común de Kubernetes -
Kubescape Kubescape
es una herramienta de seguridad de Kubernetes de código abierto que escanea clústeres, archivos YAML y gráficos de Helm. Detecta errores de configuración en función de varios marcos (incluidos NSA-CISA y MITRE ATT&CK®).