Tous les produits
Search
Centre de documentation

Container Compute Service:Use the API Server auditing feature of a cluster for security O&M

Dernière mise à jour :Aug 12, 2026

ACK enregistre chaque requête adressée au serveur API Kubernetes : son auteur, la ressource ciblée et le résultat obtenu. Ces journaux d'audit permettent aux administrateurs du cluster de répondre aux questions suivantes : que s'est-il passé ? Quand ? Qui en est à l'origine ? Depuis quel emplacement ?

Les journaux d'audit servent à retracer l'historique des opérations du cluster, à investiguer les incidents de sécurité et à réduire la charge liée aux opérations et à la maintenance (O&M) de la sécurité du cluster.

Prérequis

Avant de commencer, assurez-vous que les conditions suivantes sont remplies :

  • Les quotas de ressources SLS de votre compte ne doivent pas être dépassés. Le dépassement de l'un des quotas suivants empêche l'activation de la journalisation d'audit. Pour vérifier et ajuster les quotas, consultez Adjust resource quotas.

    • Nombre de projets Simple Log Service (SLS)

    • Nombre de Logstores par projet SLS

    • Nombre de tableaux de bord par projet SLS

Étape 1 : Activer l'audit de l'API server

Lors de la création d'un cluster ACK, l'option Enable Log Service est sélectionnée par défaut, ce qui active la fonctionnalité d'audit de l'API server. Si vous ne l'avez pas activée lors de la création du cluster, suivez les étapes ci-dessous.

  1. Connectez-vous à la console ACS. Dans le volet de navigation de gauche, cliquez sur Clusters.

  2. Sur la page Clusters, cliquez sur l'ID du cluster à gérer. Dans le volet de navigation de gauche de la page de détails du cluster, choisissez Security > Audit.

  3. Si la journalisation ou l'audit du cluster n'est pas activé, suivez les instructions à l'écran pour sélectionner un projet SLS et activer l'audit.

Étape 2 : Consulter les rapports d'audit

ACK fournit quatre rapports de journaux d'audit intégrés dans l'onglet Cluster Auditing. Filtrez les événements d'audit par namespace ou par utilisateur Resource Access Management (RAM) pour affiner les résultats.

Important

Ne modifiez pas les rapports d'audit intégrés. Pour créer des rapports personnalisés, utilisez la console Simple Log Service.

Ne modifiez pas les rapports d'audit. Pour personnaliser ces rapports, créez-en de nouveaux dans la console Simple Log Service.

Après avoir consulté les résultats d'un rapport, cliquez sur l'icône située dans le coin supérieur droit de n'importe quelle zone de graphique pour accéder à des options supplémentaires, telles que l'affichage plein écran ou l'aperçu de la requête.

Vue d'ensemble du centre d'audit

Cette vue présente un résumé des événements du cluster ainsi que des détails sur les événements prioritaires : opérations des utilisateurs RAM, accès via le réseau public, exécution de commandes dans les conteneurs, suppression de ressources, accès aux Secrets et risques de sécurité liés aux CVE Kubernetes.

Vue d'ensemble des opérations sur les ressources

Ce rapport affiche les statistiques de création, de mise à jour, de suppression et d'accès pour les types de ressources courants :

  • Calcul : Deployments, StatefulSets, Jobs, CronJobs, pods et DaemonSets

  • Réseau : Services et Ingresses

  • Stockage : ConfigMaps, Secrets et PersistentVolumeClaims

  • Contrôle d'accès : Roles, ClusterRoles, RoleBindings et ClusterRoleBindings

Détails des opérations sur les ressources

Cette section affiche une liste détaillée des opérations pour un type de ressource spécifique. Sélectionnez ou saisissez un type de ressource pour lancer une requête en temps réel. Le rapport indique le nombre total d'événements, la répartition par namespace, le taux de réussite, la tendance chronologique et la liste complète des opérations.

Remarque

Pour interroger des ressources CustomResourceDefinition (CRD) ou d'autres types non répertoriés, saisissez le nom de la ressource au pluriel. Par exemple, pour la CRD AliyunLogConfig, saisissez AliyunLogConfigs.

Risques de sécurité CVE Kubernetes

Ce rapport signale les risques potentiels de sécurité liés aux CVE Kubernetes dans le cluster. Filtrez par ID d'utilisateur RAM pour limiter les résultats à un compte spécifique. Pour obtenir des détails sur les CVE et les correctifs, consultez [[CVE Security] Vulnerability Fix Announcement](t2551161.xdita#).

(Facultatif) Étape 3 : Consulter les enregistrements détaillés des journaux

Pour effectuer des requêtes personnalisées et des analyses approfondies, consultez les enregistrements bruts des journaux d'audit dans la console SLS.

Remarque

Par défaut, les données des journaux d'audit sont conservées pendant 30 jours. Pour modifier cette durée de conservation, consultez Manage a Logstore.

  1. Connectez-vous à la console ACS. Dans le volet de navigation de gauche, cliquez sur Clusters.

  2. Sur la page Clusters, cliquez sur le nom du cluster à gérer. Dans le volet de navigation de gauche de la page de détails du cluster, cliquez sur Cluster Information.

  3. Dans l'onglet Basic Information, localisez la section Cluster Resources et cliquez sur l'ID du projet situé à côté de Log Service Project. Dans la liste des projets, cliquez sur le Logstore nommé audit-${clusterid}.

    Important

    Des index sont préconfigurés pour le Logstore d'audit. Ne les modifiez pas, car cela pourrait compromettre le fonctionnement des rapports intégrés.

  4. Saisissez une requête dans le champ de recherche, définissez une plage horaire (par exemple, les 15 dernières minutes), puis cliquez sur Search & Analyze.

Modèles de requêtes courants

Objectif de la recherche Requête
Toutes les opérations d'un utilisateur RAM Saisissez l'ID de l'utilisateur RAM
Toutes les opérations sur une ressource spécifique Saisissez le nom de la ressource (Deployment, Service, Secret, etc.)
Opérations en excluant les composants système NOT user.username: node NOT user.username: serviceaccount NOT user.username: apiserver NOT user.username: kube-scheduler NOT user.username: kube-controller-manager

Pour consulter la syntaxe complète des requêtes et des analyses, reportez-vous à Query and analysis methods for Simple Log Service.

(Facultatif) Étape 4 : Configurer les alertes

La fonctionnalité d'alerte SLS permet de recevoir des notifications en temps réel lorsque des opérations spécifiques se produisent. Les canaux de notification pris en charge incluent les chatbots DingTalk, les webhooks personnalisés et le Notification Center. Pour obtenir les instructions de configuration, consultez Quickly set log-based alerts.

Exemple 1 : Alerte sur les commandes exec dans les conteneurs

Déclenchez une alerte lorsqu'un utilisateur exécute une commande dans un conteneur (kubectl exec). L'alerte précise le conteneur concerné, la commande exécutée, l'opérateur, l'ID de l'événement, l'horodatage et l'adresse IP source.

Requête :

verb : create and objectRef.subresource:exec and stage:  ResponseStarted | SELECT auditID as "Event ID", date_format(from_unixtime(__time__), '%Y-%m-%d %T' ) as "Operation 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 "Operator Account",
CASE WHEN json_array_length(sourceIPs) = 1 then json_format(json_array_get(sourceIPs, 0)) ELSE  sourceIPs END
as "Source Address" order by "Operation Time" desc  limit 10000

Expression conditionnelle : Operation Event =~ ".*"

Exemple 2 : Alerte sur les échecs d'accès à l'API server depuis le réseau public

Déclenchez une alerte lorsque le nombre d'accès provenant d'une IP publique atteint un seuil donné (par exemple 10 tentatives) et que le taux d'échec dépasse un certain pourcentage (par exemple 50 %). L'alerte indique l'IP source, la localisation géographique et si l'IP est considérée comme à haut risque.

Requête :

* | select ip as "Source Address", total as "Access Count", round(rate * 100, 2) as "Failure Rate %", failCount as "Illegal Access Count", CASE when security_check_ip(ip) = 1 then 'yes' else 'no' end  as "Is High-Risk IP",  ip_to_country(ip) as "Country", ip_to_province(ip) as "Province", ip_to_city(ip) as "City", ip_to_provider(ip) as "Carrier" 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('<Your subnet IP address>')) ORDER by "Access Count" desc limit 10000

Expression conditionnelle : Source Address =~ ".*"

Autres opérations

Modifier le projet de journaux

Pour migrer les données des journaux d'audit vers un autre projet SLS :

  1. Connectez-vous à la console ACS. Dans le volet de navigation de gauche, cliquez sur Clusters.

  2. Sur la page Clusters, cliquez sur l'ID du cluster à gérer. Dans le volet de navigation de gauche de la page de détails du cluster, choisissez Security > Audit.

  3. Dans le coin supérieur droit de l'onglet Cluster Auditing, cliquez sur Change Log Service Project.

Désactiver l'audit de l'API server

  1. Connectez-vous à la console ACS. Dans le volet de navigation de gauche, cliquez sur Clusters.

  2. Sur la page Clusters, cliquez sur l'ID du cluster à gérer. Dans le volet de navigation de gauche de la page de détails du cluster, choisissez Security > Audit.

  3. Dans le coin supérieur droit de l'onglet Cluster Auditing, cliquez sur Disable Cluster Auditing.

Utiliser une solution de journalisation tierce dans un cluster ACS

SLS constitue la solution de journalisation par défaut pour les journaux d'audit des clusters ACK. Pour utiliser un service de journalisation tiers, désactivez SLS lors de la création du cluster et connectez votre solution préférée afin de collecter et récupérer les journaux d'audit.

Référence : Configuration de l'audit de l'API server

Lorsque l'option Enable Log Service est sélectionnée durant la création du cluster, la fonctionnalité d'audit de l'API server s'active automatiquement. Elle collecte les données d'événements selon une politique d'audit et écrit ces événements dans le backend de journalisation.

Politique d'audit

Une politique d'audit définit quelles requêtes sont collectées et avec quel niveau de détail. ACK utilise le paramètre --audit-policy-file pour appliquer cette politique au démarrage de l'API server.

Les niveaux d'audit suivants sont disponibles :

Niveau d'audit Données collectées Exemples d'événements
None Aucune donnée — les événements correspondant à cette règle sont ignorés Surveillance (watch) des endpoints/services par kube-proxy ; requêtes GET de kubelet sur les nœuds ; URL de vérification d'état (/healthz*, /version, /swagger*)
Metadata Uniquement les métadonnées de la requête (utilisateur, horodatage, ressource, verbe) — sans corps de requête ni de réponse Accès aux Secrets et ConfigMaps ; requêtes TokenReview
Request Métadonnées et corps de la requête — sans corps de réponse. Ne s'applique pas aux requêtes hors ressources. Opérations GET, list et watch sur les groupes d'API Kubernetes standards
RequestResponse Métadonnées, corps de la requête et corps de la réponse. Ne s'applique pas aux requêtes hors ressources. Opérations de création, mise à jour et suppression sur les groupes d'API Kubernetes standards
Remarque

Les événements d'audit ne sont pas enregistrés à l'étape RequestReceived. L'enregistrement débute après l'envoi de l'en-tête de réponse.

Le YAML suivant présente la politique d'audit par défaut utilisée par les clusters ACK :

Afficher le fichier YAML d'exemple

apiVersion: audit.k8s.io/v1 # Required. The value is audit.k8s.io/v1 for clusters of Kubernetes v1.24 or later, and audit.k8s.io/v1beta1 for clusters of earlier versions.
kind: Policy
# Do not generate audit events for requests at the RequestReceived stage.
omitStages:
  - "RequestReceived"
rules:
  # The following types of requests are frequent and have low potential risks. We recommend that you set the level to None to skip auditing.
  - 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"]
  # For read-only URLs, such as /healthz*, /version*, and /swagger*, set the level to None to skip auditing.
  - level: None
    nonResourceURLs:
      - /healthz*
      - /version
      - /swagger*
  # Set the level to None for events to skip auditing.
  - level: None
    resources:
      - group: "" # core
        resources: ["events"]
  # For interfaces such as Secrets, ConfigMaps, and TokenReviews that may contain sensitive information or binary files, set the level to Metadata.
  - level: Metadata
    resources:
      - group: "" # core
        resources: ["secrets", "configmaps"]
      - group: authentication.k8s.io
        resources: ["tokenreviews"]
  # Requests may return large amounts of data. Set the level to Request to not collect the response body.
  - 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"
  # For known Kubernetes APIs, the level is set to RequestResponse by default to return 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"
  # For all other requests, the level is set to Metadata by default.
  - level: Metadata

Backend d'audit

Après leur collecte, les événements d'audit sont écrits dans le système de fichiers du backend de journalisation au format JSON standard.