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.
Esta página está destinada a los administradores de TI y operadores que desean asegurarse de que todos los recursos que se ejecutan dentro de la plataforma en la nube cumplan con los requisitos de cumplimiento de la organización. Para ello, deben proporcionar y mantener la automatización para auditar o aplicar el cumplimiento, y administrar el ciclo de vida de la infraestructura tecnológica subyacente. Para obtener más información sobre los roles comunes y las tareas de ejemplo a las que hacemos referencia en el contenido de Google Cloud, consulta Tareas y roles comunes de los usuarios de GKE Enterprise.
Tipos de acciones de aplicación
Existen 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 los incumplimientos que se producen en el momento de la admisión.
Cuando pruebes restricciones nuevas o realices acciones de migración, como actualizar plataformas, se recomienda cambiar las acciones de aplicación de deny
a warn
o dryrun
para que puedas probar que tus políticas funcionen 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 usar el Explorador de registros para recuperar, ver y analizar los datos de registro de Policy Controller.
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.