Gli oggetti vincolo di Policy Controller ti consentono di applicare criteri per i tuoi cluster Kubernetes. Per aiutarti a testare le tue norme, puoi aggiungere un'azione di applicazione ai vincoli. Puoi quindi visualizzare le violazioni negli oggetti e nei log delle limitazioni.
Questa pagina è rivolta ad amministratori e operatori IT che vogliono assicurarsi che tutte le risorse in esecuzione all'interno della piattaforma cloud soddisfino i requisiti di conformità dell'organizzazione fornendo e mantenendo l'automazione per eseguire controlli o applicare le norme e che gestiscono il ciclo di vita dell'infrastruttura tecnologica sottostante. Per approfondire i ruoli comuni e le attività di esempio a cui facciamo riferimento nei contenuti di Google Cloud, consulta Ruoli e attività comuni degli utenti di GKE Enterprise.
Tipi di provvedimenti
Esistono tre azioni di applicazione: deny
, dryrun
e warn
.
deny
è l'azione di applicazione predefinita. Viene attivato automaticamente, anche se
non aggiungi un'azione di applicazione nel vincolo. Utilizza deny
per impedire l'esecuzione di una determinata operazione del cluster 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 forzata utilizzando l'azione deny
. Testare
i vincoli in questo modo può evitare 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 impostare le azioni di applicazione su deny
anziché su warn
o dryrun
in modo da 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 di controllo
Le violazioni sottoposte a controllo vengono aggiunte agli oggetti Constraint e vengono scritte anche nei log. Le violazioni rifiutate dal controllore di ammissione non vengono visualizzate nei log.
Visualizzazione dei risultati di controllo negli oggetti vincolo
Per visualizzare le violazioni di una determinata limitazione, esegui il seguente comando e visualizza i campi spec.status
.
kubectl get constraint-kind constraint-name -o yaml
Esempio
Per visualizzare l'output della limitazione da audit.yaml
, esegui il
comando seguente:
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 di controllo nei log
Puoi utilizzare Logs Explorer per recuperare, visualizzare e analizzare i dati dei log di Policy Controller.
Per recuperare tutti i log di Policy Controller, esegui il seguente comando:
kubectl logs -n gatekeeper-system -l gatekeeper.sh/system=yes
I risultati del controllo contengono "process":"audit"
nelle righe del log, quindi puoi incanalare
l'output in 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 di controllo dal logging:
{
"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 di modelli di vincolo
- Scopri come utilizzare i vincoli anziché i PodSecurityPolicy