Tous les produits
Search
Centre de documentation

Container Service for Kubernetes:Use cluster auditing in registered clusters

Dernière mise à jour :Aug 11, 2026

Le serveur API enregistre chaque requête et réponse de l'API Kubernetes sous forme de journal d'audit. Pour les clusters enregistrés — où un cluster Kubernetes externe est connecté à ACK — les administrateurs de cluster peuvent acheminer ces journaux vers Log Service d'Alibaba Cloud et les utiliser pour répondre à des questions telles que :

  • Que s'est-il passé et quand ?

  • Qui a initié la requête ?

  • Quelle ressource a été affectée ?

Cela permet de retracer l'historique complet des opérations du cluster et d'enquêter sur les incidents de sécurité lors des activités d'exploitation et de maintenance.

Prérequis

Avant de commencer, assurez-vous d'avoir :

Étape 1 : Configurer la politique d'audit sur les nœuds maîtres

Connectez-vous à un nœud maître et modifiez le fichier /etc/kubernetes/audit-policy.yaml à l'aide du modèle ci-dessous. Répétez cette étape sur tous les autres nœuds maîtres.

Remarque

La valeur apiVersion dépend de votre version de Kubernetes :

  • Kubernetes antérieur à la version 1.24 : utilisez audit.k8s.io/v1beta1

  • Kubernetes 1.24 et versions ultérieures : utilisez audit.k8s.io/v1

Pour plus de détails, consultez les notes de publication de Kubernetes 1.24.

Niveaux d'audit

Le modèle de politique utilise quatre niveaux d'audit. Comprendre ces niveaux vous aide à décider s'il convient d'ajuster les règles pour votre environnement :

Niveau Éléments consignés
None Rien. Les événements correspondant à cette règle ne sont pas consignés.
Metadata Métadonnées de la requête uniquement : utilisateur, horodatage, ressource et verbe. Les corps de requête et de réponse ne sont pas consignés.
Request Métadonnées et corps de la requête. Le corps de la réponse n'est pas consigné. Ne s'applique pas aux requêtes hors ressource.
RequestResponse Métadonnées, corps de la requête et corps de la réponse. Ne s'applique pas aux requêtes hors ressource.

Modèle de politique d'audit

apiVersion: audit.k8s.io/v1beta1  # Use audit.k8s.io/v1 for Kubernetes >= 1.24
kind: Policy
# Suppress events in the RequestReceived stage.
omitStages:
  - "RequestReceived"
rules:
  # High-volume, low-risk requests — not logged.
  - 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"]
  # Read-only URLs — not logged.
  - level: None
    nonResourceURLs:
      - /healthz*
      - /version
      - /swagger*
  # Events — not logged.
  - level: None
    resources:
      - group: "" # core
        resources: ["events"]
  # Secrets, ConfigMaps, and TokenReviews contain sensitive or binary data —
  # log metadata only.
  - level: Metadata
    resources:
      - group: "" # core
        resources: ["secrets", "configmaps"]
      - group: authentication.k8s.io
        resources: ["tokenreviews"]
  # Read requests for known API groups — log request metadata only (responses can be large).
  - 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"
  # Write requests for known API groups — log full request and response.
  - 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"
  # All other requests — log metadata only.
  - level: Metadata

Étape 2 : Configurer kube-apiserver sur les nœuds maîtres

Connectez-vous à un nœud maître et modifiez le fichier /etc/kubernetes/manifests/kube-apiserver.yaml. Répétez cette étape sur tous les autres nœuds maîtres.

La configuration comprend trois parties : les indicateurs de ligne de commande, les variables d'environnement pour la collecte des journaux et les montages de volume.

Ajouter les indicateurs de journal d'audit

Ajoutez les indicateurs suivants à la section command :

spec:
  containers:
  - command:
    - kube-apiserver
    - --audit-log-maxbackup=10
    - --audit-log-maxsize=100
    - --audit-log-path=/var/log/kubernetes/kubernetes.audit
    - --audit-log-maxage=30
    - --audit-policy-file=/etc/kubernetes/audit-policy.yaml

Chaque indicateur contrôle un aspect spécifique de la rotation des journaux et de la politique :

Indicateur Description
--audit-log-path Chemin où le backend de journalisation écrit les événements d'audit. L'absence de cet indicateur désactive complètement le backend de journalisation.
--audit-log-maxsize Taille maximale du fichier journal en mégaoctets avant rotation. Définissez la valeur sur 100.
--audit-log-maxbackup Nombre maximal de fichiers journaux tournés à conserver. Définissez la valeur sur 10.
--audit-log-maxage Nombre maximal de jours de conservation des anciens fichiers journaux. Définissez la valeur sur 30.
--audit-policy-file Chemin vers le fichier de politique d'audit configuré à l'étape 1.

Ajouter les variables d'environnement de collecte des journaux

Ajoutez les variables suivantes à la section env. Remplacez {cluster_id} par l'ID réel de votre cluster dans les quatre noms de variable. Pour trouver l'ID de votre cluster, consultez Afficher les informations du cluster.

      env:
      - name: aliyun_logs_audit-${cluster_id}
        value: /var/log/kubernetes/kubernetes.audit
      - name: aliyun_logs_audit-${cluster_id}_tags
        value: audit=apiserver
      - name: aliyun_logs_audit-${cluster_id}_product
        value: k8s-audit
      - name: aliyun_logs_audit-${cluster_id}_jsonfile
        value: "true"
      image: registry-vpc.cn-shenzhen.aliyuncs.com/acs/kube-apiserver:v1.20.4-aliyun.1
Variable Description
aliyun_logs_audit-${cluster_id} Chemin vers le fichier journal d'audit collecté par Logtail.
aliyun_logs_audit-${cluster_id}_tags Tag ajouté à chaque entrée de journal pour identifier la source comme étant le serveur API.
aliyun_logs_audit-${cluster_id}_product Identifiant de type de journal utilisé par le backend de journalisation.
aliyun_logs_audit-${cluster_id}_jsonfile Indique à Logtail d'analyser le fichier journal au format JSON.

Monter le fichier de politique d'audit et le répertoire des journaux

Ajoutez des entrées volumeMounts à la spécification du conteneur :

      volumeMounts:
      - mountPath: /var/log/kubernetes
        name: k8s-audit
      - mountPath: /etc/kubernetes/audit-policy.yaml
        name: audit-policy
        readOnly: true

Ajoutez ensuite les entrées volumes correspondantes au niveau de la spécification du pod :

    volumes:
    - hostPath:
        path: /var/log/kubernetes
        type: DirectoryOrCreate
      name: k8s-audit
    - hostPath:
        path: /etc/kubernetes/audit-policy.yaml
        type: FileOrCreate
      name: audit-policy

Étape 3 : Installer le composant logtail-ds

Installez le composant logtail-ds pour activer la collecte des journaux depuis les nœuds maîtres. Pour les étapes d'installation, consultez Étape 2 : Installer logtail-ds.

Étapes suivantes

Une fois la configuration terminée, consultez et analysez vos journaux d'audit dans la console ACK. Consultez Utiliser l'audit de cluster.