Journaux d'audit

Aperçu

Clusters Anthos sur VMware (GKE On-Prem) utilise les journaux d'audit Kubernetes, qui conservent un enregistrement chronologique des appels passés au serveur d'API Kubernetes d'un cluster. Les journaux d'audit sont utiles pour analyser les requêtes API suspectes et collecter des statistiques.

Vous pouvez configurer un cluster pour écrire des journaux d'audit sur disque ou dans Cloud Audit Logs dans un projet Google Cloud. Écrire dans Cloud Audit Logging présente plusieurs avantages par rapport à l'écriture sur disque, voire à la capture de journaux dans un système de journalisation sur site :

  • Les journaux d'audit de tous les clusters Anthos GKE peuvent être centralisés.
  • Les entrées de journal écrites dans Cloud Audit Logging sont immuables.
  • Les entrées Cloud Audit Logging sont conservées pendant 400 jours.
  • Cloud Audit Logging est inclus dans le prix d'Anthos.

Journaux d'audit sur disque

Par défaut, les journaux d'audit sont écrits sur un disque persistant, de sorte que les redémarrages et les mises à niveau de la VM n'entraînent pas leur disparition. Anthos clusters on VMware conserve jusqu'à 12 Go d'entrées de journal d'audit.

Cloud Audit Logs

Si vous activez Cloud Audit Logs pour un cluster, les entrées du journal d'audit des activités d'administration du serveur d'API Kubernetes du cluster sont envoyées à Google Cloud via le projet Google Cloud que vous spécifiez dans le champ cloudAuditLogging.projectID de votre fichier de configuration de cluster. Ce projet Google Cloud est appelé projet de journalisation d'audit.

Votre projet de journalisation d'audit doit être identique à celui de votre projet Connect.

Lorsque vous activez Cloud Audit Logs, Anthos clusters on VMware désactive les journaux d'audit sur disque.

Pour mettre en mémoire tampon et écrire des entrées de journal dans Cloud Audit Logging, Anthos clusters on VMware déploie un pod audit-proxy sur le cluster d'administrateur. Ce composant est également disponible en tant que conteneur side-car sur les clusters d'utilisateur.

Limites

Cloud Audit Logging pour Clusters Anthos sur VMware est une fonctionnalité en version bêta. Cette version bêta présente plusieurs restrictions :

  • La journalisation des accès aux données n'est pas acceptée.

  • La modification de la stratégie d'audit Kubernetes n'est pas acceptée.

  • Cloud Audit Logging n'est pas résilient aux pannes réseau étendues. Si les entrées de journal ne peuvent pas être exportées vers Google Cloud, elles sont mises en cache dans un tampon de disque de 10 Go. Si ce tampon est plein, les entrées suivantes sont ignorées.

Activer l'API Anthos Audit

Activez l'API Anthos Audit dans votre projet de journalisation d'audit.

Activer l'API Anthos Audit

Créer un compte de service pour Cloud Audit Logs

Vous disposez déjà d'un ou de plusieurs comptes de service que vous avez créés pour les utiliser avec Anthos clusters on VMware. Pour cette fonctionnalité, vous devez créer un compte de service supplémentaire appelé compte de service de journalisation d'audit.

  1. Créez votre compte de service de journalisation d'audit :

    gcloud iam service-accounts create audit-logging-service-account
  2. Créez un fichier de clé JSON pour votre compte de service Cloud Audit Logging :

    gcloud iam service-accounts keys create audit-logging-key.json \
       --iam-account AUDIT_LOGGING_SERVICE_ACCOUNT_EMAIL
    

    AUDIT_LOGGING_SERVICE_ACCOUNT_EMAIL est l'adresse e-mail de votre compte de service.

  3. Enregistrez audit-logging-key.json sur le poste de travail administrateur au même emplacement que les autres clés de votre compte de service.

Créer un cluster d'administrateur avec Cloud Audit Logs activé

Vous ne pouvez activer Cloud Audit Logs pour un cluster d'administrateur que lors de la création du cluster. Vous ne pouvez pas modifier un cluster d'administrateur existant pour activer Cloud Audit Logs.

  1. Consultez la section Créer un cluster d'administrateur.

  2. Dans votre fichier de configuration de cluster d'utilisateur, remplissez la section cloudAuditLogging.

  3. Définissez cloudAuditLogging.projectId sur l'ID de votre projet de journalisation d'audit.

  4. Définissez cloudAuditLogging.clusterLocation sur la région Google Cloud où vous souhaitez stocker les journaux d'audit. Pour une latence optimale, choisissez une région proche de votre centre de données sur site.

  5. Définissez cloudAuditLogging.serviceAccountKeyPath sur le chemin d'accès du fichier de clé JSON pour votre compte de service de journalisation d'audit.

Exemple :

cloudAuditLogging:
  projectId: "my-project"
  clusterLocation: "us-west1"
  serviceAccountKeyPath: "/my-key-folder/audit-logging-key.json"

Continuez de créer le cluster comme d'habitude.

Créer un cluster d'utilisateur avec Cloud Audit Logs activé

  1. Consultez la section Créer un cluster d'utilisateur.

  2. Dans votre fichier de configuration de cluster d'utilisateur, remplissez la section cloudAuditLogging.

  3. Définissez cloudAuditLogging.projectId sur l'ID de votre projet de journalisation d'audit.

  4. Définissez cloudAuditLogging.clusterLocation sur la région Google Cloud où vous souhaitez stocker les journaux d'audit. Pour une latence optimale, choisissez une région proche de votre centre de données sur site.

  5. Définissez cloudAuditLogging.serviceAccounKeyPath sur le chemin d'accès du fichier de clé JSON de votre compte de service Cloud Audit Logging.

  6. Assurez-vous que la section gkeConnect est renseignée et que la valeur de gkeConnect.projectID est identique à cloudAuditLogging.projectID.

Exemple :

gkeConnect:
  projectId: "my-project"
  registerServiceAccountKeyPath: "/my-key-fokder/connect-register-key.json"

cloudAuditLogging:
  projectId: "my-project"
  clusterLocation: "us-west1"
  serviceAccountKeyPath: "/my-key-folder/audit-logging-key.json"

Continuez de créer le cluster comme d'habitude.

Activer Cloud Audit Logs pour un cluster d'utilisateur existant

Pour activer Cloud Audit Logging, le cluster doit déjà être enregistré. Autrement dit, vous avez rempli la section gkeConnect du fichier de configuration du cluster avant de créer le cluster.

  1. Dans votre fichier de configuration de cluster d'utilisateur, remplissez la section cloudAuditLogging.

  2. Définissez cloudAuditLogging.projectId sur l'ID de votre projet de journalisation d'audit.

  3. Définissez cloudAuditLogging.clusterLocation sur la région Google Cloud où vous souhaitez stocker les journaux d'audit. Pour une latence optimale, choisissez une région proche de votre centre de données sur site.

  4. Définissez cloudAuditLogging.serviceAccounKeyPath sur le chemin d'accès du fichier de clé JSON de votre compte de service Cloud Audit Logging.

  5. Assurez-vous que la section gkeConnect est renseignée et que la valeur de gkeConnect.projectID est identique à cloudAuditLogging.projectID.

Exemple :

gkeConnect:
  projectId: "my-project"
  registerServiceAccountKeyPath: "/my-key-fokder/connect-register-key.json"

cloudAuditLogging:
  projectId: "my-project"
  clusterLocation: "us-west1"
  serviceAccountKeyPath: "/my-key-folder/audit-logging-key.json"

Mettez à jour le cluster d'utilisateur :

gkectl update cluster --kubeconfig [ADMIN_CLUSTER_KUBECONFIG] --config [USER_CLUSTER_CONFIG]

Désactiver Cloud Audit Logs pour un cluster d'utilisateur existant

  1. Dans le fichier de configuration du cluster d'utilisateur, supprimez la section cloudAuditLogging.

  2. Mettez à jour le cluster d'utilisateur :

gkectl update cluster --kubeconfig [ADMIN_CLUSTER_KUBECONFIG] --config [USER_CLUSTER_CONFIG]

Accéder aux journaux d'audit

Journaux d'audit sur disque

  1. Affichez les serveurs d'API Kubernetes exécutés dans votre cluster d'administrateur et tous les clusters d'utilisateur associés :

    kubectl --kubeconfig [ADMIN_CLUSTER_KUBECONFIG] get pods --all-namespaces -l component=kube-apiserver
    

    [ADMIN_CLUSTER_KUBECONFIG] est le fichier kubeconfig de votre cluster d'administrateur.

  2. Téléchargez les journaux d'audit du serveur d'API :

    kubectl cp -n [NAMESPACE] [APISERVER_POD_NAME]:/var/log/kube-audit/kube-apiserver-audit.log /tmp/kubeaudit.log
    

    Cette commande extrait le dernier fichier journal, qui peut contenir jusqu'à 1 Go de données pour le cluster d'administrateur et jusqu'à 850 Go pour les clusters d'utilisateur.

    Vous pouvez également trouver les journaux d'audit du cluster d'administrateur sur les nœuds du plan de contrôle sous /var/log/kube-audit/kube-apiserver-audit.log. Les journaux d'audit du cluster d'utilisateur se trouvent dans le fichier PersistentVolumeClaim nommé kube-audit-kube-apiserver-0. Vous pouvez accéder à ces données dans vos propres pods via des entrées volume comme suit :

    volumes:
    ‐ name: kube-audit
      hostPath:
        path: /var/log/kube-audit
        type: ""
    
    volumes:
    ‐ name: kube-audit
      persistentVolumeClaim:
        claimName: kube-audit-kube-apiserver-0
        readOnly: true
    

    Pour planifier votre pod sur le nœud de cluster d'administrateur approprié (et uniquement pour ce nœud), vous devez ajouter les sections nodeSelector et tolerations à votre spécification de pod, comme suit :

     spec:
      nodeSelector:
        node-role.kubernetes.io/master: ''
      tolerations:
      ‐ key: node-role.kubernetes.io/master
        value: ""
        effect: NoSchedule
    

    Pour le cluster d'utilisateur, utilisez ce nodeSelector :

    spec:
     nodeSelector:
       kubernetes.googleapis.com/cluster-name: [USER_CLUSTER_NAME]
    

    Les anciens enregistrements d'audit sont conservés dans des fichiers distincts. Pour afficher ces fichiers, procédez comme suit :

    kubectl exec -n [NAMESPACE] [APISERVER_POD_NAME] -- ls /var/log/kube-audit -la
    

    Le nom de fichier de chaque journal d'audit comporte un horodatage qui correspond à la rotation du fichier. Un fichier contient les journaux d'audit jusqu'à cette date et cette heure.

Cloud Audit Logging

Console

  1. Dans la console Google Cloud, accédez à la page Journaux du menu Journalisation.

    Accéder à l'explorateur de journaux

  2. Dans la zone de recherche Filtrer par libellé ou texte recherché, juste au-dessus des menus déroulants décrits ci-dessus, cliquez sur la flèche vers le bas pour ouvrir le menu déroulant. Dans le menu, sélectionnez Convertir en filtre avancé.

  3. Renseignez la zone de texte avec le filtre suivant :

    resource.type="k8s_cluster"
    logName="projects/[PROJECT_ID]/logs/externalaudit.googleapis.com%2Factivity"
    protoPayload.serviceName="anthosgke.googleapis.com"
    
  4. Cliquez sur Envoyer le filtre pour afficher tous les journaux d'audit des clusters Anthos sur VMware qui ont été configurés pour se connecter à ce projet.

gcloud

Répertoriez les deux premières entrées du journal d'activité d'administration de votre projet qui s'appliquent au type de ressource k8s_cluster :

gcloud logging read \
    'logName="projects/[PROJECT_ID]/logs/externalaudit.googleapis.com%2Factivity" \
    AND resource.type="k8s_cluster" \
    AND protoPayload.serviceName="anthosgke.googleapis.com" ' \
    --limit 2 \
    --freshness 300d

[PROJECT_ID] correspond à l'ID de votre projet.

La sortie affiche deux entrées de journal. Notez que pour chaque entrée de journal, le champ logName a la valeur projects/[PROJECT_ID]/logs/externalaudit.googleapis.com%2Factivity et que protoPayload.serviceName est égal à anthosgke.googleapis.com.

Règle d'audit

Le comportement de Cloud Audit Logging est déterminé par une règle de journalisation d'audit Kubernetes configurée de manière statique. Il n'est actuellement pas possible de modifier cette règle.