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.
Connectez-vous à la console ACS. Dans le volet de navigation de gauche, cliquez sur Clusters.
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.
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.
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.
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.
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.
Connectez-vous à la console ACS. Dans le volet de navigation de gauche, cliquez sur Clusters.
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.
-
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}.ImportantDes 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.
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 :
Connectez-vous à la console ACS. Dans le volet de navigation de gauche, cliquez sur Clusters.
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.
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
Connectez-vous à la console ACS. Dans le volet de navigation de gauche, cliquez sur Clusters.
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.
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 |
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 :
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.