7.7. Profils de sécurité avancés Tâches de l'opérateur
Utilisez les tâches avancées pour activer les mesures, configurer les webhooks ou restreindre les appels de service.
7.7.1. Restreindre les appels de service autorisés dans les profils seccomp Copier lienLien copié sur presse-papiers!
Par défaut, l'Opérateur de profils de sécurité ne restreint pas syscalls dans les profils seccomp. Vous pouvez définir la liste des syscalls autorisés dans la configuration de spod.
Procédure
Pour définir la liste des
allowedSyscalls, ajustez le paramètrespecen exécutant la commande suivante :oc -n openshift-security-profiles patch spod spod --type merge \ -p '{"spec":{"allowedSyscalls": ["exit", "exit_group", "futex", "nanosleep"]}}'$ oc -n openshift-security-profiles patch spod spod --type merge \ -p '{"spec":{"allowedSyscalls": ["exit", "exit_group", "futex", "nanosleep"]}}'Copy to Clipboard Copied! Toggle word wrap Toggle overflow
L'opérateur n'installera que les profils seccomp, qui ont un sous-ensemble de syscalls défini dans la liste autorisée. Tous les profils ne respectant pas cet ensemble de règles sont rejetés.
Lorsque la liste des syscalls autorisés est modifiée dans la configuration de spod, l'Opérateur identifiera les profils déjà installés qui ne sont pas conformes et les supprimera automatiquement.
7.7.2. Appels système de base pour un runtime de conteneur Copier lienLien copié sur presse-papiers!
Vous pouvez utiliser l'attribut baseProfileName pour établir le minimum requis syscalls pour une durée d'exécution donnée afin de démarrer un conteneur.
Procédure
Modifiez l'objet de type
SeccompProfileet ajoutezbaseProfileName: runc-v1.0.0au champspec:Copy to Clipboard Copied! Toggle word wrap Toggle overflow
7.7.3. Utiliser des indicateurs Copier lienLien copié sur presse-papiers!
L'espace de noms openshift-security-profiles fournit des points d'extrémité pour les mesures, qui sont sécurisés par le conteneur kube-rbac-proxy. Toutes les mesures sont exposées par le service metrics dans l'espace de noms openshift-security-profiles.
L'opérateur de profils de sécurité comprend un rôle de cluster et un lien correspondant spo-metrics-client pour récupérer les métriques au sein du cluster. Il existe deux chemins d'accès aux métriques :
-
metrics.openshift-security-profiles/metricspour les mesures de la durée d'exécution des contrôleurs -
metrics.openshift-security-profiles/metrics-spodpour les métriques du démon Operator
Procédure
Pour afficher l'état du service de métrologie, exécutez la commande suivante :
oc get svc/metrics -n openshift-security-profiles
$ oc get svc/metrics -n openshift-security-profilesCopy to Clipboard Copied! Toggle word wrap Toggle overflow Exemple de sortie
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE metrics ClusterIP 10.0.0.228 <none> 443/TCP 43s
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE metrics ClusterIP 10.0.0.228 <none> 443/TCP 43sCopy to Clipboard Copied! Toggle word wrap Toggle overflow Pour récupérer les métriques, interrogez le point de terminaison du service à l'aide du jeton par défaut
ServiceAccountdans l'espace de nomsopenshift-security-profilesen exécutant la commande suivante :oc run --rm -i --restart=Never --image=registry.fedoraproject.org/fedora-minimal:latest \ -n openshift-security-profiles metrics-test -- bash -c \ 'curl -ks -H "Authorization: Bearer $(cat /var/run/secrets/kubernetes.io/serviceaccount/token)" https://metrics.openshift-security-profiles/metrics-spod'$ oc run --rm -i --restart=Never --image=registry.fedoraproject.org/fedora-minimal:latest \ -n openshift-security-profiles metrics-test -- bash -c \ 'curl -ks -H "Authorization: Bearer $(cat /var/run/secrets/kubernetes.io/serviceaccount/token)" https://metrics.openshift-security-profiles/metrics-spod'Copy to Clipboard Copied! Toggle word wrap Toggle overflow Exemple de sortie
HELP security_profiles_operator_seccomp_profile_total Counter about seccomp profile operations. TYPE security_profiles_operator_seccomp_profile_total counter
# HELP security_profiles_operator_seccomp_profile_total Counter about seccomp profile operations. # TYPE security_profiles_operator_seccomp_profile_total counter security_profiles_operator_seccomp_profile_total{operation="delete"} 1 security_profiles_operator_seccomp_profile_total{operation="update"} 2Copy to Clipboard Copied! Toggle word wrap Toggle overflow Pour récupérer les métriques d'un autre espace de noms, reliez le site
ServiceAccountau sitespo-metrics-clientClusterRoleBindingen exécutant la commande suivante :oc get clusterrolebinding spo-metrics-client -o wide
$ oc get clusterrolebinding spo-metrics-client -o wideCopy to Clipboard Copied! Toggle word wrap Toggle overflow Exemple de sortie
NAME ROLE AGE USERS GROUPS SERVICEACCOUNTS spo-metrics-client ClusterRole/spo-metrics-client 35m openshift-security-profiles/default
NAME ROLE AGE USERS GROUPS SERVICEACCOUNTS spo-metrics-client ClusterRole/spo-metrics-client 35m openshift-security-profiles/defaultCopy to Clipboard Copied! Toggle word wrap Toggle overflow
7.7.3.1. controller-runtime metrics Copier lienLien copié sur presse-papiers!
Le controller-runtime metrics et le DaemonSet endpoint metrics-spod fournissent un ensemble de mesures par défaut. Des mesures supplémentaires sont fournies par le démon, qui sont toujours préfixées par security_profiles_operator_.
| Clé métrique | Étiquettes possibles | Type | Objectif |
|---|---|---|---|
|
|
| Compteur | Nombre d'opérations de profil seccomp. |
|
|
| Compteur | Nombre d'opérations d'audit du profil seccomp. Nécessite l'activation de l'enrichisseur de journaux. |
|
|
| Compteur | Nombre d'opérations bpf du profil seccomp. L'enregistreur bpf doit être activé. |
|
|
| Compteur | Nombre d'erreurs de profil seccomp. |
|
|
| Compteur | Nombre d'opérations de profil SELinux. |
|
|
| Compteur | Nombre d'opérations d'audit du profil SELinux. Nécessite l'activation de l'enrichisseur de journaux. |
|
|
| Compteur | Nombre d'erreurs de profil SELinux. |
7.7.4. Utilisation de l'enrichisseur de billes Copier lienLien copié sur presse-papiers!
L'Opérateur de profils de sécurité contient une fonction d'enrichissement des journaux, qui est désactivée par défaut. Le conteneur d'enrichissement des journaux s'exécute avec les autorisations privileged pour lire les journaux d'audit du nœud local. L'enrichisseur de journaux s'exécute dans l'espace de noms PID de l'hôte, hostPID.
L'enrichisseur de journaux doit avoir le droit de lire les processus de l'hôte.
Procédure
Modifiez la configuration de
spodpour activer l'enrichisseur de journaux en exécutant la commande suivante :oc -n openshift-security-profiles patch spod spod \ --type=merge -p '{"spec":{"enableLogEnricher":true}}'$ oc -n openshift-security-profiles patch spod spod \ --type=merge -p '{"spec":{"enableLogEnricher":true}}'Copy to Clipboard Copied! Toggle word wrap Toggle overflow Exemple de sortie
securityprofilesoperatordaemon.security-profiles-operator.x-k8s.io/spod patched
securityprofilesoperatordaemon.security-profiles-operator.x-k8s.io/spod patchedCopy to Clipboard Copied! Toggle word wrap Toggle overflow NoteL'opérateur de profils de sécurité redéploiera automatiquement le jeu de démons
spod.Affichez les journaux d'audit en exécutant la commande suivante :
oc -n openshift-security-profiles logs -f ds/spod log-enricher
$ oc -n openshift-security-profiles logs -f ds/spod log-enricherCopy to Clipboard Copied! Toggle word wrap Toggle overflow Exemple de sortie
I0623 12:51:04.257814 1854764 deleg.go:130] setup "msg"="starting component: log-enricher" "buildDate"="1980-01-01T00:00:00Z" "compiler"="gc" "gitCommit"="unknown" "gitTreeState"="clean" "goVersion"="go1.16.2" "platform"="linux/amd64" "version"="0.4.0-dev" I0623 12:51:04.257890 1854764 enricher.go:44] log-enricher "msg"="Starting log-enricher on node: 127.0.0.1" I0623 12:51:04.257898 1854764 enricher.go:46] log-enricher "msg"="Connecting to local GRPC server" I0623 12:51:04.258061 1854764 enricher.go:69] log-enricher "msg"="Reading from file /var/log/audit/audit.log" 2021/06/23 12:51:04 Seeked /var/log/audit/audit.log - &{Offset:0 Whence:2}I0623 12:51:04.257814 1854764 deleg.go:130] setup "msg"="starting component: log-enricher" "buildDate"="1980-01-01T00:00:00Z" "compiler"="gc" "gitCommit"="unknown" "gitTreeState"="clean" "goVersion"="go1.16.2" "platform"="linux/amd64" "version"="0.4.0-dev" I0623 12:51:04.257890 1854764 enricher.go:44] log-enricher "msg"="Starting log-enricher on node: 127.0.0.1" I0623 12:51:04.257898 1854764 enricher.go:46] log-enricher "msg"="Connecting to local GRPC server" I0623 12:51:04.258061 1854764 enricher.go:69] log-enricher "msg"="Reading from file /var/log/audit/audit.log" 2021/06/23 12:51:04 Seeked /var/log/audit/audit.log - &{Offset:0 Whence:2}Copy to Clipboard Copied! Toggle word wrap Toggle overflow
7.7.4.1. Utiliser l'enrichisseur de logs pour tracer une application Copier lienLien copié sur presse-papiers!
Vous pouvez utiliser l'enrichisseur de journaux de l'opérateur des profils de sécurité pour tracer une application.
Procédure
Pour tracer une application, créez un profil de journalisation
SeccompProfile:Copy to Clipboard Copied! Toggle word wrap Toggle overflow Créer un objet pod pour utiliser le profil :
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Examinez la sortie de l'enrichisseur de journaux en exécutant la commande suivante :
oc -n openshift-security-profiles logs -f ds/spod log-enricher
$ oc -n openshift-security-profiles logs -f ds/spod log-enricherCopy to Clipboard Copied! Toggle word wrap Toggle overflow Exemple 7.1. Exemple de sortie
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
7.7.5. Configuration des webhooks Copier lienLien copié sur presse-papiers!
Les objets de liaison et d'enregistrement de profil peuvent utiliser des webhooks. Les configurations de la liaison de profil et des objets d'enregistrement sont MutatingWebhookConfiguration CR, gérées par l'opérateur de profils de sécurité.
Pour modifier la configuration du webhook, le CR spod expose un champ webhookOptions qui permet de modifier les variables failurePolicy, namespaceSelector et objectSelector. Cela vous permet de configurer les webhooks en mode "soft-fail" ou de les restreindre à un sous-ensemble d'espaces de noms de sorte que même si les webhooks échouent, les autres espaces de noms ou ressources ne sont pas affectés.
Procédure
Définissez la configuration du webhook
recording.spo.iopour enregistrer uniquement les pods étiquetés avecspo-record=trueen créant le fichier patch suivant :Copy to Clipboard Copied! Toggle word wrap Toggle overflow Apportez un correctif à l'instance
spod/spoden exécutant la commande suivante :oc -n openshift-security-profiles patch spod \ spod -p $(cat /tmp/spod-wh.patch) --type=merge$ oc -n openshift-security-profiles patch spod \ spod -p $(cat /tmp/spod-wh.patch) --type=mergeCopy to Clipboard Copied! Toggle word wrap Toggle overflow Pour visualiser l'objet
MutatingWebhookConfigurationrésultant, exécutez la commande suivante :oc get MutatingWebhookConfiguration \ spo-mutating-webhook-configuration -oyaml$ oc get MutatingWebhookConfiguration \ spo-mutating-webhook-configuration -oyamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow