Gli oggetti vincolo di Policy Controller ti consentono di applicare criteri per i tuoi cluster Kubernetes. Per testare le tue norme, puoi aggiungere un'azione di applicazione ai tuoi vincoli. Puoi quindi visualizzare le violazioni nei log e negli oggetti vincolo.
Questa pagina è destinata agli amministratori IT e agli operatori che vogliono assicurarsi che tutte le risorse in esecuzione all'interno della piattaforma cloud soddisfino i requisiti di conformità dell'organizzazione fornendo e gestendo l'automazione per il controllo o l'applicazione e che gestiscono il ciclo di vita dell'infrastruttura tecnologica sottostante. Per scoprire di più sui ruoli comuni e sulle attività di esempio a cui facciamo riferimento nei contenuti diGoogle Cloud , consulta Ruoli e attività comuni degli utenti GKE.
Tipi di provvedimenti
Esistono tre azioni di applicazione: deny, dryrun e warn.
deny è il provvedimento predefinito. Viene attivato automaticamente, anche se non aggiungi un'azione di applicazione nel vincolo. Utilizza deny per impedire che un'operazione del cluster specificata venga eseguita in caso di violazione.
dryrun ti consente di monitorare le violazioni delle tue 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.
È consigliabile, quando si testano nuovi vincoli o si eseguono azioni di migrazione, come l'upgrade delle piattaforme, passare dalle azioni di applicazione deny a warn o dryrun in modo da poter verificare che le norme funzionino come previsto.
Aggiunta di provvedimenti
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 Visualizzazione dei risultati del controllo
Le violazioni controllate vengono aggiunte agli oggetti Constraint e vengono scritte anche nei log. Le violazioni rifiutate dal controller di ammissione non vengono visualizzate nei log.
Visualizzazione dei risultati del controllo negli oggetti vincolo
Per visualizzare le violazioni di un determinato vincolo, esegui questo 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 questo 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 Visualizzazione dei 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 questo comando:
kubectl logs -n gatekeeper-system -l gatekeeper.sh/system=yes I risultati dell'audit contengono "process":"audit" nelle righe di log, quindi puoi reindirizzare l'output a un altro comando e filtrare in base a queste righe. Ad esempio, puoi utilizzare jq, che analizza i file JSON e ti 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
- Scopri di più sulla creazione di vincoli
- Utilizzare la libreria dei modelli di vincolo
- Scopri come utilizzare i vincoli anziché PodSecurityPolicy