Controllo con vincoli

Gli oggetti vincolo di Policy Controller consentono di applicare le norme per i cluster Kubernetes. Per testare le norme, puoi aggiungere un'azione di applicazione ai vincoli. Puoi quindi visualizzare le violazioni negli oggetti vincolo e nei log.

Questa pagina è rivolta agli amministratori IT e agli operatori che vogliono assicurarsi che tutte le risorse in esecuzione nella piattaforma cloud soddisfino i requisiti di conformità dell'organizzazione fornendo e mantenendo l'automazione per l'audit o l'applicazione e che gestiscono il ciclo di vita dell'infrastruttura tecnologica sottostante. Per saperne di più sui ruoli comuni e sulle attività di esempio a cui facciamo riferimento nei Google Cloud contenuti, consulta Ruoli e attività comuni degli utenti GKE.

Tipi di provvedimenti

Esistono tre azioni di applicazione: deny, dryrun e warn.

deny è l'azione di applicazione predefinita. Viene attivata automaticamente, anche se non aggiungi un'azione di applicazione nel vincolo. Utilizza deny per impedire che si verifichi una determinata operazione del cluster in caso di violazione.

dryrun consente di monitorare le violazioni delle regole senza bloccare attivamente le transazioni. Puoi utilizzarlo per verificare se i vincoli funzionano come previsto, prima di attivare l'applicazione attiva utilizzando l'azione deny. Il test dei vincoli in questo modo può prevenire interruzioni causate da un vincolo configurato in modo errato.

warn è simile a dryrun, ma fornisce anche un messaggio immediato sulle violazioni che si verificano al momento dell'ammissione.

Quando testi nuovi vincoli o esegui azioni di migrazione, come l'upgrade delle piattaforme, ti consigliamo di passare dalle azioni di applicazione da deny a warn o dryrun in modo da poter verificare che le norme funzionino come previsto.

Aggiungere azioni di applicazione

Puoi aggiungere enforcementAction: deny o enforcementAction: dryrun a un vincolo.

Il seguente vincolo di esempio, denominato audit.yaml, aggiunge l'azione 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 il vincolo. Ad esempio, applicalo utilizzando kubectl apply -f:

kubectl apply -f audit.yaml

Visualizzare i risultati dell'audit

Le violazioni sottoposte ad audit vengono aggiunte agli oggetti vincolo e scritte anche nei log. Le violazioni rifiutate dal controller di ammissione non vengono visualizzate nei log.

Visualizzare i risultati dell'audit negli oggetti vincolo

Per visualizzare le violazioni di un determinato vincolo, esegui il seguente comando e visualizza i campi spec.status.

kubectl get constraint-kind constraint-name -o yaml

Esempio

Per visualizzare l'output del vincolo da audit.yaml, esegui il seguente comando:

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

L'output visualizzato è simile al seguente:

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

Visualizzare i risultati dell'audit nei log

Puoi utilizzare Esplora log per recuperare, visualizzare e analizzare i dati dei log per Policy Controller.

Per ottenere tutti i log di Policy Controller, esegui il seguente comando:

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

I risultati dell'audit hanno "process":"audit" nelle righe di log, quindi puoi inviare l'output a un altro comando e filtrare in base a queste righe. Ad esempio, puoi utilizzare jq, che analizza i file JSON e consente di impostare un filtro per un tipo di log specifico.

Esempio di risultato dell'audit dalla registrazione:

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

Passaggi successivi