Policy Controller include una libreria predefinita di modelli di vincolo che possono essere utilizzati con il bundle PCI-DSS v4.0 per valutare la conformità delle risorse del cluster ad alcuni aspetti dello standard PCI-DSS (Payment Card Industry Data Security Standard) v4.0.
Questa pagina contiene le istruzioni per applicare manualmente un bundle di norme. In alternativa, puoi applicare direttamente i bundle di norme.
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. Per scoprire di più sui ruoli comuni e sulle attività di esempio a cui facciamo riferimento nei contenuti di Google Cloud , consulta Ruoli e attività comuni degli utenti GKE.
Vincoli del pacchetto di norme PCI-DSS v4.0
| Nome vincolo | Descrizione del vincolo | ID controllo | 
|---|---|---|
| pci-dss-v4.0-require-apps-annotations | Richiede che tutte le app nel cluster abbiano un'annotazione network-controls/date. | 2.2.5 | 
| pci-dss-v4.0-require-av-daemonset | Richiede la presenza di un antivirus DaemonSet. | 5.2.1, 5.2.2, 5.2.3, 5.3.1, 5.3.2, 5.3.5 | 
| pci-dss-v4.0-require-binauthz | Richiede il webhook di ammissione di convalida di Autorizzazione binaria. | 2.2.1, 2.2.4, 6.2.3, 6.3.1, 6.3.2 | 
| pci-dss-v4.0-require-cloudarmor-backendconfig | Applica la configurazione di Google Cloud Armor alle risorse BackendConfig. | 6.4.1, 6.4.2 | 
| pci-dss-v4.0-require-config-management | Richiede che Config Management sia in esecuzione con la prevenzione della deriva abilitata e almeno un oggetto RootSyncsul cluster. | 1.2.8, 2.2.6, 5.3.5, 6.3.2, 6.5.1 | 
| pci-dss-v4.0-require-default-deny-network-policies | Richiede che ogni spazio dei nomi definito nel cluster abbia un NetworkPolicypredefinito per il traffico in uscita. | 1.3.2, 1.4.4 | 
| pci-dss-v4.0-require-managed-by-label | Richiede che tutte le app abbiano un'etichetta app.kubernetes.io/managed-byvalida. | 1.2.8, 2.2.6, 5.3.5, 6.3.2, 6.5.1 | 
| pci-dss-v4.0-require-namespace-network-policies | Richiede che ogni Namespacedefinito nel cluster abbia unNetworkPolicy. | 1.2.5, 1.2.6, 1.4.1, 1.4.4 | 
| pci-dss-v4.0-require-peer-authentication-strict-mtls | Garantisce che PeerAuthentications non possa sovrascrivere la modalità mTLS restrittiva. | 2.2.7, 4.2.1, 8.3.2 | 
| pci-dss-v4.0-require-valid-network-ranges | Limita gli intervalli CIDR consentiti per l'utilizzo con il traffico in entrata e in uscita. | 1.3.1, 1.3.2, 1.4.2, 1.4.4 | 
| pci-dss-v4.0-resources-have-required-labels | Richiede che tutte le app contengano un'etichetta specificata per soddisfare i requisiti del firewall. | 1.2.7 | 
| pci-dss-v4.0-restrict-cluster-admin-role | Limita l'utilizzo del ruolo cluster-admin. | 7.2.1, 7.2.2, 7.2.5, 8.2.4 | 
| pci-dss-v4.0-restrict-creation-with-default-serviceaccount | Limita la creazione di risorse utilizzando un account di servizio predefinito. Non ha alcun effetto durante l'audit. | 2.2.2 | 
| pci-dss-v4.0-restrict-default-namespace | Impedisce ai pod di utilizzare lo spazio dei nomi predefinito. | 2.2.3 | 
| pci-dss-v4.0-restrict-ingress | Limita la creazione di oggetti Ingress. | 1.3.1, 1.4.2, 1.4.4 | 
| pci-dss-v4.0-restrict-node-image | Garantisce un'ora coerente e corretta sui nodi consentendo solo Container-Optimized OS o Ubuntu come immagine del sistema operativo. | 10.6.1, 10.6.2, 10.6.3 | 
| pci-dss-v4.0-restrict-pods-exec | Limita l'utilizzo di pods/execinRoleseClusterRoles. | 8.6.1 | 
| pci-dss-v4.0-restrict-rbac-subjects | Limita l'utilizzo dei nomi nei soggetti RBAC ai valori consentiti. | 7.3.2, 8.2.1, 8.2.2, 8.2.4 | 
| pci-dss-v4.0-restrict-role-wildcards | Limita l'utilizzo di caratteri jolly in RoleseClusterRoles. | 7.3.3, 8.2.4 | 
| pci-dss-v4.0-restrict-storageclass | Limita StorageClassa un elenco diStorageClassche criptano per impostazione predefinita. | 3.3.2, 3.3.3 | 
Prima di iniziare
- Installa e inizializza
Google Cloud CLI,
che fornisce i comandi gcloudekubectlutilizzati in queste istruzioni. Se utilizzi Cloud Shell, Google Cloud CLI è preinstallato.
- Installa Policy Controller v1.16.0 o versioni successive sul cluster con la libreria predefinita di modelli di vincolo. Devi anche attivare il supporto per i vincoli referenziali, in quanto questo bundle contiene vincoli referenziali.
Configura Policy Controller per i vincoli referenziali
- Salva il seguente manifest YAML in un file come - policycontroller-config.yaml. Il manifest configura Policy Controller per monitorare tipi specifici di oggetti.- apiVersion: config.gatekeeper.sh/v1alpha1 kind: Config metadata: name: config namespace: "gatekeeper-system" spec: sync: syncOnly: - group: "networking.k8s.io" version: "v1" kind: "NetworkPolicy" - group: "admissionregistration.k8s.io" version: "v1" kind: "ValidatingWebhookConfiguration" - group: "storage.k8s.io" version: "v1" kind: "StorageClass"
- Applica il manifest - policycontroller-config.yaml:- kubectl apply -f policycontroller-config.yaml
Configura il workload del cluster per PCI-DSS v4.0
- Tutte le app (ReplicaSet,Deployment,StatefulSet,DaemonSet) devono includere un'annotazionenetwork-controls/datecon lo schema diYYYY-MM-DD.
- È necessaria una soluzione antivirus. Il valore predefinito è la presenza di un daemonsetdenominatoclamavinclamavNamespace, tuttavia il nome e lo spazio dei nomi didaemonsetpossono essere personalizzati in base all'implementazione nel vincolopci-dss-v4.0-require-av-daemonset.
- L'attivazione e la configurazione di Autorizzazione binaria sono obbligatorie in pci-dss-v4.0-require-binauthz.
- Tutti i BackendConfigdevono essere configurati per CloudArmor.
- È richiesta la presenza e l'attivazione di Config Sync.
- Ogni Namespacedefinito nel cluster ha unNetworkPolicypredefinito per il traffico in uscita. Le eccezioni consentite possono essere specificate inpci-dss-v4.0-require-namespace-network-policies.
- L'utilizzo di Config Sync per configmanagement.gke.ioè obbligatorio per impostazione predefinita, ma il valoreapp.kubernetes.io/managed-byconsentito può essere personalizzato nel vincolopci-dss-v4.0-enforce-managed-by-configmanagement-label.
- Ogni Namespacedefinito nel cluster deve avere unNetworkPolicy.
- Se utilizzi Cloud Service Mesh, ASM PeerAuthentication deve utilizzare mTLS restrittiva spec.mtls.mode: STRICT.
- Per Ingress ed Express possono essere utilizzati solo gli intervalli IP consentiti, che possono essere specificati in pci-dss-v4.0-require-valid-network-ranges.
- Tutte le app (ReplicaSet,Deployment,StatefulSeteDaemonSet) devono includere unpci-dss-firewall-audit labelcon lo schema dipci-dss-[0-9]{4}q[1-4].
- L'utilizzo di cluster-admin ClusterRolenon è consentito.
- Non è possibile creare risorse utilizzando l'account di servizio predefinito.
- Namespacepredefinito non può essere utilizzato per i pod.
- Possono essere creati solo oggetti Ingress consentiti (tipi Ingress,GatewayeServicediNodePorteLoadBalancer), che possono essere specificati inpci-dss-v4.0-restrict-ingress.
- Per garantire un orario coerente, tutti i nodi devono utilizzare Container-Optimized OS o Ubuntu per la propria immagine.
- L'utilizzo del carattere jolly o dell'autorizzazione pods/execinRoleseClusterRolesnon è consentito.
- Nelle associazioni RBAC possono essere utilizzati solo i soggetti consentiti. I nomi di dominio possono essere specificati in pci-dss-v4.0-restrict-rbac-subjects.
- L'utilizzo di encrypt by default StorageClassè obbligatorio inpci-dss-v4.0-restrict-storageclass.
Audit del bundle di criteri PCI-DSS v4.0
Policy Controller consente di applicare criteri per il cluster Kubernetes. Per testare i tuoi carichi di lavoro e la loro conformità alle norme PCI-DSS v4.0 descritte nella tabella precedente, puoi implementare questi vincoli in modalità "audit" per rivelare le violazioni e, cosa ancora più importante, 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
- (Facoltativo) Visualizza l'anteprima dei vincoli dei criteri con kubectl: - kubectl kustomize https://github.com/GoogleCloudPlatform/gke-policy-library.git/anthos-bundles/pci-dss-v4.0 
- Applica i vincoli dei criteri con kubectl: - kubectl apply -k https://github.com/GoogleCloudPlatform/gke-policy-library.git/anthos-bundles/pci-dss-v4.0 - L'output è il seguente: - asmpeerauthnstrictmtls.constraints.gatekeeper.sh/pci-dss-v4.0-require-peer-authentication-strict-mtls created k8sblockallingress.constraints.gatekeeper.sh/pci-dss-v4.0-restrict-ingress created k8sblockcreationwithdefaultserviceaccount.constraints.gatekeeper.sh/pci-dss-v4.0-restrict-creation-with-default-serviceaccount created k8senforcecloudarmorbackendconfig.constraints.gatekeeper.sh/pci-dss-v4.0-require-cloudarmor-backendconfig created k8senforceconfigmanagement.constraints.gatekeeper.sh/pci-dss-v4.0-require-config-management created k8sprohibitrolewildcardaccess.constraints.gatekeeper.sh/pci-dss-v4.0-restrict-role-wildcards created k8srequirebinauthz.constraints.gatekeeper.sh/pci-dss-v4.0-require-binauthz created k8srequirecosnodeimage.constraints.gatekeeper.sh/pci-dss-v4.0-restrict-node-image created k8srequiredaemonsets.constraints.gatekeeper.sh/pci-dss-v4.0-require-av-daemonset created k8srequiredefaultdenyegresspolicy.constraints.gatekeeper.sh/pci-dss-v4.0-require-default-deny-network-policies created k8srequirenamespacenetworkpolicies.constraints.gatekeeper.sh/pci-dss-v4.0-require-namespace-network-policies created k8srequirevalidrangesfornetworks.constraints.gatekeeper.sh/pci-dss-v4.0-require-valid-network-ranges created k8srequiredannotations.constraints.gatekeeper.sh/pci-dss-v4.0-require-apps-annotations created k8srequiredlabels.constraints.gatekeeper.sh/pci-dss-v4.0-require-managed-by-label created k8srequiredlabels.constraints.gatekeeper.sh/pci-dss-v4.0-resources-have-required-labels created k8srestrictnamespaces.constraints.gatekeeper.sh/pci-dss-v4.0-restrict-default-namespace created k8srestrictrbacsubjects.constraints.gatekeeper.sh/pci-dss-v4.0-restrict-rbac-subjects created k8srestrictrolebindings.constraints.gatekeeper.sh/pci-dss-v4.0-restrict-cluster-admin-role created k8srestrictrolerules.constraints.gatekeeper.sh/pci-dss-v4.0-restrict-pods-exec created k8sstorageclass.constraints.gatekeeper.sh/pci-dss-v4.0-restrict-storageclass created 
- Verifica che i vincoli dei criteri siano stati installati e controlla se esistono violazioni nel cluster: - kubectl get constraints -l policycontroller.gke.io/bundleName=pci-dss-v4.0 - L'output è simile al seguente: - NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS asmpeerauthnstrictmtls.constraints.gatekeeper.sh/pci-dss-v4.0-require-peer-authentication-strict-mtls dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8sblockallingress.constraints.gatekeeper.sh/pci-dss-v4.0-restrict-ingress dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8sblockcreationwithdefaultserviceaccount.constraints.gatekeeper.sh/pci-dss-v4.0-restrict-creation-with-default-serviceaccount dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8senforcecloudarmorbackendconfig.constraints.gatekeeper.sh/pci-dss-v4.0-require-cloudarmor-backendconfig dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8senforceconfigmanagement.constraints.gatekeeper.sh/pci-dss-v4.0-require-config-management dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8sprohibitrolewildcardaccess.constraints.gatekeeper.sh/pci-dss-v4.0-restrict-role-wildcards dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8srequirebinauthz.constraints.gatekeeper.sh/pci-dss-v4.0-require-binauthz dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8srequirecosnodeimage.constraints.gatekeeper.sh/pci-dss-v4.0-restrict-node-image dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8srequiredaemonsets.constraints.gatekeeper.sh/pci-dss-v4.0-require-av-daemonset dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8srequiredannotations.constraints.gatekeeper.sh/pci-dss-v4.0-require-apps-annotations dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8srequiredefaultdenyegresspolicy.constraints.gatekeeper.sh/pci-dss-v4.0-require-default-deny-network-policies dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8srequiredlabels.constraints.gatekeeper.sh/pci-dss-v4.0-require-managed-by-label dryrun 0 k8srequiredlabels.constraints.gatekeeper.sh/pci-dss-v4.0-resources-have-required-labels dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8srequirenamespacenetworkpolicies.constraints.gatekeeper.sh/pci-dss-v4.0-require-namespace-network-policies dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8srequirevalidrangesfornetworks.constraints.gatekeeper.sh/pci-dss-v4.0-require-valid-network-ranges dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8srestrictnamespaces.constraints.gatekeeper.sh/pci-dss-v4.0-restrict-default-namespace dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8srestrictrbacsubjects.constraints.gatekeeper.sh/pci-dss-v4.0-restrict-rbac-subjects dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8srestrictrolebindings.constraints.gatekeeper.sh/pci-dss-v4.0-restrict-cluster-admin-role dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8srestrictrolerules.constraints.gatekeeper.sh/pci-dss-v4.0-restrict-pods-exec dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8sstorageclass.constraints.gatekeeper.sh/pci-dss-v4.0-restrict-storageclass dryrun 0 
kpt
- Installa e configura kpt. kpt viene utilizzato in queste istruzioni per personalizzare ed eseguire il deployment delle risorse Kubernetes. 
- Scarica il bundle di policy PCI-DSS v4.0 da GitHub utilizzando kpt: - kpt pkg get https://github.com/GoogleCloudPlatform/gke-policy-library.git/anthos-bundles/pci-dss-v4.0 
- Esegui la funzione kpt - set-enforcement-actionper impostare l'azione di applicazione delle policy su- dryrun:- kpt fn eval pci-dss-v4.0 -i gcr.io/kpt-fn/set-enforcement-action:v0.1 \ -- enforcementAction=dryrun 
- Inizializza la directory di lavoro con kpt, che crea una risorsa per monitorare le modifiche: - cd pci-dss-v4.0 kpt live init 
- Applica i vincoli dei criteri con kpt: - kpt live apply 
- 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 - CURRENTconferma l'installazione riuscita dei vincoli.
Config Sync
- 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:
- Passa alla directory di sincronizzazione per Config Sync: - cd SYNC_ROOT_DIR - Per creare o aggiungere - .gitignorecon- resourcegroup.yaml:- echo resourcegroup.yaml >> .gitignore 
- Crea una directory - policiesdedicata:- mkdir -p policies 
- Scarica il bundle di policy PCI-DSS v4.0 da GitHub utilizzando kpt: - kpt pkg get https://github.com/GoogleCloudPlatform/gke-policy-library.git/anthos-bundles/pci-dss-v4.0 policies/pci-dss-v4.0 
- Esegui la funzione kpt - set-enforcement-actionper impostare l'azione di applicazione delle policy su- dryrun:- kpt fn eval policies/pci-dss-v4.0 -i gcr.io/kpt-fn/set-enforcement-action:v0.1 -- enforcementAction=dryrun 
- (Facoltativo) Visualizza l'anteprima dei vincoli delle norme da creare: - kpt live init policies/pci-dss-v4.0 kpt live apply --dry-run policies/pci-dss-v4.0 
- Se la directory di sincronizzazione per Config Sync utilizza Kustomize, aggiungi - policies/pci-dss-v4.0alla radice- kustomization.yaml. In caso contrario, rimuovi il file- policies/pci-dss-v4.0/kustomization.yaml:- rm SYNC_ROOT_DIR/policies/pci-dss-v4.0/kustomization.yaml 
- Esegui il push delle modifiche nel repository Config Sync: - git add SYNC_ROOT_DIR/policies/pci-dss-v4.0 git commit -m 'Adding PCI-DSS v4.0 policy audit enforcement' git push 
- Verifica lo stato dell'installazione: - watch gcloud beta container fleet config-management status --project PROJECT_ID - Lo stato - SYNCEDconferma l'installazione dei criteri.
Visualizzare le violazioni delle norme
Una volta installati i vincoli dei criteri in modalità audit, le violazioni nel cluster possono essere visualizzate nell'interfaccia utente utilizzando la dashboard di Policy Controller.
Puoi anche utilizzare kubectl per visualizzare le violazioni nel cluster utilizzando il seguente comando:
kubectl get constraint -l policycontroller.gke.io/bundleName=pci-dss-v4.0 -o json | jq -cC '.items[]| [.metadata.name,.status.totalViolations]'
Se sono presenti violazioni, è possibile visualizzare un elenco dei messaggi di violazione per vincolo con:
kubectl get constraint -l policycontroller.gke.io/bundleName=pci-dss-v4.0 -o json | jq -C '.items[]| select(.status.totalViolations>0)| [.metadata.name,.status.violations[]?]'
Modificare l'azione di applicazione del pacchetto di norme PCI-DSS v4.0
Dopo aver esaminato le violazioni delle norme nel cluster, puoi valutare la possibilità di modificare la modalità di applicazione in modo che il controller di ammissione warn o addirittura deny blocchi l'applicazione al cluster della risorsa non conforme.
kubectl
- Utilizza kubectl per impostare l'azione di applicazione delle norme su - warn:- kubectl get constraint -l policycontroller.gke.io/bundleName=pci-dss-v4.0 -o name | xargs -I {} kubectl patch {} --type='json' -p='[{"op":"replace","path":"/spec/enforcementAction","value":"warn"}]'
- Verifica che l'azione di applicazione dei vincoli dei criteri sia stata aggiornata: - kubectl get constraint -l policycontroller.gke.io/bundleName=pci-dss-v4.0 
kpt
- Esegui la funzione kpt - set-enforcement-actionper impostare l'azione di applicazione delle policy su- warn:- kpt fn eval -i gcr.io/kpt-fn/set-enforcement-action:v0.1 -- enforcementAction=warn 
- 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:
- Passa alla directory di sincronizzazione per Config Sync: - cd SYNC_ROOT_DIR 
- Esegui la funzione kpt - set-enforcement-actionper impostare l'azione di applicazione delle policy su- warn:- kpt fn eval policies/pci-dss-v4.0 -i gcr.io/kpt-fn/set-enforcement-action:v0.1 -- enforcementAction=warn 
- Esegui il push delle modifiche nel repository Config Sync: - git add SYNC_ROOT_DIR/policies/pci-dss-v4.0 git commit -m 'Adding PCI-DSS v4.0 policy bundle warn enforcement' git push 
- Verifica lo stato dell'installazione: - nomos status - Il cluster dovrebbe mostrare lo stato - SYNCEDcon i criteri installati.
Testare l'applicazione delle norme
Crea una risorsa non conforme sul 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 deve generare un avviso che elenca le violazioni delle norme che questa risorsa viola, come mostrato nell'esempio seguente:
Warning: [pci-dss-v4.0-restrict-default-namespace] <default> namespace is restricted pod/wp-non-compliant created
Rimuovi il bundle di policy PCI-DSS v4.0
Se necessario, il bundle di norme PCI-DSS v4.0 può essere rimosso dal cluster.
kubectl
- Utilizza kubectl per rimuovere i criteri: - kubectl delete constraint -l policycontroller.gke.io/bundleName=pci-dss-v4.0 
kpt
- Rimuovi le policy: - 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:
- Esegui il push delle modifiche nel repository Config Sync: - git rm -r SYNC_ROOT_DIR/policies/pci-dss-v4.0 git commit -m 'Removing PCI-DSS v4.0 policies' git push 
- Verifica lo stato: - nomos status - Il cluster dovrebbe mostrare lo stato - SYNCEDcon le risorse rimosse.