Utilizza vincoli dei criteri con restrizioni degli standard di sicurezza dei pod

Policy Controller include una libreria predefinita di modelli di vincolo che puoi utilizzare con il pacchetto con restrizioni degli standard di sicurezza dei pod. Questo pacchetto ti consente di avere molte delle protezioni dei criteri con restrizioni degli standard di sicurezza dei pod di Kubernetes, con la possibilità di testare i criteri prima di applicarli e di escludere la copertura di risorse specifiche.

Il bundle include questi vincoli, mappati ai seguenti controlli dei criteri con restrizioni degli standard di sicurezza dei pod di Kubernetes (PSS):

Nome vincolo Descrizione vincolo Nome controllo
pss-restricted-v2022-psp-volume-types Utilizzo di tipi di volume Tipi di volume
pss-restricted-v2022-privilege-escalation Limitazione dell'escalation ai privilegi root Escalation dei privilegi
pss-restricted-v2022-running-as-non-root Il valore runAsNonRoot del container In esecuzione come non principale
pss-restricted-v2022-running-as-non-root-user L'ID utente del contenitore In esecuzione come utente non root
pss-restricted-v2022-seccomp Il profilo seccomp utilizzato dai container Sec.
pss-restricted-v2022-capabilities Funzionalità di Linux Funzionalità

Prima di iniziare

  1. Installa e inizializza Google Cloud CLI, che fornisce i comandi gcloud e kubectl utilizzati in queste istruzioni. Se utilizzi Cloud Shell, Google Cloud CLI è preinstallato.
  2. Installa Policy Controller v1.11.1 o versioni successive sul tuo cluster con la libreria predefinita di modelli di vincolo.

Controlla il pacchetto di criteri con restrizioni degli standard di sicurezza dei pod

Policy Controller consente di applicare i criteri per il cluster Kubernetes. Per aiutarti a testare i tuoi carichi di lavoro e la loro conformità alle best practice consigliate da Google e descritte nella tabella precedente, puoi eseguire il deployment di questi vincoli in modalità di controllo per individuare le violazioni e, soprattutto, darti la possibilità di correggerle prima di applicarle al tuo cluster Kubernetes.

Puoi applicare questi criteri con spec.enforcementAction impostato su dryrun utilizzando kubectl, kpt, o Config Sync.

kubectl

  1. (Facoltativo) Visualizza l'anteprima dei vincoli dei criteri con kubectl:

    kubectl kustomize https://github.com/GoogleCloudPlatform/gke-policy-library.git/anthos-bundles/pss-restricted-v2022
    
  2. Applica i vincoli dei criteri con kubectl:

    kubectl apply -k https://github.com/GoogleCloudPlatform/gke-policy-library.git/anthos-bundles/pss-restricted-v2022
    

    L'output è il seguente:

    k8spspallowprivilegeescalationcontainer.constraints.gatekeeper.sh/pss-restricted-v2022-privilege-escalation created
    k8spspallowedusers.constraints.gatekeeper.sh/pss-restricted-v2022-running-as-non-root created
    k8spspcapabilities.constraints.gatekeeper.sh/pss-restricted-v2022-capabilities created
    k8spspseccomp.constraints.gatekeeper.sh/pss-restricted-v2022-seccomp created
    k8spspvolumetypes.constraints.gatekeeper.sh/pss-restricted-v2022-psp-volume-types created
    
  3. Verifica che i vincoli dei criteri siano stati installati e controlla se esistono violazioni nel cluster:

    kubectl get -k https://github.com/GoogleCloudPlatform/gke-policy-library.git/anthos-bundles/pss-restricted-v2022
    

    L'output è simile al seguente:

    NAME                                                                                                          ENFORCEMENT-ACTION   TOTAL-VIOLATIONS
    k8spspallowprivilegeescalationcontainer.constraints.gatekeeper.sh/pss-restricted-v2022-privilege-escalation   dryrun               0
    
    NAME                                                                                    ENFORCEMENT-ACTION   TOTAL-VIOLATIONS
    k8spspallowedusers.constraints.gatekeeper.sh/pss-restricted-v2022-running-as-non-root   dryrun               0
    
    NAME                                                                             ENFORCEMENT-ACTION   TOTAL-VIOLATIONS
    k8spspcapabilities.constraints.gatekeeper.sh/pss-restricted-v2022-capabilities   dryrun               0
    
    NAME                                                                   ENFORCEMENT-ACTION   TOTAL-VIOLATIONS
    k8spspseccomp.constraints.gatekeeper.sh/pss-restricted-v2022-seccomp   dryrun               0
    
    NAME                                                                                ENFORCEMENT-ACTION   TOTAL-VIOLATIONS
    k8spspvolumetypes.constraints.gatekeeper.sh/pss-restricted-v2022-psp-volume-types   dryrun               0
    

kpt

  1. Installa e configura kpt. kpt viene utilizzato in queste istruzioni per personalizzare ed eseguire il deployment delle risorse Kubernetes.

  2. Scarica il pacchetto di criteri della versione 2022 degli standard di sicurezza dei pod (PSS) Restricted da GitHub utilizzando kpt:

    kpt pkg get https://github.com/GoogleCloudPlatform/gke-policy-library.git/anthos-bundles/pss-restricted-v2022
    
  3. Esegui la funzione kpt set-enforcement-action per impostare l'azione di applicazione dei criteri su dryrun:

    kpt fn eval pss-restricted-v2022 -i gcr.io/kpt-fn/set-enforcement-action:v0.1 \
      -- enforcementAction=dryrun
    
  4. Inizializza la directory di lavoro con kpt, che crea una risorsa per tenere traccia delle modifiche:

    cd pss-restricted-v2022
    kpt live init
    
  5. Applica i vincoli dei criteri con kpt:

    kpt live apply
    
  6. Verifica che i vincoli dei criteri siano stati installati e controlla se esistono violazioni nel cluster:

    kpt live status --output table --poll-until current
    

    Lo stato CURRENT conferma l'installazione dei vincoli.

Config Sync

  1. Installa e configura kpt. kpt viene utilizzato in queste istruzioni per personalizzare ed eseguire il deployment delle risorse Kubernetes.

Gli operatori che utilizzano Config Sync per eseguire il deployment dei criteri nei propri cluster possono utilizzare le seguenti istruzioni:

  1. Passa alla directory di sincronizzazione per Config Sync:

    cd SYNC_ROOT_DIR
    

    Per creare o aggiungere .gitignore con resourcegroup.yaml:

    echo resourcegroup.yaml >> .gitignore
    

  2. Crea una directory policies dedicata:

    mkdir -p policies
    
  3. Scarica il pacchetto di criteri della versione 2022 degli standard di sicurezza dei pod (PSS) Restricted da GitHub utilizzando kpt:

    kpt pkg get https://github.com/GoogleCloudPlatform/gke-policy-library.git/anthos-bundles/pss-restricted-v2022 policies/pss-restricted-v2022
    
  4. Esegui la funzione kpt set-enforcement-action per impostare l'azione di applicazione dei criteri su dryrun:

    kpt fn eval policies/pss-restricted-v2022 -i gcr.io/kpt-fn/set-enforcement-action:v0.1 -- enforcementAction=dryrun
    
  5. (Facoltativo) Visualizza l'anteprima dei vincoli dei criteri da creare:

    kpt live init policies/pss-restricted-v2022
    kpt live apply --dry-run policies/pss-restricted-v2022
    
  6. Se la directory di sincronizzazione per Config Sync utilizza Kustomize, aggiungi policies/pss-baseline-v2022 alla directory principale kustomization.yaml. In caso contrario, rimuovi il file policies/pss-baseline-v2022/kustomization.yaml:

    rm SYNC_ROOT_DIR/policies/pss-baseline-v2022/kustomization.yaml
    
  7. Esegui il push delle modifiche al repository Config Sync:

    git add SYNC_ROOT_DIR/policies/pss-restricted-v2022
    git commit -m 'Adding Pod Security Standards Restricted audit enforcement'
    git push
    
  8. Verifica lo stato dell'installazione:

    watch gcloud beta container fleet config-management status --project PROJECT_ID
    

    Lo stato SYNCED conferma l'installazione dei criteri.

Visualizza violazioni delle norme

Una volta installati i vincoli dei criteri in modalità di controllo, le violazioni sul cluster possono essere visualizzate nell'interfaccia utente tramite la dashboard di Policy Controller.

Puoi anche usare kubectl per visualizzare le violazioni nel cluster utilizzando il seguente comando:

kubectl get constraint -l policycontroller.gke.io/bundleName=pss-restricted-v2022 -o json | jq -cC '.items[]| [.metadata.name,.status.totalViolations]'

In presenza di violazioni, è possibile visualizzare un elenco dei messaggi di violazione per vincolo:

kubectl get constraint -l policycontroller.gke.io/bundleName=pss-restricted-v2022 -o json | jq -C '.items[]| select(.status.totalViolations>0)| [.metadata.name,.status.violations[]?]'

Modifica l'azione di applicazione del pacchetto di criteri limitati per gli standard di sicurezza dei pod

Dopo aver esaminato le violazioni dei criteri nel cluster, puoi valutare la possibilità di cambiare la modalità di applicazione in modo che il controller di ammissione warn o deny blocchi l'applicazione delle risorse non conformi al cluster.

kubectl

  1. Usa kubectl per impostare l'azione di applicazione dei criteri su warn:

    kubectl get constraint -l policycontroller.gke.io/bundleName=pss-restricted-v2022 -o name | xargs -I {} kubectl patch {} --type='json' -p='[{"op":"replace","path":"/spec/enforcementAction","value":"warn"}]'
    
  2. Verifica che l'azione di applicazione dei vincoli dei criteri sia stata aggiornata:

    kubectl get constraint -l policycontroller.gke.io/bundleName=pss-restricted-v2022
    

kpt

  1. Esegui la funzione kpt set-enforcement-action per impostare l'azione di applicazione dei criteri su warn:

    kpt fn eval -i gcr.io/kpt-fn/set-enforcement-action:v0.1 -- enforcementAction=warn
    
  2. Applica i vincoli dei criteri:

    kpt live apply
    

Config Sync

Gli operatori che utilizzano Config Sync per eseguire il deployment dei criteri nei propri cluster possono utilizzare le seguenti istruzioni:

  1. Passa alla directory di sincronizzazione per Config Sync:

    cd SYNC_ROOT_DIR
    
  2. Esegui la funzione kpt set-enforcement-action per impostare l'azione di applicazione dei criteri su warn:

    kpt fn eval policies/pss-restricted-v2022 -i gcr.io/kpt-fn/set-enforcement-action:v0.1 -- enforcementAction=warn
    
  3. Esegui il push delle modifiche al repository Config Sync:

    git add SYNC_ROOT_DIR/pss-restricted-v2022
    git commit -m 'Adding Pod Security Standards Restricted policy bundle warn enforcement'
    git push
    
  4. Verifica lo stato dell'installazione:

    gcloud alpha anthos config sync repo list --project PROJECT_ID
    

    Il repository visualizzato nella colonna SYNCED conferma l'installazione dei criteri.

Testa l'applicazione dei criteri

Crea una risorsa non conforme nel cluster utilizzando il seguente comando:

cat <<EOF | kubectl apply -f -
apiVersion: v1
kind: Pod
metadata:
  namespace: default
  name: wp-non-compliant
  labels:
    app: wordpress
spec:
  containers:
    - image: wordpress
      name: wordpress
      ports:
      - containerPort: 80
        hostPort: 80
        name: wordpress
EOF

Il controller di ammissione dovrebbe generare un avviso che elenca le violazioni delle norme violate da questa risorsa, come mostrato nell'esempio seguente:

Warning: [pss-baseline-v2022-host-ports] The specified hostNetwork and hostPort are not allowed, pod: wp-non-compliant. Allowed values: {"max": 0, "min": 0}
pod/wp-non-compliant created

Rimuovi il pacchetto di criteri limitati per gli standard di sicurezza dei pod

Se necessario, il pacchetto di criteri limitati per gli standard di sicurezza dei pod può essere rimosso dal cluster.

kubectl

  • Utilizza kubectl per rimuovere i criteri:

    kubectl delete constraint -l policycontroller.gke.io/bundleName=pss-restricted-v2022
    

kpt

  • Rimuovi i criteri:

    kpt live destroy
    

Config Sync

Gli operatori che utilizzano Config Sync per eseguire il deployment dei criteri nei propri cluster possono utilizzare le seguenti istruzioni:

  1. Esegui il push delle modifiche al repository Config Sync:

    git rm -r SYNC_ROOT_DIR/policies/pss-restricted-v2022
    git commit -m 'Removing Pod Security Standards Restricted policies'
    git push
    
  2. Verifica lo stato:

    gcloud alpha anthos config sync repo list --project PROJECT_ID
    

    Il repository visualizzato nella colonna SYNCED conferma la rimozione delle norme.