6.4. Comprendre l'opérateur d'intégrité des fichiers
L'opérateur d'intégrité des fichiers est un opérateur de la plateforme de conteneurs OpenShift qui exécute continuellement des contrôles d'intégrité des fichiers sur les nœuds du cluster. Il déploie un ensemble de démons qui initialise et exécute des conteneurs AIDE (advanced intrusion detection environment) privilégiés sur chaque nœud, en fournissant un objet d'état avec un journal des fichiers modifiés lors de l'exécution initiale des pods de l'ensemble de démons.
Actuellement, seuls les nœuds Red Hat Enterprise Linux CoreOS (RHCOS) sont pris en charge.
6.4.1. Création de la ressource personnalisée FileIntegrity Copier lienLien copié sur presse-papiers!
Une instance d'une ressource personnalisée (CR) FileIntegrity
représente un ensemble d'analyses continues de l'intégrité des fichiers pour un ou plusieurs nœuds.
Chaque CR FileIntegrity
est soutenu par un ensemble de démons exécutant AIDE sur les nœuds correspondant à la spécification du CR FileIntegrity
.
Procédure
Créez l'exemple suivant
FileIntegrity
CR nomméworker-fileintegrity.yaml
pour activer les analyses sur les nœuds de travail :Exemple de FileIntegrity CR
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- Définit le sélecteur pour la planification des analyses de nœuds.
- 2
- Spécifier
tolerations
pour planifier les nœuds avec des taches personnalisées. Si elle n'est pas spécifiée, une tolérance par défaut permettant l'exécution sur les nœuds principaux et infra est appliquée. - 3
- Définir un site
ConfigMap
contenant une configuration AIDE à utiliser. - 4
- Nombre de secondes de pause entre les contrôles d'intégrité AIDE. Les contrôles AIDE fréquents sur un nœud peuvent être gourmands en ressources, il peut donc être utile de spécifier un intervalle plus long. La valeur par défaut est de 900 secondes (15 minutes).
- 5
- Le nombre maximum de sauvegardes de la base de données et des journaux AIDE (restes du processus de réinitialisation) à conserver sur un nœud. Les anciennes sauvegardes au-delà de ce nombre sont automatiquement élaguées par le démon. La valeur par défaut est de 5.
- 6
- Nombre de secondes à attendre avant de lancer le premier contrôle d'intégrité AIDE. La valeur par défaut est 0.
- 7
- L'état d'exécution de l'instance
FileIntegrity
. Les statuts sontInitializing
,Pending
, ouActive
.
Initializing
L'objet
FileIntegrity
est en train d'initialiser ou de réinitialiser la base de données AIDE.Pending
Le déploiement de
FileIntegrity
est toujours en cours de création.Active
Les analyses sont actives et en cours.
Appliquer le fichier YAML à l'espace de noms
openshift-file-integrity
:oc apply -f worker-fileintegrity.yaml -n openshift-file-integrity
$ oc apply -f worker-fileintegrity.yaml -n openshift-file-integrity
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
Vérification
Confirmez que l'objet
FileIntegrity
a été créé avec succès en exécutant la commande suivante :oc get fileintegrities -n openshift-file-integrity
$ oc get fileintegrities -n openshift-file-integrity
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Exemple de sortie
NAME AGE worker-fileintegrity 14s
NAME AGE worker-fileintegrity 14s
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
6.4.2. Vérification de l'état de la ressource personnalisée FileIntegrity Copier lienLien copié sur presse-papiers!
La ressource personnalisée (CR) FileIntegrity
signale son état par l'intermédiaire de la sous-ressource .status.phase
.
Procédure
Pour demander l'état de
FileIntegrity
CR, exécutez la commande suivante :oc get fileintegrities/worker-fileintegrity -o jsonpath="{ .status.phase }"
$ oc get fileintegrities/worker-fileintegrity -o jsonpath="{ .status.phase }"
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Exemple de sortie
Active
Active
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
6.4.3. Phases de ressources personnalisées FileIntegrity Copier lienLien copié sur presse-papiers!
-
Pending
- Phase qui suit la création de la ressource personnalisée (CR). -
Active
- Phase au cours de laquelle le démon de sauvegarde est opérationnel. -
Initializing
- Phase de réinitialisation de la base de données AIDE.
6.4.4. Comprendre l'objet FileIntegrityNodeStatuses Copier lienLien copié sur presse-papiers!
Les résultats de l'analyse du CR FileIntegrity
sont consignés dans un autre objet appelé FileIntegrityNodeStatuses
.
oc get fileintegritynodestatuses
$ oc get fileintegritynodestatuses
Exemple de sortie
NAME AGE worker-fileintegrity-ip-10-0-130-192.ec2.internal 101s worker-fileintegrity-ip-10-0-147-133.ec2.internal 109s worker-fileintegrity-ip-10-0-165-160.ec2.internal 102s
NAME AGE
worker-fileintegrity-ip-10-0-130-192.ec2.internal 101s
worker-fileintegrity-ip-10-0-147-133.ec2.internal 109s
worker-fileintegrity-ip-10-0-165-160.ec2.internal 102s
Les résultats de l'objet FileIntegrityNodeStatus
peuvent prendre un certain temps avant d'être disponibles.
Il y a un objet de résultat par nœud. L'attribut nodeName
de chaque objet FileIntegrityNodeStatus
correspond au nœud analysé. L'état de l'analyse de l'intégrité du fichier est représenté dans le tableau results
, qui contient les conditions d'analyse.
oc get fileintegritynodestatuses.fileintegrity.openshift.io -ojsonpath='{.items[*].results}' | jq
$ oc get fileintegritynodestatuses.fileintegrity.openshift.io -ojsonpath='{.items[*].results}' | jq
L'objet fileintegritynodestatus
signale le dernier état d'une exécution AIDE et indique l'état sous la forme Failed
, Succeeded
ou Errored
dans un champ status
.
oc get fileintegritynodestatuses -w
$ oc get fileintegritynodestatuses -w
Exemple de sortie
6.4.5. Types de statut FileIntegrityNodeStatus CR Copier lienLien copié sur presse-papiers!
Ces conditions sont signalées dans le tableau de résultats de l'état FileIntegrityNodeStatus
CR correspondant :
-
Succeeded
- Le contrôle d'intégrité a réussi ; les fichiers et répertoires couverts par le contrôle AIDE n'ont pas été modifiés depuis la dernière initialisation de la base de données. -
Failed
- Le contrôle d'intégrité a échoué ; certains fichiers ou répertoires couverts par le contrôle AIDE ont été modifiés depuis la dernière initialisation de la base de données. -
Errored
- Le scanner AIDE a rencontré une erreur interne.
6.4.5.1. FileIntegrityNodeStatus CR exemple de réussite Copier lienLien copié sur presse-papiers!
Exemple de sortie d'une condition avec un statut de réussite
Dans ce cas, les trois scanners ont réussi et il n'y a jusqu'à présent aucune autre condition.
6.4.5.2. FileIntegrityNodeStatus Exemple de statut d'échec CR Copier lienLien copié sur presse-papiers!
Pour simuler une condition d'échec, modifiez l'un des fichiers suivis par AIDE. Par exemple, modifiez /etc/resolv.conf
sur l'un des nœuds de travail :
oc debug node/ip-10-0-130-192.ec2.internal
$ oc debug node/ip-10-0-130-192.ec2.internal
Exemple de sortie
Au bout d'un certain temps, la condition Failed
est signalée dans le tableau des résultats de l'objet FileIntegrityNodeStatus
correspondant. La condition Succeeded
précédente est conservée, ce qui vous permet de déterminer le moment où la vérification a échoué.
oc get fileintegritynodestatuses.fileintegrity.openshift.io/worker-fileintegrity-ip-10-0-130-192.ec2.internal -ojsonpath='{.results}' | jq -r
$ oc get fileintegritynodestatuses.fileintegrity.openshift.io/worker-fileintegrity-ip-10-0-130-192.ec2.internal -ojsonpath='{.results}' | jq -r
Alternativement, si vous ne mentionnez pas le nom de l'objet, exécutez :
oc get fileintegritynodestatuses.fileintegrity.openshift.io -ojsonpath='{.items[*].results}' | jq
$ oc get fileintegritynodestatuses.fileintegrity.openshift.io -ojsonpath='{.items[*].results}' | jq
Exemple de sortie
La condition Failed
pointe vers une carte de configuration qui donne plus de détails sur ce qui a échoué et pourquoi :
oc describe cm aide-ds-worker-fileintegrity-ip-10-0-130-192.ec2.internal-failed
$ oc describe cm aide-ds-worker-fileintegrity-ip-10-0-130-192.ec2.internal-failed
Exemple de sortie
En raison de la limite de taille des données de la carte de configuration, les journaux AIDE de plus de 1 Mo sont ajoutés à la carte de configuration des défaillances sous la forme d'une archive gzip codée en base64. Dans ce cas, vous souhaitez diriger la sortie de la commande ci-dessus vers base64 --decode | gunzip
. Les journaux compressés sont indiqués par la présence d'une clé d'annotation file-integrity.openshift.io/compressed
dans la carte de configuration.
6.4.6. Comprendre les événements Copier lienLien copié sur presse-papiers!
Les transitions dans l'état des objets FileIntegrity
et FileIntegrityNodeStatus
sont enregistrées par events. L'heure de création de l'événement reflète la dernière transition, par exemple de Initializing
à Active
, et pas nécessairement le dernier résultat de l'analyse. Cependant, l'événement le plus récent reflète toujours l'état le plus récent.
oc get events --field-selector reason=FileIntegrityStatus
$ oc get events --field-selector reason=FileIntegrityStatus
Exemple de sortie
LAST SEEN TYPE REASON OBJECT MESSAGE 97s Normal FileIntegrityStatus fileintegrity/example-fileintegrity Pending 67s Normal FileIntegrityStatus fileintegrity/example-fileintegrity Initializing 37s Normal FileIntegrityStatus fileintegrity/example-fileintegrity Active
LAST SEEN TYPE REASON OBJECT MESSAGE
97s Normal FileIntegrityStatus fileintegrity/example-fileintegrity Pending
67s Normal FileIntegrityStatus fileintegrity/example-fileintegrity Initializing
37s Normal FileIntegrityStatus fileintegrity/example-fileintegrity Active
Lorsqu'une analyse de nœud échoue, un événement est créé avec les informations add/changed/removed
et config map.
oc get events --field-selector reason=NodeIntegrityStatus
$ oc get events --field-selector reason=NodeIntegrityStatus
Exemple de sortie
Toute modification du nombre de fichiers ajoutés, modifiés ou supprimés entraîne un nouvel événement, même si l'état du nœud n'a pas changé.
oc get events --field-selector reason=NodeIntegrityStatus
$ oc get events --field-selector reason=NodeIntegrityStatus
Exemple de sortie