Los objetos de restricción de Policy Controller te permiten aplicar políticas en tus clústeres de Kubernetes. Para probar tus políticas, puedes añadir una medida de cumplimiento a tus restricciones. A continuación, puedes ver las infracciones en los objetos de restricción y en los registros.
Esta página está dirigida a administradores y operadores de TI que quieran asegurarse de que todos los recursos que se ejecutan en la plataforma en la nube cumplen los requisitos de cumplimiento de la organización proporcionando y manteniendo la automatización para auditar o aplicar, y que gestionan el ciclo de vida de la infraestructura tecnológica subyacente. Para obtener más información sobre los roles habituales y las tareas de ejemplo a las que hacemos referencia en el contenido, consulta Roles y tareas de usuario habituales de GKE.Google Cloud
Tipos de medidas por incumplimiento de políticas
Hay tres tipos de medidas: deny
, dryrun
y warn
.
deny
es la medida por incumplimiento de políticas predeterminada. Se habilita automáticamente, aunque no añadas ninguna medida de cumplimiento en tu restricción. Usa deny
para evitar que se produzca una operación de clúster determinada cuando haya una infracción.
dryrun
te permite monitorizar las infracciones de tus reglas sin bloquear activamente las transacciones. Puedes usarlo para comprobar si tus restricciones funcionan correctamente antes de habilitar la aplicación activa con la acción deny
. Si pruebas las restricciones de esta forma, puedes evitar interrupciones causadas por una restricción configurada incorrectamente.
warn
es similar a dryrun
, pero también proporciona un mensaje inmediato sobre las infracciones que se producen en el momento de la admisión.
Se recomienda usar esta opción al probar nuevas restricciones o realizar acciones de migración, como actualizar plataformas, para cambiar las acciones de aplicación de deny
a warn
o dryrun
, de modo que puedas comprobar que tus políticas funcionan correctamente.
Añadir medidas por incumplimiento de políticas
Puedes añadir enforcementAction: deny
o enforcementAction: dryrun
a una restricción.
La siguiente restricción de ejemplo, denominada audit.yaml
, añade 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ícalo con kubectl apply -f
:
kubectl apply -f audit.yaml
Ver los resultados de la auditoría
Las infracciones auditadas se añaden a los objetos Constraint y también se escriben en los registros. Las infracciones que rechaza el controlador de admisión no aparecen en los registros.
Ver los resultados de la auditoría en objetos Constraint
Para ver las infracciones de una restricción determinada, ejecuta el siguiente comando y consulta 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
La salida que verás será similar a la 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
Ver los resultados de la auditoría en los registros
Puedes usar el Explorador de registros para obtener, ver y analizar datos de registro de Policy Controller.
Para obtener todos los registros de Policy Controller, 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 de registro, por lo que puedes canalizar la salida a otro comando y filtrar por estas líneas. Por ejemplo, puedes usar jq
, que analiza archivos JSON y te permite definir un filtro para un tipo de registro específico.
Ejemplo de resultado de auditoría de 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"
}
Siguientes pasos
- Consulta más información sobre cómo crear restricciones.
- Usar la biblioteca de plantillas de restricciones
- Consulta cómo usar restricciones en lugar de PodSecurityPolicies.