Présentation
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.
Avant Anthos 1.2, GKE On-Prem n'écrivait les journaux d'audit que sur le disque. Anthos 1.2 introduit une fonctionnalité alpha qui permet d'écrire des journaux d'audit dans Cloud Audit Logging 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.
Vous pouvez configurer GKE On-Prem pour écrire des journaux sur disque ou dans Cloud Audit Logging.
Journaux d'audit sur disque
Par défaut, les journaux d'audit de GKE On-Prem 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. GKE On-Prem conserve jusqu'à 12 Go d'entrées de journal d'audit.
Cloud Audit Logging
Si Cloud Audit Logging est activé, les entrées de journal d'audit pour les activités d'administration de tous les serveurs d'API Kubernetes sont envoyées à Google Cloud, en utilisant le projet et l'emplacement que vous spécifiez lorsque vous créez un cluster d'utilisateur. Lorsque vous activez les journaux d'audit Cloud, GKE On-Prem désactive les journaux d'audit basés sur le disque.
Pour mettre en mémoire tampon et écrire des entrées de journal dans Cloud Audit Logs, GKE On-Prem déploie un pod audit-proxy
sur le cluster d'administrateur.
Ce pod est également disponible en tant que conteneur side-car sur les clusters d'utilisateur.
Limites
Cloud Audit Logging pour GKE On-Prem est une fonctionnalité alpha. Cette version alpha présente plusieurs limites :
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.
Les journaux d'audit Cloud ne sont actuellement pas résilients aux pannes du réseau. Si les entrées de journal ne peuvent pas être exportées vers Google Cloud, elles sont supprimées.
Activer l'API Anthos GKE et l'API Anthos Audit
Pour utiliser Cloud Audit Logging avec GKE On-Prem, procédez comme suit :
Si vous utilisez Anthos 1.4.x ou une version antérieure, activez l'API Anthos GKE.
Si vous utilisez Anthos 1.5 ou une version ultérieure, activez l'API Anthos Audit.
Si vous n'êtes pas sûr ou si vous prévoyez de passer à Anthos 1.5, activez les deux.
Créer un compte de service pour Cloud Audit Logging
Vous disposez déjà de plusieurs comptes de service que vous avez créés pour les utiliser avec GKE On-Prem. Pour cette fonctionnalité alpha, vous devez créer un compte de service supplémentaire et l'ajouter à la liste d'autorisation.
Créez votre compte de service Cloud Audit Logging :
gcloud iam service-accounts create audit-logging-service-account
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
où AUDIT_LOGGING_SERVICE_ACCOUNT_EMAIL est l'adresse e-mail de votre compte de service.
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.
Ajouter votre compte de service à la liste d'autorisation
Pour demander que votre compte de service Cloud Audit Logging soit ajouté à la liste d'autorisation, remplissez le formulaire Cloud Audit Logging pour GKE On-Prem Alpha. Vous recevrez un e-mail de notification une fois l'opération terminée. Pour créer un cluster d'administrateur ou un cluster utilisateur qui active les journaux d'audit Cloud, votre compte de service doit être autorisé.
Créer un cluster d'administrateur avec les journaux d'audit Cloud activés
Vous ne pouvez activer Cloud Audit Logging 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 Logging.
Reportez-vous aux instructions de la section Créer un cluster d'administrateur.
Après avoir exécuté
gkectl create-config
, remplissez votre fichier de configuration (admin-cluster.yaml
) comme d'habitude, mais renseignez aussi la nouvelle sectioncloudAuditLogging
.Définissez
cloudAuditLogging.projectId
sur l'ID de projet du projet Google Cloud dans lequel vous souhaitez afficher les journaux d'audit relatifs à votre cluster d'administrateur.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.Définissez
cloudAuditLogging.serviceAccountKeyPath
sur le chemin d'accès du fichier de clé JSON de votre compte de service Cloud Audit Logging.
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 Logging activé
Si vous n'avez pas encore créé de cluster d'administrateur, reportez-vous aux instructions Créer un cluster d'administrateur.
Si vous disposez déjà d'un cluster d'administrateur, créez un nouveau cluster d'utilisateur en suivant les instructions de la page Créer des clusters d'utilisateur supplémentaires.
Après avoir exécuté
gkectl create-config
, remplissez votre fichier de configuration (user-cluster.yaml
) comme d'habitude, mais renseignez aussi la nouvelle sectioncloudAuditLogging
.Définissez
cloudAuditLogging.projectId
sur l'ID du projet Google Cloud dans lequel vous souhaitez afficher les journaux d'audit concernant votre cluster d'utilisateur.Définissez
cloudAuditLogging.clusterLocation
sur la région Google Cloud où vous souhaitez stocker les journaux d'audit. Nous vous recommandons de choisir une région à proximité de votre centre de données sur site.Définissez
cloudAuditLogging.serviceAccounKeyPath
sur le chemin d'accès du fichier de clé JSON de votre compte de service Cloud Audit Logging.
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.
Activer Cloud Audit Logging sur un cluster d'utilisateur existant
Les journaux Cloud Audit peuvent être activés sur un cluster d'utilisateur existant via la commande gkectl update cluster
.
Remplissez la section cloudAuditLogging
de votre fichier user-cluster.yaml
. (Consultez la section Créer un cluster utilisateur avec Cloud Audit Logging activé pour en savoir plus sur les champs individuels.)
Exécutez ensuite la commande ci-dessous :
gkectl update cluster --config [USER_CLUSTER_YAML] --kubeconfig [ADMIN_CLUSTER_KUBECONFIG]
Désactiver Cloud Audit Logging sur un cluster d'utilisateur existant
Ouvrez le fichier
user-cluster.yaml
qui décrit votre cluster d'utilisateur.Supprimez ou commentez la section
cloudAuditLogging
, puis enregistrez le fichier.Exécutez la commande suivante pour mettre à jour le cluster d'utilisateur :
gkectl update cluster --config [USER_CLUSTER_YAML] --kubeconfig [ADMIN_CLUSTER_KUBECONFIG]
Accéder aux journaux d'audit GKE On-Prem
Journaux d'audit sur disque
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
où [ADMIN_CLUSTER_KUBECONFIG] est le fichier kubeconfig de votre cluster d'administrateur.
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 fichierPersistentVolumeClaim
nommékube-audit-kube-apiserver-0
. Vous pouvez accéder à ces données dans vos propres pods via des entréesvolume
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
ettolerations
à 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
Dans la console Google Cloud, accédez à la page Journaux du menu Journalisation.
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é.
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"
Cliquez sur Envoyer le filtre pour afficher tous les journaux d'audit des clusters GKE On-Prem 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
où [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. La modification de cette règle n'est pas possible pour le moment, mais elle sera disponible dans une version ultérieure.