Effectuer un audit à l'aide de contraintes
Les objets de contrainte Policy Controller vous permettent d'appliquer des règles à vos clusters Kubernetes. Pour tester vos règles, vous pouvez ajouter une action d'application à vos contraintes. Vous pouvez ensuite afficher les non-respects dans les objets de contrainte et les journaux.
Types d'actions d'application
Il existe trois actions d'application: deny
, dryrun
et warn
.
deny
est l'action d'application par défaut. Elle est automatiquement activée, même si vous n'ajoutez pas d'action d'application dans votre contrainte. Utilisez deny
pour éviter qu'une opération de cluster donnée ne se produise en cas de non-respect.
dryrun
vous permet de surveiller les non-respects de vos règles sans bloquer activement les transactions. Elle vous permet de vérifier que vos contraintes fonctionnent comme prévu, avant d'activer l'application active à l'aide de l'action deny
. Tester les contraintes de cette manière peut éviter les perturbations causées par une contrainte mal configurée.
warn
est semblable à dryrun
, mais fournit également un message immédiat sur les violations qui se produisent au moment de l'admission.
Ajouter des actions d'application
Vous pouvez ajouter enforcementAction: deny
ou enforcementAction: dryrun
à une contrainte.
L'exemple de contrainte suivant, nommé audit.yaml
, ajoute l'action dryrun
.
#audit.yaml
apiVersion: constraints.gatekeeper.sh/v1beta1
kind: K8sPSPAllowedUsers
metadata:
name: user-must-be-3333
spec:
enforcementAction: dryrun
match:
kinds:
- apiGroups: [""]
kinds: ["Pod"]
parameters:
runAsUser:
rule: MustRunAs
ranges:
- min: 3333
max: 3333
Créez la contrainte. Par exemple, appliquez-le à l'aide de kubectl apply -f
:
kubectl apply -f audit.yaml
Afficher les résultats d'audit
Les non-respects contrôlées sont ajoutés aux objets Contraintes et sont également écrits dans les journaux. Les non-respects refusés par le contrôleur d'admission n'apparaissent pas dans les journaux.
Afficher les résultats d'audit dans les objets de contrainte
Pour afficher les non-respects d'une contrainte donnée, exécutez la commande suivante et affichez les champs spec.status
.
kubectl get constraint-kind constraint-name -o yaml
Exemple
Pour afficher le résultat de la contrainte de audit.yaml
, exécutez la commande suivante :
kubectl get K8sPSPAllowedUsers user-must-be-3333 -o yaml
Le résultat renvoyé ressemble à ceci :
apiVersion: constraints.gatekeeper.sh/v1beta1
kind: K8sPSPAllowedUsers
metadata:
creationTimestamp: "2020-05-22T01:34:22Z"
generation: 1
name: user-must-be-3333
resourceVersion: "13351707"
selfLink: /apis/constraints.gatekeeper.sh/v1beta1/k8spspallowedusers/user-must-be-3333
uid: 5d0b39a8-9bcc-11ea-bb38-42010a80000c
spec:
enforcementAction: dryrun
match:
kinds:
- apiGroups:
- ""
kinds:
- Pod
parameters:
runAsUser:
ranges:
- max: 3333
min: 3333
rule: MustRunAs
status:
auditTimestamp: "2020-05-22T01:39:05Z"
byPod:
- enforced: true
id: gatekeeper-controller-manager-6b665d4c4d-lwnz5
observedGeneration: 1
totalViolations: 5
violations:
- enforcementAction: dryrun
kind: Pod
message: Container git-sync is attempting to run as disallowed user 65533
name: git-importer-86564db8cb-5r4gs
namespace: config-management-system
- enforcementAction: dryrun
kind: Pod
message: Container manager is attempting to run as disallowed user 1000
name: gatekeeper-controller-manager-6b665d4c4d-lwnz5
namespace: gatekeeper-system
- enforcementAction: dryrun
kind: Pod
message: Container kube-proxy is attempting to run without a required securityContext/runAsUser
name: kube-proxy-gke-fishy131-default-pool-7369b17c-cckf
namespace: kube-system
- enforcementAction: dryrun
kind: Pod
message: Container kube-proxy is attempting to run without a required securityContext/runAsUser
name: kube-proxy-gke-fishy131-default-pool-7369b17c-jnhb
namespace: kube-system
- enforcementAction: dryrun
kind: Pod
message: Container kube-proxy is attempting to run without a required securityContext/runAsUser
name: kube-proxy-gke-fishy131-default-pool-7369b17c-xrd8
namespace: kube-system
Afficher les résultats d'audit dans les journaux
Vous pouvez afficher les rapports d'audit dans vos journaux. Pour en savoir plus sur les journaux, consultez la section Utiliser les journaux d'audit.
Pour obtenir tous les journaux Policy Controller, exécutez la commande suivante :
kubectl logs -n gatekeeper-system -l gatekeeper.sh/system=yes
Les résultats d'audit contiennent "process":"audit"
dans les lignes de journal. Vous pouvez donc acheminer la sortie vers une autre commande et filtrer les lignes en fonction de ces lignes. Par exemple, vous pouvez utiliser jq
, qui analyse les fichiers JSON et vous permet de définir un filtre pour un type de journal spécifique.
Exemple de résultat d'audit à partir de la journalisation :
{
"level":"info",
"ts":1590111401.9769812,
"logger":"controller",
"msg":"Container kube-proxy is attempting to run without a required securityContext/runAsUser",
"process":"audit",
"audit_id":"2020-05-22T01:36:24Z",
"event_type":"violation_audited",
"constraint_kind":"K8sPSPAllowedUsers",
"constraint_name":"user-must-be-3333",
"constraint_namespace":"",
"constraint_action":"dryrun",
"resource_kind":"Pod",
"resource_namespace":"kube-system",
"resource_name":"kube-proxy-gke-fishy131-default-pool-7369b17c-xrd8"
}
Étapes suivantes
- En savoir plus sur la création de contraintes
- Utiliser la bibliothèque de modèles de contraintes
- Utiliser des contraintes au lieu de règles PodSecurityPolicies