Mantieni tutto organizzato con le raccolte Salva e classifica i contenuti in base alle tue preferenze.

Utilizza i vincoli dei criteri PCI-DSS v3.2.1

Policy Controller viene fornita con una libreria predefinita di modelli di vincolo che possono essere utilizzati con il pacchetto PCI-DSS v3.2.1 per valutare la conformità delle risorse del cluster ad alcuni aspetti dello standard PCI-DSS (Payment Card Industry Data Security Standard) v3.2.1.

Il bundle richiede Policy Controller v1.14.0 o versioni successive e include questi vincoli che mappano ai seguenti controlli PCI-DSS v3.2.1:

Vincolo Gestione Descrizione vincolo referenziale Profilo
pci-dss-v3.2.1-resources-have-required-labels 1,1,4 Garantisce i requisiti di un firewall richiedendo che tutte le app contengano un'etichetta specificata. No Standard
pci-dss-v3.2.1-apps-must-have-cert-set-of-annotations 1.1.5, 2.4 Garantisce i requisiti di controllo della rete richiedendo che tutte le app contengano un'annotazione specificata. No Standard
pci-dss-v3.2.1-request-default-deny-network-policies 1.2, 1.3, 2.2.2 Richiede che in ogni spazio dei nomi definito nel cluster sia impostata un'autorizzazione predefinita per il traffico in uscita, pari a NetworkPolicy. Esteso
pci-dss-v3.2.1-block-all-ingress 1,2, 1,3 Limita la creazione di oggetti in entrata. No Esteso
pci-dss-v3.2.1-request-valid-network-ranges 1.2, 1.3.2 Limita gli intervalli CIDR consentiti per l'utilizzo con traffico in entrata e in uscita. No Esteso
pci-dss-v3.2.1-request-namespace-network-policies 1.2 Richiede che ogni spazio dei nomi definito nel cluster abbia un criterio NetworkPolicy. Standard
pci-dss-v3.2.1-enforce-managed-by-configmanagement-label 1.2.2, 8.1.2 Richiede un'etichetta app.kubernetes.io/managed-by= valida su RoleBinding risorse. No Standard
pci-dss-v3.2.1-block-creation-with-default-serviceaccount 2.1 Limita la creazione di risorse utilizzando un account di servizio predefinito. No Standard
pci-dss-v3.2.1-restrict-default-namespace 2.1 Impedisce ai pod di utilizzare lo spazio dei nomi predefinito. No Standard
pci-dss-v3.2.1-asm-peer-authn-strict-mtls 4.1 L'applicazione forzata di tutti i peerPeers non può sovrascrivere il protocollo mMTLS in modo rigoroso. No Standard
pci-dss-v3.2.1-request-av-daemonset 5.1.1, 5.3 Richiede la presenza di un daemonset antivirus. Standard
pci-dss-v3.2.1-enforce-config-management 5,3, 6,1, 6,4 Forza la presenza e l'attivazione di Config Management. No Standard
pci-dss-v3.2.1-enforce-cloudarmor-backendconfig 6,5, 6,6 Applica la configurazione di Cloud Armor a BackendConfig risorse. No Standard
pci-dss-v3.2.1-restrict-rbac-subjects 8.1, 8.1.5 Limita l'uso di nomi nei soggetti RBAC ai valori consentiti. No Esteso
pci-dss-v3.2.1-block-secrets-of-type-basic-auth 8.1.5, 8.2.3, 8.5 Limita l'uso dei secret di tipo autenticazione di base. No Standard
pci-dss-v3.2.1-nodes-avere-un-tempo-coerente 10.4.1, 10.4.3 Garantisce un tempo coerente e corretto sui nodi garantendo l'utilizzo di COS come immagine del sistema operativo. No Standard

Vincoli bundle standard ed estesi

Il bundle PCI-DSS v3.2.1 implementa un insieme valutato di requisiti politici per ottenere alcuni aspetti dei controlli PCI-DSS v3.2.1. Oltre alla modifica del carico di lavoro per soddisfare i requisiti del bundle standard, è disponibile anche un insieme facoltativo di vincoli estesi che richiedono la personalizzazione per il tuo ambiente.

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, l'Google Cloud CLI è preinstallata.
  2. Installare Policy Controller nel cluster con la libreria predefinita di modelli di vincolo. Devi anche attivare il supporto per i vincoli di riferimento, in quanto questo pacchetto contiene vincoli di riferimento, elencati nella tabella Panoramica.

Configura Policy Controller per i vincoli di riferimento

  1. Salva il seguente manifest YAML in un file come policycontroller-config.yaml. Il manifest configura il controller dei criteri per guardare determinati tipi di oggetti.

    apiVersion: config.gatekeeper.sh/v1alpha1
    kind: Config
    metadata:
      name: config
      namespace: "gatekeeper-system"
    spec:
      sync:
        syncOnly:
          - group: "apps"
            version: "v1"
            kind: "DaemonSet"
          - group: "networking.k8s.io"
            version: "v1"
            kind: "NetworkPolicy"
    
  2. Applica il manifest policycontroller-config.yaml:

    kubectl apply -f policycontroller-config.yaml
    

Configura il carico di lavoro del cluster per PCI-DSS v3.2.1

Pacchetto standard

  1. Tutte le app (ReplicaSet, Deployment, StatefulSet e DaemonSet) devono includere una pci-dss-firewall-audit label con lo schema di pci-dss-[0-9]{4}q[1-4].
  2. Tutte le app (ReplicaSet, Deployment, StatefulSet e DaemonSet) devono includere un'annotazione network-controls/date con lo schema: YYYY-MM-DD.
  3. Ogni namespace definito nel cluster deve avere un NetworkPolicy.
  4. È richiesto l'utilizzo di Anthos Config Management. Per impostazione predefinita, è obbligatorio configmanagement.gke.io per Config Management, che può però essere personalizzato nel vincolo pci-dss-v3.2.1-enforce-managed-by-configmanagement-label.
  5. Non è possibile creare risorse utilizzando l'account di servizio predefinito.
  6. Impossibile utilizzare l'impostazione predefinita namespace per i pod.
  7. Se utilizzi Anthos Service Mesh, ASM PeerAuthentication deve utilizzare il protocollo mTLS rigoroso spec.mtls.mode: STRICT.
  8. È necessaria una soluzione antivirus. L'impostazione predefinita è la presenza di un daemonset denominato clamav in pci-dss-av namespace. Tuttavia, il nome e lo spazio dei nomi di daemonset possono essere personalizzati nel vincolo pci-dss-v3.2.1-require-av-daemonset. Per un esempio di esecuzione di clamav in daemonset, vedi Container ClamAV di Kubernetes.
  9. La presenza e l'abilitazione di Anthos Config Management sono obbligatorie.
  10. Tutte le BackendConfig devono essere configurate per CloudArmor.
  11. L'utilizzo di secret di tipo basic-auth non è consentito.
  12. Per un'immagine coerente, tutti i nodi devono utilizzare il sistema operativo ottimizzato per i container Google.

Cofanetto esteso (facoltativo con personalizzazione obbligatoria)

  1. Ogni namespace definito nel cluster ha un NetworkPolicy di negazione predefinito per il traffico in uscita, le eccezioni consentite possono essere specificate in pci-dss-v3.2.1-require-namespace-network-policies.
  2. È possibile creare solo oggetti Ingress consentiti (tipi Ingress, Gateway e Service di NodePort e LoadBalancer), che possono essere specificati in pci-dss-v3.2.1-block-all-ingress.
  3. Solo gli intervalli IP consentiti possono essere utilizzati per Ingress e Express, che possono essere specificati in pci-dss-v3.2.1-require-valid-network-ranges.
  4. Nelle associazioni RBAC possono essere utilizzati solo gli oggetti consentiti; i tuoi nomi di dominio possono essere specificati in pci-dss-v3.2.1-restrict-rbac-subjects.

Controlla i criteri PCI-DSS v3.2.1 con Policy Controller

Policy Controller consente di applicare i criteri per il cluster Kubernetes. Per testare i carichi di lavoro e la loro conformità in base ai criteri PCI-DSS v3.2.1 descritti nella tabella precedente, puoi eseguire il deployment di questi vincoli in modalità "di controllo" per rivelare le violazioni e, soprattutto, darti la possibilità di correggerli prima di applicarle al 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/acm-policy-controller-library.git/anthos-bundles/pci-dss-v3.2.1
    
  2. Applica i vincoli dei criteri con kubectl:

    kubectl apply -k https://github.com/GoogleCloudPlatform/acm-policy-controller-library.git/anthos-bundles/pci-dss-v3.2.1
    

    L'output è il seguente:

    asmpeerauthnstrictmtls.constraints.gatekeeper.sh/pci-dss-v3.2.1-asm-peer-authn-strict-mtls created
    k8sblockcreationwithdefaultserviceaccount.constraints.gatekeeper.sh/pci-dss-v3.2.1-block-creation-with-default-serviceaccount created
    k8sblockobjectsoftype.constraints.gatekeeper.sh/pci-dss-v3.2.1-block-secrets-of-type-basic-auth created
    k8senforcecloudarmorbackendconfig.constraints.gatekeeper.sh/pci-dss-v3.2.1-enforce-cloudarmor-backendconfig created
    k8senforceconfigmanagement.constraints.gatekeeper.sh/pci-dss-v3.2.1-enforce-config-management created
    k8srequirecosnodeimage.constraints.gatekeeper.sh/pci-dss-v3.2.1-nodes-have-consistent-time created
    k8srequiredaemonsets.constraints.gatekeeper.sh/pci-dss-v3.2.1-require-av-daemonset created
    k8srequirenamespacenetworkpolicies.constraints.gatekeeper.sh/pci-dss-v3.2.1-require-namespace-network-policies created
    k8srequiredannotations.constraints.gatekeeper.sh/pci-dss-v3.2.1-apps-must-have-certain-set-of-annotations created
    k8srequiredlabels.constraints.gatekeeper.sh/pci-dss-v3.2.1-enforce-managed-by-configmanagement-label created
    k8srequiredlabels.constraints.gatekeeper.sh/pci-dss-v3.2.1-resources-have-required-labels created
    k8srestrictnamespaces.constraints.gatekeeper.sh/pci-dss-v3.2.1-restrict-default-namespace created
    
  3. Verifica che siano stati installati i vincoli dei criteri e controlla se esistono violazioni nel cluster:

    kubectl get -k https://github.com/GoogleCloudPlatform/acm-policy-controller-library.git/anthos-bundles/pci-dss-v3.2.1
    

    L'output è simile al seguente:

    NAME                                                                                         ENFORCEMENT-ACTION   TOTAL-VIOLATIONS
    asmpeerauthnstrictmtls.constraints.gatekeeper.sh/pci-dss-v3.2.1-asm-peer-authn-strict-mtls   dryrun               0
    
    NAME                                                                                                                            ENFORCEMENT-ACTION   TOTAL-VIOLATIONS
    k8sblockcreationwithdefaultserviceaccount.constraints.gatekeeper.sh/pci-dss-v3.2.1-block-creation-with-default-serviceaccount   dryrun               0
    
    NAME                                                                                              ENFORCEMENT-ACTION   TOTAL-VIOLATIONS
    k8sblockobjectsoftype.constraints.gatekeeper.sh/pci-dss-v3.2.1-block-secrets-of-type-basic-auth   dryrun               0
    
    NAME                                                                                                          ENFORCEMENT-ACTION   TOTAL-VIOLATIONS
    k8senforcecloudarmorbackendconfig.constraints.gatekeeper.sh/pci-dss-v3.2.1-enforce-cloudarmor-backendconfig   dryrun               0
    
    NAME                                                                                            ENFORCEMENT-ACTION   TOTAL-VIOLATIONS
    k8senforceconfigmanagement.constraints.gatekeeper.sh/pci-dss-v3.2.1-enforce-config-management   dryrun               0
    
    NAME                                                                                         ENFORCEMENT-ACTION   TOTAL-VIOLATIONS
    k8srequirecosnodeimage.constraints.gatekeeper.sh/pci-dss-v3.2.1-nodes-have-consistent-time   dryrun               0
    
    NAME                                                                                 ENFORCEMENT-ACTION   TOTAL-VIOLATIONS
    k8srequiredaemonsets.constraints.gatekeeper.sh/pci-dss-v3.2.1-require-av-daemonset   dryrun               0
    
    NAME                                                                                                             ENFORCEMENT-ACTION   TOTAL-VIOLATIONS
    k8srequirenamespacenetworkpolicies.constraints.gatekeeper.sh/pci-dss-v3.2.1-require-namespace-network-policies   dryrun               0
    
    NAME                                                                                                        ENFORCEMENT-ACTION   TOTAL-VIOLATIONS
    k8srequiredannotations.constraints.gatekeeper.sh/pci-dss-v3.2.1-apps-must-have-certain-set-of-annotations   dryrun               0
    
    NAME                                                                                                   ENFORCEMENT-ACTION   TOTAL-VIOLATIONS
    k8srequiredlabels.constraints.gatekeeper.sh/pci-dss-v3.2.1-enforce-managed-by-configmanagement-label   dryrun               0
    k8srequiredlabels.constraints.gatekeeper.sh/pci-dss-v3.2.1-resources-have-required-labels              dryrun               0
    
    NAME                                                                                        ENFORCEMENT-ACTION   TOTAL-VIOLATIONS
    k8srestrictnamespaces.constraints.gatekeeper.sh/pci-dss-v3.2.1-restrict-default-namespace   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 bundle di criteri PCI-DSS v3.2.1 da GitHub utilizzando kpt:

    kpt pkg get https://github.com/GoogleCloudPlatform/acm-policy-controller-library.git/anthos-bundles/pci-dss-v3.2.1
    
  3. Esegui la funzione set-enforcement-action kpt per impostare l'azione di applicazione dei criteri su dryrun:

    kpt fn eval pci-dss-v3.2.1 -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 monitorare le modifiche:

    cd pci-dss-v3.2.1
    kpt live init
    
  5. Applica i vincoli dei criteri con kpt:

    kpt live apply
    
  6. Verifica che siano stati installati i vincoli dei criteri 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.

  2. Se è la prima volta che utilizzi Anthos Config Management, attiva Anthos Config Management.

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

  1. Passa alla directory di sincronizzazione per Config Sync:

    cd SYNC_ROOT_DIR
    
  2. Crea una directory policies dedicata:

    mkdir -p policies
    
  3. Scarica il bundle di criteri PCI-DSS v3.2.1 da GitHub utilizzando kpt:

    kpt pkg get https://github.com/GoogleCloudPlatform/acm-policy-controller-library.git/anthos-bundles/pci-dss-v3.2.1 policies/pci-dss-v3.2.1
    
  4. Esegui la funzione set-enforcement-action kpt per impostare l'azione di applicazione dei criteri su dryrun:

    kpt fn eval policies/pci-dss-v3.2.1 -i gcr.io/kpt-fn/set-enforcement-action:v0.1 -- enforcementAction=dryrun
    
  5. (Facoltativo) Visualizza l'anteprima dei vincoli dei criteri che verranno creati:

    kpt live init policies/pci-dss-v3.2.1
    kpt live apply --dry-run policies/pci-dss-v3.2.1
    
  6. Se la directory di sincronizzazione per Config Sync utilizza Kustomize, aggiungi policies/pss-baseline-v2022 alla directory principale kustomization.yaml. Altrimenti, 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/pci-dss-v3.2.1
    git commit -m 'Adding PCI-DSS v3.2.1 policy 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 le violazioni delle norme

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

Puoi anche utilizzare kubectl per visualizzare le violazioni sul cluster utilizzando il seguente comando:

kubectl get constraint -l policycontroller.gke.io/bundleName=pci-dss-v3.2.1 -o json | jq -cC '.items[]| [.metadata.name,.status.totalViolations]'

Se sono presenti violazioni, un elenco dei messaggi di violazione per vincolo può essere visualizzato con:

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

Applica i criteri PCI-DSS v3.2.1

Dopo aver esaminato le violazioni dei criteri nel cluster, il passaggio successivo prevede l'applicazione forzata di questi criteri in modo che il controller di ammissione blocchi qualsiasi risorsa non conforme dall'applicazione al cluster.

kubectl

  1. Utilizza kubectl per impostare l'applicazione forzata dei criteri su deny:

    kubectl get constraint -l policycontroller.gke.io/bundleName=pci-dss-v3.2.1 -o json | jq '.items[].spec.enforcementAction="deny"' | kubectl apply -f -
    
  2. Verifica che l'applicazione forzata dei vincoli dei criteri sia stata aggiornata:

    kubectl get -k https://github.com/GoogleCloudPlatform/acm-policy-controller-library.git/anthos-bundles/pci-dss-v3.2.1
    

kpt

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

    kpt fn eval -i gcr.io/kpt-fn/set-enforcement-action:v0.1 -- enforcementAction=deny
    
  2. Applica i vincoli delle norme:

    kpt live apply
    

Config Sync

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

  1. Passa alla directory di sincronizzazione per Config Sync:

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

    kpt fn eval policies/pci-dss-v3.2.1 -i gcr.io/kpt-fn/set-enforcement-action:v0.1 -- enforcementAction=deny
    
  3. Esegui il push delle modifiche al repository Config Sync:

    git add SYNC_ROOT_DIR/policies/pci-dss-v3.2.1
    git commit -m 'Enforcing PCI-DSS v3.2.1 policies for GKE'
    git push
    
  4. Verifica lo stato dell'installazione:

    gcloud alpha anthos config sync repo list --project PROJECT_ID
    

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

Applicazione dei criteri di test

Esegui un rapido test per verificare l'applicazione dei criteri e il blocco delle risorse non conformi sul cluster.

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
        name: wordpress
EOF

Il controller di ammissione dovrebbe produrre un errore che elenca le violazioni delle norme violate dalla risorsa. Ad esempio:

Error from server (Forbidden): error when creating "STDIN":
admission webhook "validation.gatekeeper.sh" denied the request:
[pci-dss-v3.2.1-restrict-default-namespace]  namespace is restricted