24.8. Journalisation des règles de pare-feu et de stratégie de réseau de sortie
En tant qu'administrateur de cluster, vous pouvez configurer la journalisation d'audit pour votre cluster et activer la journalisation pour un ou plusieurs espaces de noms. OpenShift Container Platform produit des journaux d'audit pour les pare-feu de sortie et les stratégies réseau.
La journalisation des audits n'est disponible que pour le plugin réseau OVN-Kubernetes.
24.8.1. Journalisation des audits
Le plugin réseau OVN-Kubernetes utilise les ACL de l'Open Virtual Network (OVN) pour gérer les pare-feu de sortie et les politiques de réseau. La journalisation d'audit expose les événements d'autorisation et de refus des ACL.
Vous pouvez configurer la destination des journaux d'audit, comme un serveur syslog ou un socket de domaine UNIX. Indépendamment de toute configuration supplémentaire, un journal d'audit est toujours enregistré sur /var/log/ovn/acl-audit-log.log
sur chaque pod OVN-Kubernetes dans le cluster.
L'enregistrement des audits est activé par espace de noms en annotant l'espace de noms avec la clé k8s.ovn.org/acl-logging
comme dans l'exemple suivant :
Exemple d'annotation d'un espace de noms
kind: Namespace apiVersion: v1 metadata: name: example1 annotations: k8s.ovn.org/acl-logging: |- { "deny": "info", "allow": "info" }
Le format de journalisation est compatible avec syslog tel que défini par RFC5424. L'option syslog est configurable et est définie par défaut sur local0
. Un exemple d'entrée de journal peut ressembler à ce qui suit :
Exemple d'entrée de journal de refus d'ACL pour une stratégie de réseau
2021-06-13T19:33:11.590Z|00005|acl_log(ovn_pinctrl0)|INFO|name="verify-audit-logging_deny-all", verdict=drop, severity=alert: icmp,vlan_tci=0x0000,dl_src=0a:58:0a:80:02:39,dl_dst=0a:58:0a:80:02:37,nw_src=10.128.2.57,nw_dst=10.128.2.55,nw_tos=0,nw_ecn=0,nw_ttl=64,icmp_type=8,icmp_code=0
Le tableau suivant décrit les valeurs d'annotation de l'espace de noms :
Annotation | Valeur |
---|---|
|
Vous devez spécifier au moins l'un des éléments suivants :
|
24.8.2. Configuration de l'audit
La configuration de la journalisation des audits est spécifiée dans le cadre de la configuration du fournisseur de réseau du cluster OVN-Kubernetes. Le fichier YAML suivant illustre les valeurs par défaut pour la journalisation des audits :
Configuration de la journalisation des audits
apiVersion: operator.openshift.io/v1 kind: Network metadata: name: cluster spec: defaultNetwork: ovnKubernetesConfig: policyAuditConfig: destination: "null" maxFileSize: 50 rateLimit: 20 syslogFacility: local0
Le tableau suivant décrit les champs de configuration de la journalisation des audits.
Field | Type | Description |
---|---|---|
| entier |
Nombre maximal de messages à générer chaque seconde par nœud. La valeur par défaut est |
| entier |
Taille maximale du journal d'audit en octets. La valeur par défaut est |
| chaîne de caractères | One of the following additional audit log targets:
|
| chaîne de caractères |
L'installation syslog, telle que |
24.8.3. Configuration de l'audit du pare-feu de sortie et de la stratégie réseau pour un cluster
En tant qu'administrateur de cluster, vous pouvez personnaliser la journalisation des audits pour votre cluster.
Conditions préalables
-
Installez le CLI OpenShift (
oc
). -
Connectez-vous au cluster avec un utilisateur disposant des privilèges
cluster-admin
.
Procédure
Pour personnaliser la configuration de la journalisation des audits, entrez la commande suivante :
$ oc edit network.operator.openshift.io/cluster
AstuceVous pouvez également personnaliser et appliquer le fichier YAML suivant pour configurer l'enregistrement des audits :
apiVersion: operator.openshift.io/v1 kind: Network metadata: name: cluster spec: defaultNetwork: ovnKubernetesConfig: policyAuditConfig: destination: "null" maxFileSize: 50 rateLimit: 20 syslogFacility: local0
Vérification
Pour créer un espace de noms avec des stratégies de réseau, procédez comme suit :
Créer un espace de noms pour la vérification :
$ cat <<EOF| oc create -f - kind: Namespace apiVersion: v1 metadata: name: verify-audit-logging annotations: k8s.ovn.org/acl-logging: '{ "deny": "alert", "allow": "alert" }' EOF
Exemple de sortie
namespace/verify-audit-logging created
Activer la journalisation des audits :
$ oc annotate namespace verify-audit-logging k8s.ovn.org/acl-logging='{ "deny": "alert", "allow": "alert" }'
namespace/verify-audit-logging annotated
Créer des politiques de réseau pour l'espace de noms :
$ cat <<EOF| oc create -n verify-audit-logging -f - apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata: name: deny-all spec: podSelector: matchLabels: policyTypes: - Ingress - Egress --- apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata: name: allow-from-same-namespace spec: podSelector: {} policyTypes: - Ingress - Egress ingress: - from: - podSelector: {} egress: - to: - namespaceSelector: matchLabels: namespace: verify-audit-logging EOF
Exemple de sortie
networkpolicy.networking.k8s.io/deny-all created networkpolicy.networking.k8s.io/allow-from-same-namespace created
Créer un pod pour le trafic source dans l'espace de noms
default
:$ cat <<EOF| oc create -n default -f - apiVersion: v1 kind: Pod metadata: name: client spec: containers: - name: client image: registry.access.redhat.com/rhel7/rhel-tools command: ["/bin/sh", "-c"] args: ["sleep inf"] EOF
Créer deux pods dans l'espace de noms
verify-audit-logging
:$ for name in client server; do cat <<EOF| oc create -n verify-audit-logging -f - apiVersion: v1 kind: Pod metadata: name: ${name} spec: containers: - name: ${name} image: registry.access.redhat.com/rhel7/rhel-tools command: ["/bin/sh", "-c"] args: ["sleep inf"] EOF done
Exemple de sortie
pod/client created pod/server created
Pour générer du trafic et produire des entrées de journal d'audit de stratégie de réseau, procédez comme suit :
Obtenir l'adresse IP du pod nommé
server
dans l'espace de nomsverify-audit-logging
:$ POD_IP=$(oc get pods server -n verify-audit-logging -o jsonpath='{.status.podIP}')
Effectuez un ping de l'adresse IP de la commande précédente à partir du pod nommé
client
dans l'espace de nomsdefault
et confirmez que tous les paquets sont abandonnés :$ oc exec -it client -n default -- /bin/ping -c 2 $POD_IP
Exemple de sortie
PING 10.128.2.55 (10.128.2.55) 56(84) bytes of data. --- 10.128.2.55 ping statistics --- 2 packets transmitted, 0 received, 100% packet loss, time 2041ms
Effectuez un ping de l'adresse IP enregistrée dans la variable d'environnement du shell
POD_IP
à partir du pod nomméclient
dans l'espace de nomsverify-audit-logging
et confirmez que tous les paquets sont autorisés :$ oc exec -it client -n verify-audit-logging -- /bin/ping -c 2 $POD_IP
Exemple de sortie
PING 10.128.0.86 (10.128.0.86) 56(84) bytes of data. 64 bytes from 10.128.0.86: icmp_seq=1 ttl=64 time=2.21 ms 64 bytes from 10.128.0.86: icmp_seq=2 ttl=64 time=0.440 ms --- 10.128.0.86 ping statistics --- 2 packets transmitted, 2 received, 0% packet loss, time 1001ms rtt min/avg/max/mdev = 0.440/1.329/2.219/0.890 ms
Affiche les dernières entrées du journal d'audit de la stratégie de réseau :
$ for pod in $(oc get pods -n openshift-ovn-kubernetes -l app=ovnkube-node --no-headers=true | awk '{ print $1 }') ; do oc exec -it $pod -n openshift-ovn-kubernetes -- tail -4 /var/log/ovn/acl-audit-log.log done
Exemple de sortie
Defaulting container name to ovn-controller. Use 'oc describe pod/ovnkube-node-hdb8v -n openshift-ovn-kubernetes' to see all of the containers in this pod. 2021-06-13T19:33:11.590Z|00005|acl_log(ovn_pinctrl0)|INFO|name="verify-audit-logging_deny-all", verdict=drop, severity=alert: icmp,vlan_tci=0x0000,dl_src=0a:58:0a:80:02:39,dl_dst=0a:58:0a:80:02:37,nw_src=10.128.2.57,nw_dst=10.128.2.55,nw_tos=0,nw_ecn=0,nw_ttl=64,icmp_type=8,icmp_code=0 2021-06-13T19:33:12.614Z|00006|acl_log(ovn_pinctrl0)|INFO|name="verify-audit-logging_deny-all", verdict=drop, severity=alert: icmp,vlan_tci=0x0000,dl_src=0a:58:0a:80:02:39,dl_dst=0a:58:0a:80:02:37,nw_src=10.128.2.57,nw_dst=10.128.2.55,nw_tos=0,nw_ecn=0,nw_ttl=64,icmp_type=8,icmp_code=0 2021-06-13T19:44:10.037Z|00007|acl_log(ovn_pinctrl0)|INFO|name="verify-audit-logging_allow-from-same-namespace_0", verdict=allow, severity=alert: icmp,vlan_tci=0x0000,dl_src=0a:58:0a:80:02:3b,dl_dst=0a:58:0a:80:02:3a,nw_src=10.128.2.59,nw_dst=10.128.2.58,nw_tos=0,nw_ecn=0,nw_ttl=64,icmp_type=8,icmp_code=0 2021-06-13T19:44:11.037Z|00008|acl_log(ovn_pinctrl0)|INFO|name="verify-audit-logging_allow-from-same-namespace_0", verdict=allow, severity=alert: icmp,vlan_tci=0x0000,dl_src=0a:58:0a:80:02:3b,dl_dst=0a:58:0a:80:02:3a,nw_src=10.128.2.59,nw_dst=10.128.2.58,nw_tos=0,nw_ecn=0,nw_ttl=64,icmp_type=8,icmp_code=0
24.8.4. Activation de la journalisation d'audit du pare-feu de sortie et de la stratégie de réseau pour un espace de noms
En tant qu'administrateur de cluster, vous pouvez activer la journalisation d'audit pour un espace de noms.
Conditions préalables
-
Installez le CLI OpenShift (
oc
). -
Connectez-vous au cluster avec un utilisateur disposant des privilèges
cluster-admin
.
Procédure
Pour activer la journalisation des audits pour un espace de noms, entrez la commande suivante :
$ oc annotate namespace <namespace> \ k8s.ovn.org/acl-logging='{ "deny": "alert", "allow": "notice" }'
où :
<namespace>
- Spécifie le nom de l'espace de noms.
AstuceVous pouvez également appliquer le code YAML suivant pour activer l'enregistrement des audits :
kind: Namespace apiVersion: v1 metadata: name: <namespace> annotations: k8s.ovn.org/acl-logging: |- { "deny": "alert", "allow": "notice" }
Exemple de sortie
namespace/verify-audit-logging annotated
Vérification
Affiche les dernières entrées du journal d'audit :
$ for pod in $(oc get pods -n openshift-ovn-kubernetes -l app=ovnkube-node --no-headers=true | awk '{ print $1 }') ; do oc exec -it $pod -n openshift-ovn-kubernetes -- tail -4 /var/log/ovn/acl-audit-log.log done
Exemple de sortie
2021-06-13T19:33:11.590Z|00005|acl_log(ovn_pinctrl0)|INFO|name="verify-audit-logging_deny-all", verdict=drop, severity=alert: icmp,vlan_tci=0x0000,dl_src=0a:58:0a:80:02:39,dl_dst=0a:58:0a:80:02:37,nw_src=10.128.2.57,nw_dst=10.128.2.55,nw_tos=0,nw_ecn=0,nw_ttl=64,icmp_type=8,icmp_code=0
24.8.5. Désactivation de la journalisation d'audit du pare-feu de sortie et de la stratégie de réseau pour un espace de noms
En tant qu'administrateur de cluster, vous pouvez désactiver la journalisation d'audit pour un espace de noms.
Conditions préalables
-
Installez le CLI OpenShift (
oc
). -
Connectez-vous au cluster avec un utilisateur disposant des privilèges
cluster-admin
.
Procédure
Pour désactiver la journalisation des audits pour un espace de noms, entrez la commande suivante :
oc annotate --overwrite namespace <namespace> k8s.ovn.org/acl-logging-
où :
<namespace>
- Spécifie le nom de l'espace de noms.
AstuceVous pouvez également appliquer le code YAML suivant pour désactiver la journalisation des audits :
kind: Namespace apiVersion: v1 metadata: name: <namespace> annotations: k8s.ovn.org/acl-logging: null
Exemple de sortie
namespace/verify-audit-logging annotated