PCI-DSS v3.2.1-Richtlinieneinschränkungen verwenden
Policy Controller enthält eine Standardbibliothek mit Einschränkungsvorlagen, die mit dem PCI-DSS v3.2.1-Bundle verwendet werden können, um die Compliance Ihrer Clusterressourcen mit einigen Aspekten des Payment Card Industry Data Security Standard (PCI-DSS) v3.2.1 zu bewerten.
Einschränkungen für PCI-DSS v3.2.1-Richtlinien-Bundles
Name der Einschränkung | Beschreibung der Einschränkung | Einstellungs-ID | Profil |
---|---|---|---|
pci-dss-v3.2.1-resources-have-required-labels | Prüft die Anforderungen an eine Firewall, da damit alle Apps ein bestimmtes Label enthalten müssen. | 1.1.4 | Standard |
pci-dss-v3.2.1-apps-must-have-certain-set-of-annotations | Mit dieser Richtlinie werden die Anforderungen an Netzwerksteuerungen sichergestellt, da alle Apps eine bestimmte Annotation enthalten müssen. | 1.1.5, 2.4 | Standard |
pci-dss-v3.2.1-require-default-deny-network-policies | Erfordert, dass jeder im Cluster definierte Namespace eine standardmäßige Ablehnungs-NetworkPolicy für ausgehenden Traffic hat. |
1.2, 1.3, 2.2.2 | Erweitert |
pci-dss-v3.2.1-block-all-ingress | Beschränkt das Erstellen von Ingress-Objekten. | 1,2; 1,3 | Erweitert |
pci-dss-v3.2.1-require-valid-network-ranges | Beschränkt die CIDR-Bereiche, die für eingehenden und ausgehenden Traffic verwendet werden dürfen. | 1.2, 1.3.2 | Erweitert |
pci-dss-v3.2.1-require-namespace-network-policies | Erfordert, dass jeder im Cluster definierte Namespace eine NetworkPolicy hat. | 1.2 | Standard |
pci-dss-v3.2.1-enforce-managed-by-configmanagement-label | Erfordert ein gültiges app.kubernetes.io/managed-by= -Label für RoleBinding Ressourcen. |
1.2.2, 8.1.2 | Standard |
pci-dss-v3.2.1-block-creation-with-default-serviceaccount | Schränkt das Erstellen von Ressourcen mit einem Standarddienstkonto ein. | 2.1 | Standard |
pci-dss-v3.2.1-restrict-default-namespace | Schränkt die Verwendung des Standard-Namespace für Pods ein. | 2.1 | Standard |
pci-dss-v3.2.1-asm-peer-authn-strict-mtls | Bei „Alle PeerAuthentications erzwingen“ kann der strikte mMTLS-Modus nicht überschrieben werden. | 4.1 | Standard |
pci-dss-v3.2.1-require-av-daemonset | Erfordert ein Antiviren-Daemonset. | 5.1.1, 5.3 | Standard |
pci-dss-v3.2.1-enforce-config-management | Erzwingen Sie die Präsenz und Aktivierung von Config Sync. | 5,3, 6,1, 6,4 | Standard |
pci-dss-v3.2.1-enforce-cloudarmor-backendconfig | Erzwingen Sie die Cloud Armor-Konfiguration für BackendConfig Ressourcen. |
6,5, 6,6 | Standard |
pci-dss-v3.2.1-restrict-rbac-subjects | Beschränkt die Verwendung von Namen in RBAC-Subjekten auf zulässige Werte. | 8.1, 8.1.5 | Erweitert |
pci-dss-v3.2.1-block-secrets-of-type-basic-auth | Beschränkt die Verwendung von Secrets vom Typ „basic-auth“. | 8.1.5, 8.2.3, 8.5 | Standard |
pci-dss-v3.2.1-nodes-have-consistent-time | Sorgt für eine konsistente und korrekte Zeit auf Knoten, indem die Verwendung von COS als Betriebssystem-Image sichergestellt wird. | 10.4.1, 10.4.3 | Standard |
Einschränkungen für Standard-Bundles im Vergleich zu erweiterten Sets
Das PCI-DSS v3.2.1-Bundle implementiert bestimmte Richtlinienanforderungen, um einige Aspekte der PCI-DSS v3.2.1-Einstellungen umzusetzen. Neben der Anpassung Ihrer Arbeitslast an die Anforderungen des Standard-Bundles ist auch eine optionale Reihe erweiterter Einschränkungen verfügbar, die eine Anpassung an Ihre Umgebung erfordern.
Hinweise
- Installieren und initialisieren Sie die Google Cloud CLI, die die in dieser Anleitung verwendeten Befehle
gcloud
undkubectl
enthält. Wenn Sie Cloud Shell verwenden, ist Google Cloud CLI vorinstalliert. - Installieren Sie Policy Controller Version 1.14.3 oder höher mit der Standardbibliothek der Einschränkungsvorlagen in Ihrem Cluster. Außerdem müssen Sie die Unterstützung für referenzielle Einschränkungen aktivieren, da dieses Bundle referenzielle Einschränkungen enthält.
Policy Controller für referenzielle Einschränkungen konfigurieren
Speichern Sie das folgende YAML-Manifest in einer Datei als
policycontroller-config.yaml
. Das Manifest konfiguriert Policy Controller so, dass bestimmte Arten von Objekten beobachtet werden.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"
Wenden Sie das
policycontroller-config.yaml
-Manifest an:kubectl apply -f policycontroller-config.yaml
Arbeitslast des Clusters für PCI-DSS v3.2.1 konfigurieren
Standardpaket
- Alle Apps (
ReplicaSet
,Deployment
,StatefulSet
undDaemonSet
) müssen einepci-dss-firewall-audit label
mit dem Schemapci-dss-[0-9]{4}q[1-4]
enthalten. - Alle Apps (
ReplicaSet
,Deployment
,StatefulSet
,DaemonSet
) müssen einenetwork-controls/date
-Anmerkung mit dem SchemaYYYY-MM-DD
enthalten. - Jede im Cluster definierte
namespace
muss eineNetworkPolicy
haben. - Die Verwendung von Config Sync für
configmanagement.gke.io
ist standardmäßig erforderlich. Die zulässigenapp.kubernetes.io/managed-by
-Werte können jedoch in derpci-dss-v3.2.1-enforce-managed-by-configmanagement-label
-Einschränkung angepasst werden. - Ressourcen können nicht mit dem Standarddienstkonto erstellt werden.
- Der Standard-
namespace
kann nicht für Pods verwendet werden. - Bei Verwendung von Anthos Service Mesh muss ASM PeerAuthentication strikte mTLS-
spec.mtls.mode: STRICT
verwenden. - Eine Antivirenlösung ist erforderlich. Die Standardeinstellung ist das Vorhandensein eines
daemonset
namensclamav
inpci-dss-av
namespace
. Der Name und der Namespace vondaemonset
können jedoch an Ihre Implementierung in derpci-dss-v3.2.1-require-av-daemonset
-Einschränkung angepasst werden. - Config Sync muss vorhanden und aktiviert sein.
- Alle
BackendConfig
müssen für CloudArmor konfiguriert sein. - Die Verwendung von Secrets des Typs
basic-auth
ist nicht zulässig. - Für eine einheitliche Zeit müssen alle Knoten für ihr Image Container-Optimized OS von Google verwenden.
Erweitertes Set (optional, Anpassung erforderlich)
- Für jede
namespace
, die im Cluster definiert ist, gibt es eine standardmäßige Ablehnungs-NetworkPolicy
für ausgehenden Traffic. Zulässige Ausnahmen können inpci-dss-v3.2.1-require-namespace-network-policies
spezifisch sein. - Es können nur zulässige Ingress-Objekte (
Ingress
,Gateway
undService
-Typen vonNodePort
undLoadBalancer
) erstellt werden. Diese können inpci-dss-v3.2.1-block-all-ingress
angegeben werden. - Für Ingress und Express können nur zulässige IP-Bereiche verwendet werden, die in
pci-dss-v3.2.1-require-valid-network-ranges
angegeben werden können. - In RBAC-Bindungen können nur zulässige Subjekte verwendet werden. Ihre Domainnamen können in
pci-dss-v3.2.1-restrict-rbac-subjects
angegeben werden.
PCI-DSS v3.2.1-Richtlinien-Bundle prüfen
Mit Policy Controller können Sie Richtlinien für Ihren Kubernetes-Cluster erzwingen. Damit Sie Ihre Arbeitslasten und deren Einhaltung in Bezug auf die PCI-DSS v3.2.1-Richtlinien, die in der vorherigen Tabelle erläutert werden, einfacher testen können, können Sie diese Einschränkungen im Prüfmodus bereitstellen, um Verstöße aufzudecken und, was noch wichtiger ist, Ihnen die Möglichkeit zu geben, sie zu beheben, bevor Sie sie für Ihren Kubernetes-Cluster erzwingen.
Sie können diese Richtlinien anwenden, wenn spec.enforcementAction
mit kubectl, kpt oder Config Sync auf dryrun
festgelegt ist.
kubectl
(Optional) Sehen Sie sich eine Vorschau der Richtlinieneinschränkungen mit kubectl an:
kubectl kustomize https://github.com/GoogleCloudPlatform/gke-policy-library.git/anthos-bundles/pci-dss-v3.2.1
Wenden Sie die Richtlinieneinschränkungen mit kubectl an:
kubectl apply -k https://github.com/GoogleCloudPlatform/gke-policy-library.git/anthos-bundles/pci-dss-v3.2.1
Die Ausgabe sieht so aus:
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
Prüfen Sie, ob Richtlinieneinschränkungen installiert wurden, und prüfen Sie, ob im Cluster Verstöße vorliegen:
kubectl get -k https://github.com/GoogleCloudPlatform/gke-policy-library.git/anthos-bundles/pci-dss-v3.2.1
Die Ausgabe sieht in etwa so aus:
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
Installieren und richten Sie kpt ein. kpt wird in dieser Anleitung verwendet, um Kubernetes-Ressourcen anzupassen und bereitzustellen.
Laden Sie das PCI-DSS v3.2.1-Richtlinien-Bundle mithilfe von kpt von GitHub herunter:
kpt pkg get https://github.com/GoogleCloudPlatform/gke-policy-library.git/anthos-bundles/pci-dss-v3.2.1
Führen Sie die kpt-Funktion
set-enforcement-action
aus, um die Erzwingungsaktion der Richtlinien aufdryrun
festzulegen:kpt fn eval pci-dss-v3.2.1 -i gcr.io/kpt-fn/set-enforcement-action:v0.1 \ -- enforcementAction=dryrun
Initialisieren Sie das Arbeitsverzeichnis mit kpt, wodurch eine Ressource erstellt wird, um Änderungen verfolgen zu können:
cd pci-dss-v3.2.1 kpt live init
Wenden Sie die Richtlinieneinschränkungen mit kpt an:
kpt live apply
Prüfen Sie, ob Richtlinieneinschränkungen installiert wurden, und prüfen Sie, ob im Cluster Verstöße vorliegen:
kpt live status --output table --poll-until current
Der Status
CURRENT
bestätigt die erfolgreiche Installation der Einschränkungen.
Config Sync
- Installieren und richten Sie kpt ein. kpt wird in dieser Anleitung verwendet, um Kubernetes-Ressourcen anzupassen und bereitzustellen.
Operatoren, die Config Sync zum Bereitstellen von Richtlinien für ihre Cluster verwenden, können die folgende Anleitung verwenden:
Wechseln Sie in das Synchronisierungsverzeichnis für Config Sync:
cd SYNC_ROOT_DIR
So erstellen oder hängen Sie
.gitignore
mitresourcegroup.yaml
an:echo resourcegroup.yaml >> .gitignore
Erstellen Sie ein dediziertes
policies
-Verzeichnis:mkdir -p policies
Laden Sie das PCI-DSS v3.2.1-Richtlinien-Bundle mithilfe von kpt von GitHub herunter:
kpt pkg get https://github.com/GoogleCloudPlatform/gke-policy-library.git/anthos-bundles/pci-dss-v3.2.1 policies/pci-dss-v3.2.1
Führen Sie die kpt-Funktion
set-enforcement-action
aus, um die Erzwingungsaktion der Richtlinien aufdryrun
festzulegen:kpt fn eval policies/pci-dss-v3.2.1 -i gcr.io/kpt-fn/set-enforcement-action:v0.1 -- enforcementAction=dryrun
(Optional) Sehen Sie sich eine Vorschau der zu erstellenden Richtlinieneinschränkungen an:
kpt live init policies/pci-dss-v3.2.1 kpt live apply --dry-run policies/pci-dss-v3.2.1
Wenn Ihr Synchronisierungsverzeichnis für Config Sync Kustomize verwendet, fügen Sie
policies/pci-dss-v3.2.1
dem Stammverzeichniskustomization.yaml
hinzu. Andernfalls entfernen Sie die Dateipolicies/pci-dss-v3.2.1/kustomization.yaml
:rm SYNC_ROOT_DIR/policies/pci-dss-v3.2.1/kustomization.yaml
Übertragen Sie Änderungen per Push in das Config Sync-Repository:
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
Prüfen Sie den Status der Installation:
watch gcloud beta container fleet config-management status --project PROJECT_ID
Der Status
SYNCED
bestätigt die Installation der Richtlinien.
Richtlinienverstöße ansehen
Nachdem die Richtlinieneinschränkungen im Prüfmodus installiert wurden, können Verstöße im Cluster über das Policy Controller-Dashboard in der Benutzeroberfläche angezeigt werden.
Sie können auch kubectl
verwenden, um mit dem folgenden Befehl Verstöße im Cluster anzusehen:
kubectl get constraint -l policycontroller.gke.io/bundleName=pci-dss-v3.2.1 -o json | jq -cC '.items[]| [.metadata.name,.status.totalViolations]'
Wenn Verstöße vorliegen, kann eine Liste der Verstoßmeldungen pro Einschränkung wie folgt angezeigt werden:
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[]?]'
Erzwingungsaktion für PCI-DSS v3.2.1-Richtlinien-Bundle ändern
Nachdem Sie die Richtlinienverstöße in Ihrem Cluster geprüft haben, können Sie den Erzwingungsmodus so ändern, dass der Admission-Controller entweder warn
auf den Cluster ausführt oder sogar deny
die Anwendung nicht konformer Ressourcen auf den Cluster blockiert.
kubectl
Legen Sie mit kubectl die Erzwingungsaktion der Richtlinien auf
warn
fest:kubectl get constraint -l policycontroller.gke.io/bundleName=pci-dss-v3.2.1 -o name | xargs -I {} kubectl patch {} --type='json' -p='[{"op":"replace","path":"/spec/enforcementAction","value":"warn"}]'
Prüfen Sie, ob die Maßnahme zur Durchsetzung von Richtlinieneinschränkungen aktualisiert wurde:
kubectl get constraint -l policycontroller.gke.io/bundleName=pci-dss-v3.2.1
KPT
Führen Sie die kpt-Funktion
set-enforcement-action
aus, um die Erzwingungsaktion der Richtlinien aufwarn
festzulegen:kpt fn eval -i gcr.io/kpt-fn/set-enforcement-action:v0.1 -- enforcementAction=warn
Wenden Sie die Richtlinieneinschränkungen an:
kpt live apply
Config Sync
Operatoren, die Config Sync zum Bereitstellen von Richtlinien für ihre Cluster verwenden, können die folgende Anleitung verwenden:
Wechseln Sie in das Synchronisierungsverzeichnis für Config Sync:
cd SYNC_ROOT_DIR
Führen Sie die kpt-Funktion
set-enforcement-action
aus, um die Erzwingungsaktion der Richtlinien aufwarn
festzulegen:kpt fn eval policies/pci-dss-v3.2.1 -i gcr.io/kpt-fn/set-enforcement-action:v0.1 -- enforcementAction=warn
Übertragen Sie Änderungen per Push in das Config Sync-Repository:
git add SYNC_ROOT_DIR/policies/pci-dss-v3.2.1 git commit -m 'Adding PCI-DSS v3.2.1 policy bundle warn enforcement' git push
Prüfen Sie den Status der Installation:
gcloud alpha anthos config sync repo list --project PROJECT_ID
Ihr Repository, das in der Spalte
SYNCED
angezeigt wird, bestätigt die Installation der Richtlinien.
Richtlinienerzwingung testen
Erstellen Sie mit dem folgenden Befehl eine nicht konforme Ressource im Cluster:
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
Der Admission-Controller sollte eine Warnung ausgeben, in der die Richtlinienverstöße aufgelistet sind, gegen die diese Ressource verstößt, wie im folgenden Beispiel gezeigt:
Warning: [pci-dss-v3.2.1-restrict-default-namespace] <default> namespace is restricted pod/wp-non-compliant created
PCI-DSS v3.2.1-Richtlinien-Bundle entfernen
Bei Bedarf kann das PCI-DSS v3.2.1-Richtlinien-Bundle aus dem Cluster entfernt werden.
kubectl
Verwenden Sie kubectl, um die Richtlinien zu entfernen:
kubectl delete constraint -l policycontroller.gke.io/bundleName=pci-dss-v3.2.1
KPT
Entfernen Sie die Richtlinien:
kpt live destroy
Config Sync
Operatoren, die Config Sync zum Bereitstellen von Richtlinien für ihre Cluster verwenden, können die folgende Anleitung verwenden:
Übertragen Sie Änderungen per Push in das Config Sync-Repository:
git rm -r SYNC_ROOT_DIR/policies/pci-dss-v3.2.1 git commit -m 'Removing PCI-DSS v3.2.1 policies' git push
Prüfen Sie den Status:
gcloud alpha anthos config sync repo list --project PROJECT_ID
Das Repository, das in der Spalte
SYNCED
angezeigt wird, bestätigt das Entfernen der Richtlinien.