Auditoria através de restrições

Os objetos de restrição do Policy Controller permitem-lhe aplicar políticas aos seus clusters do Kubernetes. Para ajudar a testar as suas políticas, pode adicionar uma ação de aplicação às restrições. Em seguida, pode ver as violações nos objetos de restrição e nos registos.

Esta página destina-se a administradores de TI e operadores que querem garantir que todos os recursos executados na plataforma de nuvem cumprem os requisitos de conformidade organizacionais, fornecendo e mantendo a automatização para auditar ou aplicar, e que gerem o ciclo de vida da infraestrutura tecnológica subjacente. Para saber mais sobre as funções comuns e as tarefas de exemplo que referimos no Google Cloud conteúdo, consulte Funções e tarefas comuns de utilizador do GKE.

Tipos de ações de aplicação

Existem três ações de aplicação: deny, dryrun e warn.

deny é a ação de aplicação predefinida. É ativada automaticamente, mesmo que não adicione uma ação de aplicação na restrição. Use deny para impedir que uma operação de cluster específica ocorra quando existir uma violação.

dryrun permite-lhe monitorizar violações das suas regras sem bloquear ativamente as transações. Pode usá-lo para testar se as restrições estão a funcionar como previsto antes de ativar a aplicação ativa através da ação deny. Testar as restrições desta forma pode evitar interrupções causadas por uma restrição configurada incorretamente.

warn é semelhante a dryrun, mas também fornece uma mensagem imediata sobre as violações que ocorrem no momento da admissão.

Recomendamos que, quando testar novas restrições ou realizar ações de migração, como a atualização de plataformas, altere as ações de aplicação de deny para warn ou dryrun para poder testar se as suas políticas funcionam como esperado.

Adicionar ações de aplicação

Pode adicionar enforcementAction: deny ou enforcementAction: dryrun a uma restrição.

A restrição de exemplo seguinte, denominada audit.yaml, adiciona a ação 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 

Crie a restrição. Por exemplo, aplique-o com kubectl apply -f:

kubectl apply -f audit.yaml 

Visualizar resultados da auditoria

As violações auditadas são anexadas aos objetos Constraint e também são escritas nos registos. As violações que o controlador de admissão rejeita não aparecem nos registos.

Visualizar resultados de auditoria em objetos de restrição

Para ver as violações de uma determinada restrição, execute o seguinte comando e veja os campos spec.status.

kubectl get constraint-kind constraint-name -o yaml 

Exemplo

Para ver o resultado da restrição de audit.yaml, execute o seguinte comando:

kubectl get K8sPSPAllowedUsers user-must-be-3333 -o yaml 

O resultado que vê é semelhante ao seguinte:

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 resultados de auditoria nos registos

Pode usar o Explorador de registos para obter, ver e analisar dados de registos do Policy Controller.

Para obter todos os registos do Policy Controller, execute o seguinte comando:

kubectl logs -n gatekeeper-system -l gatekeeper.sh/system=yes 

Os resultados da auditoria têm "process":"audit" nas linhas do registo, pelo que pode transferir a saída para outro comando e filtrar por estas linhas. Por exemplo, pode usar jq, que analisa ficheiros JSON e permite definir um filtro para um tipo de registo específico.

Exemplo de resultado de auditoria do registo:

{ "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" } 

O que se segue?