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?
- Leia mais sobre a criação de restrições
- Use a biblioteca de modelos de restrições
- Saiba como usar restrições em vez de PodSecurityPolicies