Habilite, consulte y configure alertas para los registros de auditoría del servidor API a fin de cumplir con sus necesidades de cumplimiento normativo y seguridad.
La auditoría de clústeres registra las solicitudes y respuestas del servidor API. Esto le permite rastrear el historial de operaciones e investigar anomalías.
Aplica a clústeres ACK managed, ACK dedicated y ACK Serverless.
Para los clústeres registrados, consulte Use cluster auditing .
Facturación
Los datos de los registros de auditoría utilizan facturación pay-by-feature. Consulte View your bills y Pay-by-feature.
Habilitar la auditoría de clústeres genera costos de Simple Log Service (SLS). Supervise el volumen de sus registros y establezca un periodo de retención que coincida con sus requisitos de cumplimiento normativo. Valor predeterminado: 30 días para clústeres ACK managed y 365 días para clústeres ACK dedicated.
Requisitos previos
Asegúrese de que las siguientes cuotas de SLS en su cuenta de Alibaba Cloud sean suficientes:
Cuota de proyectos de SLS
Cuota de logstores por proyecto de SLS
Cuota de dashboards por proyecto de SLS
Consulte Adjust resource quotas para conocer los detalles de las cuotas y solicitar aumentos.
Habilite la auditoría de clústeres
De forma predeterminada, Enable Log Service se selecciona durante la creación del clúster. Si lo deshabilitó, siga estos pasos para volver a habilitarlo.
Inicie sesión en la consola de ACK. En el panel de navegación izquierdo, haga clic en Clusters.
En la página Clusters, haga clic en el nombre del clúster. En el panel izquierdo, elija Security > Cluster Auditing.
Seleccione un proyecto de SLS y habilite la auditoría de clústeres.
ACK crea automáticamente un logstore llamado audit-${clustereid} en el proyecto.
No modifique los índices predeterminados. Si los cambia, los informes de auditoría no se generarán correctamente.
Consulte los informes de registros de auditoría
ACK proporciona cuatro informes de registros de auditoría integrados. Filtre por namespace o usuario de RAM en la página Cluster Auditing.
No modifique los informes de registros de auditoría integrados. En su lugar, cree informes personalizados en la consola de SLS.
Haga clic en el icono
de cualquier gráfico para verlo en pantalla completa o previsualizar su instrucción de consulta.
Descripción general
Muestra todos los eventos del clúster y los detalles de los eventos de alta prioridad. Entre ellos se incluyen las operaciones de usuarios de RAM, el acceso a Internet, las ejecuciones de comandos, las eliminaciones de recursos, el acceso a Secrets y las vulnerabilidades CVE.
Descripción general de operaciones
Proporciona estadísticas sobre las operaciones de creación, actualización, eliminación y lectura en los siguientes elementos:
Recursos de cómputo: Deployment, StatefulSet, CronJob, DaemonSet, Job y Pod
Recursos de red: Service e Ingress
Recursos de almacenamiento: ConfigMap, Secret y PersistentVolumeClaim (PVC)
Recursos de control de acceso: Role, ClusterRole, RoleBinding y ClusterRoleBinding

Detalles de operaciones
Muestra las operaciones de un tipo de recurso específico. Seleccione un tipo de recurso para consultarlo. El informe muestra el recuento total, la distribución por namespace, la tasa de éxito y las tendencias a lo largo del tiempo.
Para consultar recursos CRD o recursos que no aparecen en la lista, introduzca el nombre del recurso en plural. Por ejemplo, para consultarAliyunLogConfig, introduzcaAliyunLogConfigs.
Vulnerabilidades CVE
Muestra las vulnerabilidades CVE de Kubernetes. Filtre por ID de usuario de RAM. Consulte [[CVE Security] CVE vulnerability fixes](t96487.xdita#) para conocer las medidas de corrección.
Consulte datos detallados de los registros
Para consultas personalizadas y análisis más profundos, acceda a los datos sin procesar de los registros de auditoría en la consola de SLS.
Retención predeterminada: 30 días para clústeres ACK managed y 365 días para clústeres ACK dedicated. Consulte Manage a logstore para cambiar el periodo de retención.
Inicie sesión en la consola de ACK. En el panel de navegación izquierdo, haga clic en Clusters.
En la página Clusters, haga clic en el nombre del clúster. En el panel izquierdo, haga clic en Cluster Information.
En la pestaña Cluster Resources, haga clic en el ID del proyecto junto a Log Service Project. En la lista de logstores, haga clic en el logstore llamado audit-${clustereid}.
Introduzca una instrucción de consulta, configure el rango de tiempo de la consulta (por ejemplo, los últimos 15 minutos) y haga clic en Search & Analysis.
Patrones de consulta comunes:
Por usuario de RAM: introduzca el ID del usuario de RAM.
Por recurso: introduzca el nombre del recurso (Deployment, Service, ConfigMap u otro similar).
-
Excluir componentes del sistema: filtre el ruido generado por los componentes del sistema:
NOT user.username: node NOT user.username: serviceaccount NOT user.username: apiserver NOT user.username: kube-scheduler NOT user.username: kube-controller-manager
Consulte Query methods para conocer los detalles de la sintaxis.
Configure las alertas
Establezca reglas de alerta de SLS para recibir notificaciones en tiempo real cuando ocurran operaciones específicas. Los métodos compatibles incluyen chatbots de DingTalk, webhooks personalizados y Alibaba Cloud Message Center.
Consulte Configure an alert rule in SLS.
Ejemplo de alerta 1: comandos ejecutados en contenedores
Genera alertas cuando los usuarios ejecutan comandos en contenedores. Cada alerta incluye el contenedor, el comando, el usuario, el ID del evento, la hora y la dirección IP de origen.
Instrucción de consulta de ejemplo:
verb : create and objectRef.subresource:exec and stage: ResponseStarted | SELECT auditID as "Event ID", date_format(from_unixtime(__time__), '%Y-%m-%d %T' ) as "Time", regexp_extract("requestURI", '([^\?]*)/exec\?.*', 1)as "Resource", regexp_extract("requestURI", '\?(.*)', 1)as "Command" ,"responseStatus.code" as "Status code",
CASE
WHEN "user.username" != 'kubernetes-admin' then "user.username"
WHEN "user.username" = 'kubernetes-admin' and regexp_like("annotations.authorization.k8s.io/reason", 'RoleBinding') then regexp_extract("annotations.authorization.k8s.io/reason", ' to User "(\w+)"', 1)
ELSE 'kubernetes-admin' END
as "User account",
CASE WHEN json_array_length(sourceIPs) = 1 then json_format(json_array_get(sourceIPs, 0)) ELSE sourceIPs END
as "Source IP address" order by "Time" desc limit 10000
Expresión de condición: Event =~ ".*"
Ejemplo de alerta 2: acceso a Internet con errores desde el servidor API
Supervisa las solicitudes salientes a Internet desde su clúster. Se activa cuando el recuento de solicitudes llega a 10 y la tasa de errores supera el 50 %.
Instrucción de consulta de ejemplo:
* | select ip as "Source IP address", total as "Number of times of Internet access", round(rate * 100, 2) as "Failure rate in percentage", failCount as "Number of times of illegal access", CASE when security_check_ip(ip) = 1 then 'yes' else 'no' end as "Whether the IP address is risky", ip_to_country(ip) as "Country", ip_to_province(ip) as "Province", ip_to_city(ip) as "City", ip_to_provider(ip) as "ISP" from (select CASE WHEN json_array_length(sourceIPs) = 1 then json_format(json_array_get(sourceIPs, 0)) ELSE sourceIPs END
as ip, count(1) as total,
sum(CASE WHEN "responseStatus.code" < 400 then 0
ELSE 1 END) * 1.0 / count(1) as rate,
count_if("responseStatus.code" = 403) as failCount
from log group by ip limit 10000) where ip_to_domain(ip) != 'intranet' and ip not LIKE '%,%' and not try(is_subnet_of('7.0.0.0/8', ip)) ORDER by "Number of times of Internet access" desc limit 10000
Expresión de condición: Source IP address =~ ".*"
Gestione la configuración de la auditoría de clústeres
Cambie el proyecto de SLS
Para migrar los registros de auditoría a otro proyecto de SLS:
Inicie sesión en la consola de ACK. En el panel de navegación izquierdo, haga clic en Clusters.
En la página Clusters, haga clic en el nombre del clúster. En el panel izquierdo, elija Security > Cluster Auditing.
Haga clic en Change Log Service Project y siga las indicaciones.
Deshabilite la auditoría de clústeres
Inicie sesión en la consola de ACK. En el panel de navegación izquierdo, haga clic en Clusters.
En la página Clusters, haga clic en el nombre del clúster. En el panel izquierdo, elija Security > Cluster Auditing.
Haga clic en Disable Cluster Auditing.
Use un servicio de registros de terceros (solo clústeres ACK dedicated)
Se recomienda usar SLS como almacenamiento de registros de auditoría. Si desea utilizar un servicio de registros de terceros, omita SLS durante la creación del clúster e integre dicho servicio. Los registros de auditoría sin procesar están disponibles en los nodos master, en la ruta /var/log/kubernetes/kubernetes.audit y en formato JSON.
Configuración de la política de auditoría y del backend (clústeres ACK dedicated)
En los clústeres ACK dedicated, Enable Log Service se selecciona de forma predeterminada. Los eventos de auditoría se recopilan según la política de auditoría y se escriben en el sistema de archivos de registros del backend.
Política de auditoría
La política de auditoría define qué eventos se recopilan y con qué nivel de detalle. Existen cuatro niveles de auditoría:
|
Audit level |
What is collected |
|
None |
Ninguna. Los eventos coincidentes se omiten. |
|
Metadata |
Solo los metadatos de la solicitud, como la información del usuario y las marcas de tiempo. No incluye el cuerpo de la solicitud ni de la respuesta. |
|
Request |
Metadatos y cuerpo de la solicitud. No incluye el cuerpo de la respuesta. Las solicitudes que no son de recursos quedan excluidas. |
|
RequestResponse |
Metadatos y cuerpo de la solicitud, además del cuerpo de la respuesta. Las solicitudes que no son de recursos quedan excluidas. |
La política de auditoría se carga desde /etc/kubernetes/audit-policy.yml en los nodos master (mediante la marca --audit-policy-file). Política predeterminada de ACK:
apiVersion: audit.k8s.io/v1 # Required. Set to audit.k8s.io/v1 if the Kubernetes version of the cluster is 1.24 or later and set to audit.k8s.io/v1beta1 if the Kubernetes version of the cluster is earlier than 1.24.
kind: Policy
# No need to generate audit events at the RequestReceived stage.
omitStages:
- "RequestReceived"
rules:
# The following types of requests are frequent and the risk of these requests is low. We recommend that you set the rule to None to skip these requests.
- level: None
users: ["system:kube-proxy"]
verbs: ["watch"]
resources:
- group: "" # core
resources: ["endpoints", "services"]
- level: None
users: ["system:unsecured"]
namespaces: ["kube-system"]
verbs: ["get"]
resources:
- group: "" # core
resources: ["configmaps"]
- level: None
users: ["kubelet"] # legacy kubelet identity
verbs: ["get"]
resources:
- group: "" # core
resources: ["nodes"]
- level: None
userGroups: ["system:nodes"]
verbs: ["get"]
resources:
- group: "" # core
resources: ["nodes"]
- 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"]
- level: None
users: ["system:apiserver"]
verbs: ["get"]
resources:
- group: "" # core
resources: ["namespaces"]
# Set the rule to None for read-only URLs, such as /healthz*, /version*, and /swagger*.
- level: None
nonResourceURLs:
- /healthz*
- /version
- /swagger*
# Set the rule to None for events.
- level: None
resources:
- group: "" # core
resources: ["events"]
# Set the rule to Metadata for Secrets, ConfigMaps, and TokenReview API requests that may contain sensitive information or binary files.
- level: Metadata
resources:
- group: "" # core
resources: ["secrets", "configmaps"]
- group: authentication.k8s.io
resources: ["tokenreviews"]
# Responses may contain large amounts of data. Set the rule to Request so that the response body is not collected.
- level: Request
verbs: ["get", "list", "watch"]
resources:
- group: "" # core
- group: "admissionregistration.k8s.io"
- group: "apps"
- group: "authentication.k8s.io"
- group: "authorization.k8s.io"
- group: "autoscaling"
- group: "batch"
- group: "certificates.k8s.io"
- group: "extensions"
- group: "networking.k8s.io"
- group: "policy"
- group: "rbac.authorization.k8s.io"
- group: "settings.k8s.io"
- group: "storage.k8s.io"
# The rule is set to RequestResponse by default for known Kubernetes API requests to collect the request and response bodies.
- level: RequestResponse
resources:
- group: "" # core
- group: "admissionregistration.k8s.io"
- group: "apps"
- group: "authentication.k8s.io"
- group: "authorization.k8s.io"
- group: "autoscaling"
- group: "batch"
- group: "certificates.k8s.io"
- group: "extensions"
- group: "networking.k8s.io"
- group: "policy"
- group: "rbac.authorization.k8s.io"
- group: "settings.k8s.io"
- group: "storage.k8s.io"
# The rule is set to Metadata by default for other requests.
- level: Metadata
Comportamientos clave:
Los registros se generan después de enviar los encabezados de respuesta, no cuando se reciben las solicitudes.
Se excluyen las solicitudes watch de kube-proxy, las solicitudes GET de kubelet y
system:nodeshacia los nodos, las operaciones de endpoints de kube-system y las solicitudes GET del servidor API hacia los namespaces.Las operaciones de lectura (
get,list,watch) para las API deauthentication,rbac,certificates,autoscalingystoragese registran en el nivelRequest. Las operaciones de escritura en estas API se registran enRequestResponse.Los Secrets y ConfigMaps se registran únicamente en
Metadata, por lo que su contenido nunca se escribe en los registros de auditoría.
Backend de auditoría
Los eventos de auditoría se escriben como archivos JSON en el sistema de archivos local de los nodos master. La configuración del servidor API en /etc/kubernetes/manifests/kube-apiserver.yaml controla el comportamiento del backend mediante las siguientes marcas:
|
Flag |
Description |
Default |
|
|
Número máximo de archivos de registro rotados que se conservan |
|
|
|
Tamaño máximo de cada archivo de registro antes de la rotación |
|
|
|
Ruta de salida para los archivos de registro de auditoría |
|
|
|
Periodo de retención de los archivos de registro rotados |
|
|
|
Ruta al archivo de la política de auditoría |
|
Pasos siguientes
Consulte Enable container auditing para auditar los comandos
kubectl execen contenedores.Consulte Best security practices para conocer las opciones de seguridad empresarial.