Realizar auditorías con restricciones
Los objetos de restricción del controlador de políticas te permiten aplicar políticas a tus clústeres de Kubernetes. Para ayudarte a probar tus políticas, puedes agregar una acción de aplicación a tus restricciones. Luego, puedes ver las infracciones en los objetos de restricción y los registros.
Tipos de acciones de aplicación
Hay tres acciones de aplicación: deny
, dryrun
y warn
.
deny
es la acción de aplicación predeterminada. Se habilita de forma automática, incluso si no agregas una acción de aplicación en tu restricción. Usa deny
para evitar que se realice una operación de clúster determinada cuando hay una infracción.
dryrun
te permite supervisar los incumplimientos de tus reglas sin bloquear de forma activa las transacciones. Puedes usarlo para probar si tus restricciones funcionan según lo previsto antes de habilitar la aplicación activa mediante la acción deny
. Probar las restricciones de esta manera puede evitar interrupciones causadas por una restricción configurada de forma incorrecta.
warn
es similar a dryrun
, pero también proporciona un mensaje inmediato sobre las infracciones que ocurren en el momento de la admisión.
Se recomienda cuando pruebes restricciones nuevas o realices acciones de migración, como actualizar plataformas, para cambiar las acciones de aplicación de deny
a warn
o dryrun
, de modo que puedas probar que tus políticas funcionan como se espera.
Agrega acciones de aplicación
Puedes agregar enforcementAction: deny
o enforcementAction: dryrun
a una restricción.
La siguiente restricción de ejemplo, llamada audit.yaml
, agrega la acción 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
Crea la restricción. Por ejemplo, aplícala mediante kubectl apply -f
:
kubectl apply -f audit.yaml
Visualiza los resultados de la auditoría
Las infracciones auditadas se agregan a los objetos de restricción y también se escriben en los registros. Las infracciones que el controlador de admisión rechaza no aparecen en los registros.
Visualiza los resultados de la auditoría en objetos de la restricción
Para ver los incumplimientos de una restricción determinada, ejecuta el siguiente comando y visualiza los campos spec.status
.
kubectl get constraint-kind constraint-name -o yaml
Ejemplo
Para ver el resultado de la restricción de audit.yaml
, ejecuta el siguiente comando:
kubectl get K8sPSPAllowedUsers user-must-be-3333 -o yaml
El resultado que ves es similar al siguiente:
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
Visualiza los resultados de los auditoría en los registros
Puedes ver los informes de auditoría en tus registros. Para obtener más información sobre los registros, consulta Usa registros de auditoría.
Para obtener todos los registros del controlador de políticas, ejecuta el siguiente comando:
kubectl logs -n gatekeeper-system -l gatekeeper.sh/system=yes
Los resultados de la auditoría tienen "process":"audit"
en las líneas del registro para que puedas canalizar el resultado a otro comando y filtrar por estas líneas. Por ejemplo, puedes usar jq
, que analiza archivos JSON y te permite configurar un filtro para un tipo de registro específico.
Resultado de auditoría de ejemplo del registro:
{
"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"
}
¿Qué sigue?
- Obtén más información sobre la creación de restricciones.
- Usa la biblioteca de plantillas de restricciones.
- Aprende cómo usar restricciones en lugar de PodSecurityPolicies.