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 do 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