5.15. Comprendre les définitions de ressources personnalisées
L'opérateur de conformité dans OpenShift Container Platform vous fournit plusieurs définitions de ressources personnalisées (CRD) pour réaliser les analyses de conformité. Pour exécuter un contrôle de conformité, il s'appuie sur les politiques de sécurité prédéfinies, qui sont dérivées du projet communautaire ComplianceAsCode. L'opérateur de conformité convertit ces politiques de sécurité en CRD, que vous pouvez utiliser pour exécuter des analyses de conformité et obtenir des mesures correctives pour les problèmes détectés.
5.15.1. Flux de travail des CRD
Le document de référence vous fournit le flux de travail suivant pour effectuer les contrôles de conformité :
- Définir les exigences de l'analyse de conformité
- Configurer les paramètres de l'analyse de conformité
- Traiter les exigences de conformité avec les paramètres des analyses de conformité
- Contrôler les analyses de conformité
- Vérifier les résultats de l'analyse de conformité
5.15.2. Définir les exigences de l'analyse de conformité
Par défaut, les CRD de l'opérateur de conformité comprennent les objets ProfileBundle
et Profile
, dans lesquels vous pouvez définir et fixer les règles pour vos exigences d'analyse de conformité. Vous pouvez également personnaliser les profils par défaut en utilisant un objet TailoredProfile
.
5.15.2.1. Objet ProfileBundle
Lorsque vous installez l'Opérateur de Conformité, il inclut des objets ProfileBundle
prêts à être exécutés. L'Opérateur de Conformité analyse l'objet ProfileBundle
et crée un objet Profile
pour chaque profil de l'ensemble. Il analyse également les objets Rule
et Variable
, qui sont utilisés par l'objet Profile
.
Exemple d'objet ProfileBundle
apiVersion: compliance.openshift.io/v1alpha1
kind: ProfileBundle
name: <profile bundle name>
namespace: openshift-compliance
status:
dataStreamStatus: VALID 1
- 1
- Indique si l'opérateur de conformité a pu analyser les fichiers de contenu.
Lorsque le site contentFile
échoue, un attribut errorMessage
apparaît, qui fournit des détails sur l'erreur qui s'est produite.
Résolution de problèmes
Lorsque vous revenez à une image de contenu connue à partir d'une image non valide, l'objet ProfileBundle
ne répond plus et affiche l'état PENDING
. En guise de solution de contournement, vous pouvez passer à une image différente de la précédente. Vous pouvez également supprimer et recréer l'objet ProfileBundle
pour revenir à l'état de fonctionnement.
5.15.2.2. Objet du profil
L'objet Profile
définit les règles et les variables qui peuvent être évaluées pour une certaine norme de conformité. Il contient des détails analysés sur un profil OpenSCAP, tels que son identifiant XCCDF et les contrôles de profil pour un type Node
ou Platform
. Vous pouvez utiliser directement l'objet Profile
ou le personnaliser davantage en utilisant un objet TailorProfile
.
Vous ne pouvez pas créer ou modifier l'objet Profile
manuellement car il est dérivé d'un seul objet ProfileBundle
. En règle générale, un seul objet ProfileBundle
peut inclure plusieurs objets Profile
.
Exemple d'objet Profile
apiVersion: compliance.openshift.io/v1alpha1 description: <description of the profile> id: xccdf_org.ssgproject.content_profile_moderate 1 kind: Profile metadata: annotations: compliance.openshift.io/product: <product name> compliance.openshift.io/product-type: Node 2 creationTimestamp: "YYYY-MM-DDTMM:HH:SSZ" generation: 1 labels: compliance.openshift.io/profile-bundle: <profile bundle name> name: rhcos4-moderate namespace: openshift-compliance ownerReferences: - apiVersion: compliance.openshift.io/v1alpha1 blockOwnerDeletion: true controller: true kind: ProfileBundle name: <profile bundle name> uid: <uid string> resourceVersion: "<version number>" selfLink: /apis/compliance.openshift.io/v1alpha1/namespaces/openshift-compliance/profiles/rhcos4-moderate uid: <uid string> rules: 3 - rhcos4-account-disable-post-pw-expiration - rhcos4-accounts-no-uid-except-zero - rhcos4-audit-rules-dac-modification-chmod - rhcos4-audit-rules-dac-modification-chown title: <title of the profile>
- 1
- Indiquez le nom XCCDF du profil. Utilisez cet identifiant lorsque vous définissez un objet
ComplianceScan
comme valeur de l'attribut de profil de l'analyse. - 2
- Spécifiez une adresse
Node
ouPlatform
. Les profils de nœuds analysent les nœuds du cluster et les profils de plateforme analysent la plateforme Kubernetes. - 3
- Spécifiez la liste des règles pour le profil. Chaque règle correspond à un seul contrôle.
5.15.2.3. Objet de la règle
L'objet Rule
, qui forme les profils, est également exposé en tant qu'objet. Utilisez l'objet Rule
pour définir vos exigences en matière de contrôle de conformité et spécifier comment il pourrait être corrigé.
Exemple d'objet Rule
apiVersion: compliance.openshift.io/v1alpha1 checkType: Platform 1 description: <description of the rule> id: xccdf_org.ssgproject.content_rule_configure_network_policies_namespaces 2 instructions: <manual instructions for the scan> kind: Rule metadata: annotations: compliance.openshift.io/rule: configure-network-policies-namespaces control.compliance.openshift.io/CIS-OCP: 5.3.2 control.compliance.openshift.io/NERC-CIP: CIP-003-3 R4;CIP-003-3 R4.2;CIP-003-3 R5;CIP-003-3 R6;CIP-004-3 R2.2.4;CIP-004-3 R3;CIP-007-3 R2;CIP-007-3 R2.1;CIP-007-3 R2.2;CIP-007-3 R2.3;CIP-007-3 R5.1;CIP-007-3 R6.1 control.compliance.openshift.io/NIST-800-53: AC-4;AC-4(21);CA-3(5);CM-6;CM-6(1);CM-7;CM-7(1);SC-7;SC-7(3);SC-7(5);SC-7(8);SC-7(12);SC-7(13);SC-7(18) labels: compliance.openshift.io/profile-bundle: ocp4 name: ocp4-configure-network-policies-namespaces namespace: openshift-compliance rationale: <description of why this rule is checked> severity: high 3 title: <summary of the rule>
- 1
- Spécifiez le type de contrôle que cette règle exécute. Les profils
Node
analysent les nœuds de cluster et les profilsPlatform
analysent la plateforme Kubernetes. Une valeur vide indique qu'il n'y a pas de contrôle automatisé. - 2
- Indiquez le nom XCCDF de la règle, qui est analysé directement à partir du flux de données.
- 3
- Spécifiez la gravité de la règle en cas d'échec.
L'objet Rule
reçoit une étiquette appropriée pour faciliter l'identification de l'objet ProfileBundle
associé. L'adresse ProfileBundle
est également spécifiée dans l'adresse OwnerReferences
de cet objet.
5.15.2.4. Objet TailoredProfile
Utilisez l'objet TailoredProfile
pour modifier l'objet par défaut Profile
en fonction des besoins de votre organisation. Vous pouvez activer ou désactiver des règles, définir des valeurs variables et justifier la personnalisation. Après validation, l'objet TailoredProfile
crée un objet ConfigMap
, qui peut être référencé par un objet ComplianceScan
.
Vous pouvez utiliser l'objet TailoredProfile
en le référençant dans un objet ScanSettingBinding
. Pour plus d'informations sur ScanSettingBinding
, voir l'objet ScanSettingBinding.
Exemple d'objet TailoredProfile
apiVersion: compliance.openshift.io/v1alpha1 kind: TailoredProfile metadata: name: rhcos4-with-usb spec: extends: rhcos4-moderate 1 title: <title of the tailored profile> disableRules: - name: <name of a rule object to be disabled> rationale: <description of why this rule is checked> status: id: xccdf_compliance.openshift.io_profile_rhcos4-with-usb 2 outputRef: name: rhcos4-with-usb-tp 3 namespace: openshift-compliance state: READY 4
- 1
- Ce nom est facultatif. Nom de l'objet
Profile
sur lequelTailoredProfile
est construit. Si aucune valeur n'est définie, un nouveau profil est créé à partir de la listeenableRules
. - 2
- Spécifie le nom XCCDF du profil personnalisé.
- 3
- Spécifie le nom
ConfigMap
, qui peut être utilisé comme valeur de l'attributtailoringConfigMap.name
d'unComplianceScan
. - 4
- Indique l'état de l'objet tel que
READY
,PENDING
, etFAILURE
. Si l'état de l'objet estERROR
, alors l'attributstatus.errorMessage
fournit la raison de l'échec.
Avec l'objet TailoredProfile
, il est possible de créer un nouvel objet Profile
en utilisant la construction TailoredProfile
. Pour créer un nouvel objet Profile
, définissez les paramètres de configuration suivants :
- un titre approprié
-
extends
la valeur doit être vide l'annotation du type de balayage sur l'objet
TailoredProfile
:compliance.openshift.io/product-type: Platform/Node
NoteSi vous n'avez pas défini l'annotation
product-type
, l'Opérateur de Conformité utilise par défaut le type de scanPlatform
. L'ajout du suffixe-node
au nom de l'objetTailoredProfile
permet d'obtenir le type de balayagenode
.
5.15.3. Configuration des paramètres de l'analyse de conformité
Après avoir défini les exigences du contrôle de conformité, vous pouvez le configurer en spécifiant le type de contrôle, l'occurrence du contrôle et l'emplacement du contrôle. Pour ce faire, l'Opérateur de Conformité vous fournit un objet ScanSetting
.
5.15.3.1. Objet ScanSetting
Utilisez l'objet ScanSetting
pour définir et réutiliser les politiques opérationnelles pour exécuter vos analyses. Par défaut, l'opérateur de conformité crée les objets ScanSetting
suivants :
- default - il effectue un balayage tous les jours à 1 heure du matin sur les nœuds maître et travailleur à l'aide d'un volume persistant (PV) de 1Gi et conserve les trois derniers résultats. La remédiation n'est ni appliquée ni mise à jour automatiquement.
-
default-auto-apply - il effectue un scan tous les jours à 1 heure du matin sur le plan de contrôle et les nœuds de travail à l'aide d'un volume persistant (PV) de 1Gi et conserve les trois derniers résultats. Les valeurs
autoApplyRemediations
etautoUpdateRemediations
sont toutes deux définies comme étant vraies.
Exemple d'objet ScanSetting
Name: default-auto-apply Namespace: openshift-compliance Labels: <none> Annotations: <none> API Version: compliance.openshift.io/v1alpha1 Auto Apply Remediations: true Auto Update Remediations: true Kind: ScanSetting Metadata: Creation Timestamp: 2022-10-18T20:21:00Z Generation: 1 Managed Fields: API Version: compliance.openshift.io/v1alpha1 Fields Type: FieldsV1 fieldsV1: f:autoApplyRemediations: 1 f:autoUpdateRemediations: 2 f:rawResultStorage: .: f:nodeSelector: .: f:node-role.kubernetes.io/master: f:pvAccessModes: f:rotation: f:size: f:tolerations: f:roles: f:scanTolerations: f:schedule: f:showNotApplicable: f:strictNodeScan: Manager: compliance-operator Operation: Update Time: 2022-10-18T20:21:00Z Resource Version: 38840 UID: 8cb0967d-05e0-4d7a-ac1c-08a7f7e89e84 Raw Result Storage: Node Selector: node-role.kubernetes.io/master: Pv Access Modes: ReadWriteOnce Rotation: 3 3 Size: 1Gi 4 Tolerations: Effect: NoSchedule Key: node-role.kubernetes.io/master Operator: Exists Effect: NoExecute Key: node.kubernetes.io/not-ready Operator: Exists Toleration Seconds: 300 Effect: NoExecute Key: node.kubernetes.io/unreachable Operator: Exists Toleration Seconds: 300 Effect: NoSchedule Key: node.kubernetes.io/memory-pressure Operator: Exists Roles: 5 master worker Scan Tolerations: Operator: Exists Schedule: "0 1 * * *" 6 Show Not Applicable: false Strict Node Scan: true Events: <none>
- 1
- La valeur
true
permet d'activer les remédiations automatiques. La valeurfalse
permet de désactiver les remédiations automatiques. - 2
- La valeur
true
permet d'activer les remédiations automatiques pour les mises à jour de contenu. La valeurfalse
désactive les remédiations automatiques pour les mises à jour de contenu. - 3
- Indiquez le nombre de balayages stockés dans le format de résultat brut. La valeur par défaut est
3
. Comme les résultats les plus anciens font l'objet d'une rotation, l'administrateur doit stocker les résultats ailleurs avant que la rotation n'ait lieu. - 4
- Indiquez la taille de la mémoire qui doit être créée pour l'analyse afin de stocker les résultats bruts. La valeur par défaut est
1Gi
- 6
- Spécifiez la fréquence d'exécution de l'analyse au format cron.Note
Pour désactiver la politique de rotation, réglez la valeur sur
0
. - 5
- Spécifiez la valeur de l'étiquette
node-role.kubernetes.io
pour programmer l'analyse pour le typeNode
. Cette valeur doit correspondre au nom d'un siteMachineConfigPool
.
5.15.4. Traitement des exigences de contrôle de conformité avec les paramètres des contrôles de conformité
Lorsque vous avez défini les exigences de l'analyse de conformité et configuré les paramètres pour exécuter les analyses, l'opérateur de conformité les traite à l'aide de l'objet ScanSettingBinding
.
5.15.4.1. Objet ScanSettingBinding
Utilisez l'objet ScanSettingBinding
pour spécifier vos exigences de conformité en référence à l'objet Profile
ou TailoredProfile
. Il est ensuite lié à un objet ScanSetting
, qui fournit les contraintes opérationnelles pour l'analyse. L'opérateur de conformité génère ensuite l'objet ComplianceSuite
sur la base des objets ScanSetting
et ScanSettingBinding
.
Exemple d'objet ScanSettingBinding
apiVersion: compliance.openshift.io/v1alpha1 kind: ScanSettingBinding metadata: name: <name of the scan> profiles: 1 # Node checks - name: rhcos4-with-usb kind: TailoredProfile apiGroup: compliance.openshift.io/v1alpha1 # Cluster checks - name: ocp4-moderate kind: Profile apiGroup: compliance.openshift.io/v1alpha1 settingsRef: 2 name: my-companys-constraints kind: ScanSetting apiGroup: compliance.openshift.io/v1alpha1
La création des objets ScanSetting
et ScanSettingBinding
donne lieu à la suite de conformité. Pour obtenir la liste des suites de conformité, exécutez la commande suivante :
$ oc get compliancesuites
Si vous supprimez ScanSettingBinding
, la suite de mesures de conformité est également supprimée.
5.15.5. Suivi des analyses de conformité
Après la création de la suite de conformité, vous pouvez contrôler l'état des analyses déployées à l'aide de l'objet ComplianceSuite
.
5.15.5.1. Objet ComplianceSuite
L'objet ComplianceSuite
vous aide à suivre l'état des scans. Il contient les paramètres bruts utilisés pour créer les balayages et le résultat global.
Pour les analyses de type Node
, vous devez mapper l'analyse sur le site MachineConfigPool
, car il contient les mesures correctives pour tous les problèmes. Si vous spécifiez une étiquette, assurez-vous qu'elle s'applique directement à un pool.
Exemple d'objet ComplianceSuite
apiVersion: compliance.openshift.io/v1alpha1 kind: ComplianceSuite metadata: name: <name of the scan> spec: autoApplyRemediations: false 1 schedule: "0 1 * * *" 2 scans: 3 - name: workers-scan scanType: Node profile: xccdf_org.ssgproject.content_profile_moderate content: ssg-rhcos4-ds.xml contentImage: quay.io/complianceascode/ocp4:latest rule: "xccdf_org.ssgproject.content_rule_no_netrc_files" nodeSelector: node-role.kubernetes.io/worker: "" status: Phase: DONE 4 Result: NON-COMPLIANT 5 scanStatuses: - name: workers-scan phase: DONE result: NON-COMPLIANT
- 1
- La valeur
true
permet d'activer les remédiations automatiques. La valeurfalse
permet de désactiver les remédiations automatiques. - 2
- Spécifiez la fréquence d'exécution de l'analyse au format cron.
- 3
- Spécifiez une liste de spécifications d'analyse à exécuter dans le cluster.
- 4
- Indique l'état d'avancement des analyses.
- 5
- Indique le verdict global de la suite.
La suite crée en arrière-plan l'objet ComplianceScan
sur la base du paramètre scans
. Vous pouvez récupérer par programme les événements de ComplianceSuites
. Pour obtenir les événements de la suite, exécutez la commande suivante :
oc get events --field-selector involvedObject.kind=ComplianceSuite,involvedObject.name=<nom de la suite>
Vous risquez de créer des erreurs lorsque vous définissez manuellement le site ComplianceSuite
, car il contient les attributs XCCDF.
5.15.5.2. Objet ComplianceScan avancé
L'Opérateur de Conformité comprend des options pour les utilisateurs avancés pour le débogage ou l'intégration avec l'outillage existant. Bien qu'il soit recommandé de ne pas créer directement un objet ComplianceScan
, vous pouvez le gérer à l'aide d'un objet ComplianceSuite
.
Exemple Objet avancé ComplianceScan
apiVersion: compliance.openshift.io/v1alpha1 kind: ComplianceScan metadata: name: <name of the scan> spec: scanType: Node 1 profile: xccdf_org.ssgproject.content_profile_moderate 2 content: ssg-ocp4-ds.xml contentImage: quay.io/complianceascode/ocp4:latest 3 rule: "xccdf_org.ssgproject.content_rule_no_netrc_files" 4 nodeSelector: 5 node-role.kubernetes.io/worker: "" status: phase: DONE 6 result: NON-COMPLIANT 7
- 1
- Spécifiez
Node
ouPlatform
. Les profils de nœuds analysent les nœuds du cluster et les profils de plateforme analysent la plateforme Kubernetes. - 2
- Indiquez l'identifiant XCCDF du profil que vous souhaitez exécuter.
- 3
- Spécifiez l'image du conteneur qui encapsule les fichiers de profil.
- 4
- Elle est facultative. Spécifiez l'analyse pour exécuter une seule règle. Cette règle doit être identifiée par l'ID XCCDF et doit appartenir au profil spécifié.Note
Si vous ignorez le paramètre
rule
, l'analyse s'exécute pour toutes les règles disponibles du profil spécifié. - 5
- Si vous êtes sur OpenShift Container Platform et que vous souhaitez générer une remédiation, le label nodeSelector doit correspondre au label
MachineConfigPool
.NoteSi vous ne spécifiez pas le paramètre
nodeSelector
ou si vous ne correspondez pas à l'étiquetteMachineConfig
, l'analyse s'exécutera quand même, mais elle ne créera pas de remédiation. - 6
- Indique la phase actuelle du balayage.
- 7
- Indique le verdict de l'analyse.
Si vous supprimez un objet ComplianceSuite
, tous les balayages associés sont supprimés.
Lorsque l'analyse est terminée, elle génère le résultat sous forme de ressources personnalisées de l'objet ComplianceCheckResult
. Toutefois, les résultats bruts sont disponibles au format ARF. Ces résultats sont stockés dans un volume persistant (PV), auquel une revendication de volume persistant (PVC) est associée au nom de l'analyse. Vous pouvez récupérer par programme les événements ComplianceScans
. Pour générer des événements pour la suite, exécutez la commande suivante :
oc get events --field-selector involvedObject.kind=ComplianceScan,involvedObject.name=<nom de la suite>
5.15.6. Visualisation des résultats de conformité
Lorsque la suite de conformité atteint la phase DONE
, vous pouvez consulter les résultats de l'analyse et les mesures correctives possibles.
5.15.6.1. Objet ComplianceCheckResult
Lorsque vous exécutez une analyse avec un profil spécifique, plusieurs règles des profils sont vérifiées. Pour chacune de ces règles, un objet ComplianceCheckResult
est créé, qui fournit l'état du cluster pour une règle spécifique.
Exemple d'objet ComplianceCheckResult
apiVersion: compliance.openshift.io/v1alpha1 kind: ComplianceCheckResult metadata: labels: compliance.openshift.io/check-severity: medium compliance.openshift.io/check-status: FAIL compliance.openshift.io/suite: example-compliancesuite compliance.openshift.io/scan-name: workers-scan name: workers-scan-no-direct-root-logins namespace: openshift-compliance ownerReferences: - apiVersion: compliance.openshift.io/v1alpha1 blockOwnerDeletion: true controller: true kind: ComplianceScan name: workers-scan description: <description of scan check> instructions: <manual instructions for the scan> id: xccdf_org.ssgproject.content_rule_no_direct_root_logins severity: medium 1 status: FAIL 2
- 1
- Décrit la gravité de la vérification de l'analyse.
- 2
- Décrit le résultat du contrôle. Les valeurs possibles sont les suivantes :
- PASS : la vérification a été effectuée avec succès.
- FAIL : la vérification n'a pas abouti.
- INFO : la vérification a été effectuée avec succès et a permis de détecter un problème qui n'est pas suffisamment grave pour être considéré comme une erreur.
- MANUEL : le contrôle ne peut pas évaluer automatiquement l'état et un contrôle manuel est nécessaire.
- INCONSISTANT : différents nœuds rapportent des résultats différents.
- ERREUR : le contrôle a été exécuté avec succès, mais n'a pas pu se terminer.
- NOTAPPLICABLE : le contrôle n'a pas été effectué car il n'est pas applicable.
Pour obtenir tous les résultats de contrôle d'une suite, exécutez la commande suivante :
oc get compliancecheckresults \ -l compliance.openshift.io/suite=workers-compliancesuite
5.15.6.2. Objet ComplianceRemediation
Pour un contrôle spécifique, vous pouvez avoir un correctif spécifié par datastream. Cependant, si un correctif Kubernetes est disponible, l'opérateur de conformité crée un objet ComplianceRemediation
.
Exemple d'objet ComplianceRemediation
apiVersion: compliance.openshift.io/v1alpha1 kind: ComplianceRemediation metadata: labels: compliance.openshift.io/suite: example-compliancesuite compliance.openshift.io/scan-name: workers-scan machineconfiguration.openshift.io/role: worker name: workers-scan-disable-users-coredumps namespace: openshift-compliance ownerReferences: - apiVersion: compliance.openshift.io/v1alpha1 blockOwnerDeletion: true controller: true kind: ComplianceCheckResult name: workers-scan-disable-users-coredumps uid: <UID> spec: apply: false 1 object: current: 2 apiVersion: machineconfiguration.openshift.io/v1 kind: MachineConfig spec: config: ignition: version: 2.2.0 storage: files: - contents: source: data:,%2A%20%20%20%20%20hard%20%20%20core%20%20%20%200 filesystem: root mode: 420 path: /etc/security/limits.d/75-disable_users_coredumps.conf outdated: {} 3
- 1
true
indique que la mesure corrective a été appliquée.false
indique que la mesure corrective n'a pas été appliquée.- 2
- Inclut la définition de la remédiation.
- 3
- Indique une remédiation qui a été précédemment analysée à partir d'une version antérieure du contenu. L'opérateur de conformité conserve les objets périmés afin de permettre à l'administrateur de revoir les nouvelles mesures correctives avant de les appliquer.
Pour obtenir toutes les mesures correctives d'une suite, exécutez la commande suivante :
oc get complianceremediations \ -l compliance.openshift.io/suite=workers-compliancesuite
Pour dresser la liste de tous les contrôles défaillants qui peuvent être corrigés automatiquement, exécutez la commande suivante :
oc get compliancecheckresults \ -l 'compliance.openshift.io/check-status in (FAIL),compliance.openshift.io/automated-remediation'
Pour dresser la liste de tous les contrôles défaillants qui peuvent être corrigés manuellement, exécutez la commande suivante :
oc get compliancecheckresults \ -l 'compliance.openshift.io/check-status in (FAIL),!compliance.openshift.io/automated-remediation'