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ètrespec
en 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
SeccompProfile
et ajoutezbaseProfileName: runc-v1.0.0
au 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/metrics
pour les mesures de la durée d'exécution des contrôleurs -
metrics.openshift-security-profiles/metrics-spod
pour 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-profiles
Copy 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 43s
Copy 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
ServiceAccount
dans l'espace de nomsopenshift-security-profiles
en 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"} 2
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Pour récupérer les métriques d'un autre espace de noms, reliez le site
ServiceAccount
au sitespo-metrics-client
ClusterRoleBinding
en exécutant la commande suivante :oc get clusterrolebinding spo-metrics-client -o wide
$ oc get clusterrolebinding spo-metrics-client -o wide
Copy 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/default
Copy 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
spod
pour 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 patched
Copy 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-enricher
Copy 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-enricher
Copy 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.io
pour enregistrer uniquement les pods étiquetés avecspo-record=true
en créant le fichier patch suivant :Copy to Clipboard Copied! Toggle word wrap Toggle overflow Apportez un correctif à l'instance
spod/spod
en 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=merge
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Pour visualiser l'objet
MutatingWebhookConfiguration
résultant, exécutez la commande suivante :oc get MutatingWebhookConfiguration \ spo-mutating-webhook-configuration -oyaml
$ oc get MutatingWebhookConfiguration \ spo-mutating-webhook-configuration -oyaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow