Todos los productos
Search
Centro de documentos

Container Service for Kubernetes:Secure cluster operations with API server auditing

Última actualización: Sep 12, 2026

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.

Importante

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.

  1. Inicie sesión en la consola de ACK. En el panel de navegación izquierdo, haga clic en Clusters.

  2. En la página Clusters, haga clic en el nombre del clúster. En el panel izquierdo, elija Security > Cluster Auditing.

  3. 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.

Importante

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.

Importante

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 image.png 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

Operations overview

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 consultar AliyunLogConfig , introduzca AliyunLogConfigs .

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.
  1. Inicie sesión en la consola de ACK. En el panel de navegación izquierdo, haga clic en Clusters.

  2. En la página Clusters, haga clic en el nombre del clúster. En el panel izquierdo, haga clic en Cluster Information.

  3. 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}.

  4. 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:

  1. Inicie sesión en la consola de ACK. En el panel de navegación izquierdo, haga clic en Clusters.

  2. En la página Clusters, haga clic en el nombre del clúster. En el panel izquierdo, elija Security > Cluster Auditing.

  3. Haga clic en Change Log Service Project y siga las indicaciones.

Deshabilite la auditoría de clústeres

  1. Inicie sesión en la consola de ACK. En el panel de navegación izquierdo, haga clic en Clusters.

  2. En la página Clusters, haga clic en el nombre del clúster. En el panel izquierdo, elija Security > Cluster Auditing.

  3. 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:nodes hacia 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 de authentication, rbac, certificates, autoscaling y storage se registran en el nivel Request. Las operaciones de escritura en estas API se registran en RequestResponse.

  • 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

--audit-log-maxbackup

Número máximo de archivos de registro rotados que se conservan

10

--audit-log-maxsize

Tamaño máximo de cada archivo de registro antes de la rotación

100 MB

--audit-log-path

Ruta de salida para los archivos de registro de auditoría

/var/log/kubernetes/kubernetes.audit

--audit-log-maxage

Periodo de retención de los archivos de registro rotados

7 días

--audit-policy-file

Ruta al archivo de la política de auditoría

/etc/kubernetes/audit-policy.yml

Pasos siguientes