5.11. Exécution de tâches avancées de l'opérateur de conformité
L'opérateur de conformité comprend des options pour les utilisateurs avancés à des fins de débogage ou d'intégration avec l'outillage existant.
5.11.1. Utiliser directement les objets ComplianceSuite et ComplianceScan
Bien qu'il soit recommandé aux utilisateurs de tirer parti des objets ScanSetting
et ScanSettingBinding
pour définir les suites et les balayages, il existe des cas d'utilisation valables pour définir directement les objets ComplianceSuite
:
-
Spécification d'une seule règle à analyser. Cela peut être utile pour le débogage avec l'attribut
debug: true
qui augmente la verbosité de l'analyseur OpenSCAP, car le mode de débogage a tendance à devenir assez verbeux autrement. Limiter le test à une seule règle permet de réduire la quantité d'informations de débogage. - Fournir un nodeSelector personnalisé. Pour qu'une remédiation soit applicable, le nodeSelector doit correspondre à un pool.
- Orienter le scanner vers une carte de configuration sur mesure avec un fichier d'adaptation.
- Pour les tests ou le développement, lorsqu'il n'est pas nécessaire d'analyser les profils à partir des paquets.
L'exemple suivant montre un site ComplianceSuite
qui analyse les machines de travail avec une seule règle :
apiVersion: compliance.openshift.io/v1alpha1 kind: ComplianceSuite metadata: name: workers-compliancesuite spec: scans: - name: workers-scan profile: xccdf_org.ssgproject.content_profile_moderate content: ssg-rhcos4-ds.xml contentImage: quay.io/complianceascode/ocp4:latest debug: true rule: xccdf_org.ssgproject.content_rule_no_direct_root_logins nodeSelector: node-role.kubernetes.io/worker: ""
L'objet ComplianceSuite
et les objets ComplianceScan
mentionnés ci-dessus spécifient plusieurs attributs dans un format attendu par OpenSCAP.
Pour connaître les valeurs du profil, du contenu ou de la règle, vous pouvez commencer par créer une suite similaire à partir de ScanSetting
et ScanSettingBinding
ou inspecter les objets analysés à partir des objets ProfileBundle
tels que les règles ou les profils. Ces objets contiennent les identifiants xccdf_org
que vous pouvez utiliser pour y faire référence à partir de ComplianceSuite
.
5.11.2. Réglage de PriorityClass
pour les scans de ScanSetting
Dans les environnements à grande échelle, l'objet par défaut PriorityClass
peut être trop bas pour garantir que les pods exécutent les analyses à temps. Pour les clusters qui doivent maintenir la conformité ou garantir l'analyse automatisée, il est recommandé de définir la variable PriorityClass
afin de garantir que l'opérateur de conformité est toujours prioritaire dans les situations où les ressources sont limitées.
Procédure
Définir la variable
PriorityClass
:apiVersion: compliance.openshift.io/v1alpha1 strictNodeScan: true metadata: name: default namespace: openshift-compliance priorityClass: compliance-high-priority 1 kind: ScanSetting showNotApplicable: false rawResultStorage: nodeSelector: node-role.kubernetes.io/master: '' pvAccessModes: - ReadWriteOnce rotation: 3 size: 1Gi tolerations: - effect: NoSchedule key: node-role.kubernetes.io/master operator: Exists - effect: NoExecute key: node.kubernetes.io/not-ready operator: Exists tolerationSeconds: 300 - effect: NoExecute key: node.kubernetes.io/unreachable operator: Exists tolerationSeconds: 300 - effect: NoSchedule key: node.kubernetes.io/memory-pressure operator: Exists schedule: 0 1 * * * roles: - master - worker scanTolerations: - operator: Exists
- 1
- Si le site
PriorityClass
mentionné dans le siteScanSetting
est introuvable, l'opérateur laissera le sitePriorityClass
vide, émettra un avertissement et continuera à programmer des balayages sansPriorityClass
.
5.11.3. Utilisation de profils bruts personnalisés
Alors que la norme TailoredProfile
CR permet les opérations d'adaptation les plus courantes, la norme XCCDF offre encore plus de flexibilité dans l'adaptation des profils OpenSCAP. En outre, si votre organisation a déjà utilisé OpenScap, il se peut que vous disposiez d'un fichier d'adaptation XCCDF et que vous puissiez le réutiliser.
L'objet ComplianceSuite
contient un attribut facultatif TailoringConfigMap
qui permet de pointer vers un fichier d'adaptation personnalisé. La valeur de l'attribut TailoringConfigMap
est le nom d'une carte de configuration qui doit contenir une clé appelée tailoring.xml
et la valeur de cette clé est le contenu de l'adaptation.
Procédure
Créer l'objet
ConfigMap
à partir d'un fichier :$ oc -n openshift-compliance \ create configmap nist-moderate-modified \ --from-file=tailoring.xml=/path/to/the/tailoringFile.xml
Référencer le fichier d'adaptation dans un scan qui appartient à une suite :
apiVersion: compliance.openshift.io/v1alpha1 kind: ComplianceSuite metadata: name: workers-compliancesuite spec: debug: true scans: - name: workers-scan profile: xccdf_org.ssgproject.content_profile_moderate content: ssg-rhcos4-ds.xml contentImage: quay.io/complianceascode/ocp4:latest debug: true tailoringConfigMap: name: nist-moderate-modified nodeSelector: node-role.kubernetes.io/worker: ""
5.11.4. Exécution d'un rescan
En règle générale, vous souhaitez réexécuter une analyse selon un calendrier défini, par exemple tous les lundis ou tous les jours. Il peut également être utile de réexécuter une analyse après avoir résolu un problème sur un nœud. Pour effectuer une analyse unique, annotez l'analyse avec l'option compliance.openshift.io/rescan=
:
$ oc -n openshift-compliance \ annotate compliancescans/rhcos4-e8-worker compliance.openshift.io/rescan=
Un rescan génère quatre mc
supplémentaires pour le profil rhcos-moderate
:
$ oc get mc
Exemple de sortie
75-worker-scan-chronyd-or-ntpd-specify-remote-server 75-worker-scan-configure-usbguard-auditbackend 75-worker-scan-service-usbguard-enabled 75-worker-scan-usbguard-allow-hid-and-hub
Lorsque le paramètre d'analyse default-auto-apply
label est appliqué, les mesures correctives sont appliquées automatiquement et les mesures correctives obsolètes sont automatiquement mises à jour. S'il existe des mesures correctives qui n'ont pas été appliquées en raison de dépendances, ou des mesures correctives qui étaient obsolètes, une nouvelle analyse applique les mesures correctives et peut déclencher un redémarrage. Seules les mesures correctives qui utilisent des objets MachineConfig
déclenchent des redémarrages. S'il n'y a pas de mises à jour ou de dépendances à appliquer, aucun redémarrage ne se produit.
5.11.5. Définition d'une taille de stockage personnalisée pour les résultats
Bien que les ressources personnalisées telles que ComplianceCheckResult
représentent un résultat agrégé d'une vérification sur tous les nœuds analysés, il peut être utile d'examiner les résultats bruts tels qu'ils sont produits par l'analyseur. Les résultats bruts sont produits au format ARF et peuvent être volumineux (des dizaines de mégaoctets par nœud), il n'est pas pratique de les stocker dans une ressource Kubernetes soutenue par le magasin de valeurs clés etcd
. Au lieu de cela, chaque analyse crée un volume persistant (PV) dont la taille par défaut est de 1 Go. En fonction de votre environnement, vous pouvez augmenter la taille du PV en conséquence. Cela se fait à l'aide de l'attribut rawResultStorage.size
qui est exposé dans les ressources ScanSetting
et ComplianceScan
.
Un paramètre connexe est rawResultStorage.rotation
, qui détermine le nombre de balayages conservés dans le PV avant que les balayages les plus anciens ne fassent l'objet d'une rotation. La valeur par défaut est de 3. En fixant la politique de rotation à 0, vous désactivez la rotation. Compte tenu de la politique de rotation par défaut et d'une estimation de 100 Mo pour un rapport d'analyse ARF brut, vous pouvez calculer la taille du PV adaptée à votre environnement.
5.11.5.1. Utilisation de valeurs de stockage de résultats personnalisées
Comme OpenShift Container Platform peut être déployé dans une variété de nuages publics ou de métal nu, l'opérateur de conformité ne peut pas déterminer les configurations de stockage disponibles. Par défaut, l'Opérateur de Conformité essaiera de créer le PV pour stocker les résultats en utilisant la classe de stockage par défaut du cluster, mais une classe de stockage personnalisée peut être configurée en utilisant l'attribut rawResultStorage.StorageClassName
.
Si votre cluster ne spécifie pas de classe de stockage par défaut, cet attribut doit être défini.
Configurez la ressource personnalisée ScanSetting
pour qu'elle utilise une classe de stockage standard et crée des volumes persistants d'une taille de 10 Go qui conservent les 10 derniers résultats :
Exemple ScanSetting
CR
apiVersion: compliance.openshift.io/v1alpha1 kind: ScanSetting metadata: name: default namespace: openshift-compliance rawResultStorage: storageClassName: standard rotation: 10 size: 10Gi roles: - worker - master scanTolerations: - effect: NoSchedule key: node-role.kubernetes.io/master operator: Exists schedule: '0 1 * * *'
5.11.6. Application des remédiations générées par les analyses de la suite
Bien que vous puissiez utiliser le paramètre booléen autoApplyRemediations
dans un objet ComplianceSuite
, vous pouvez également annoter l'objet avec compliance.openshift.io/apply-remediations
. Cela permet à l'opérateur d'appliquer toutes les mesures correctives créées.
Procédure
-
Appliquez l'annotation
compliance.openshift.io/apply-remediations
en exécutant :
$ oc -n openshift-compliance \ annotate compliancesuites/workers-compliancesuite compliance.openshift.io/apply-remediations=
5.11.7. Mise à jour automatique des mesures correctives
Dans certains cas, une analyse avec un contenu plus récent peut marquer les remédiations comme OUTDATED
. En tant qu'administrateur, vous pouvez appliquer l'annotation compliance.openshift.io/remove-outdated
pour appliquer de nouvelles mesures correctives et supprimer celles qui sont obsolètes.
Procédure
-
Appliquez l'annotation
compliance.openshift.io/remove-outdated
:
$ oc -n openshift-compliance \ annotate compliancesuites/workers-compliancesuite compliance.openshift.io/remove-outdated=
Vous pouvez également activer l'indicateur autoUpdateRemediations
dans un objet ScanSetting
ou ComplianceSuite
pour mettre à jour les mesures correctives automatiquement.
5.11.8. Création d'un SCC personnalisé pour l'opérateur de conformité
Dans certains environnements, vous devez créer un fichier de contraintes de contexte de sécurité (SCC) personnalisé pour vous assurer que les autorisations correctes sont disponibles pour l'opérateur de conformité api-resource-collector
.
Conditions préalables
-
Vous devez avoir les privilèges de
admin
.
Procédure
Définir le SCC dans un fichier YAML nommé
restricted-adjusted-compliance.yaml
:SecurityContextConstraints
définition de l'objetallowHostDirVolumePlugin: false allowHostIPC: false allowHostNetwork: false allowHostPID: false allowHostPorts: false allowPrivilegeEscalation: true allowPrivilegedContainer: false allowedCapabilities: null apiVersion: security.openshift.io/v1 defaultAddCapabilities: null fsGroup: type: MustRunAs kind: SecurityContextConstraints metadata: name: restricted-adjusted-compliance priority: 30 1 readOnlyRootFilesystem: false requiredDropCapabilities: - KILL - SETUID - SETGID - MKNOD runAsUser: type: MustRunAsRange seLinuxContext: type: MustRunAs supplementalGroups: type: RunAsAny users: - system:serviceaccount:openshift-compliance:api-resource-collector 2 volumes: - configMap - downwardAPI - emptyDir - persistentVolumeClaim - projected - secret
Créer le CCN :
$ oc create -n openshift-compliance -f restricted-adjusted-compliance.yaml
Exemple de sortie
securitycontextconstraints.security.openshift.io/restricted-adjusted-compliance created
Vérification
Vérifier que le SCC a été créé :
$ oc get -n openshift-compliance scc restricted-adjusted-compliance
Exemple de sortie
NAME PRIV CAPS SELINUX RUNASUSER FSGROUP SUPGROUP PRIORITY READONLYROOTFS VOLUMES restricted-adjusted-compliance false <no value> MustRunAs MustRunAsRange MustRunAs RunAsAny 30 false ["configMap","downwardAPI","emptyDir","persistentVolumeClaim","projected","secret"]