Policy Controller est fourni avec une bibliothèque par défaut de modèles de contrainte qui peuvent être utilisés avec le bundle PCI-DSS v3.2.1 pour évaluer la conformité des ressources de votre cluster par rapport à certains aspects de la norme PCI-DSS (Payment Card Industry Data Security Standard) v3.2.1.
Cette page s'adresse aux administrateurs et opérateurs informatiques qui souhaitent s'assurer que toutes les ressources exécutées sur la plate-forme cloud répondent aux exigences de conformité organisationnelle en fournissant et en maintenant l'automatisation des audits ou des applications. Pour en savoir plus sur les rôles courants et les exemples de tâches que nous citons dans le contenu Google Cloud , consultez Rôles utilisateur et tâches courantes de GKE.
Contraintes liées au bundle de règles PCI-DSS v3.2.1
| Nom de la contrainte | Description de la contrainte | ID de commande | Profil | 
|---|---|---|---|
| pci-dss-v3.2.1-resources-have-required-labels | Garantit les exigences d'un pare-feu en exigeant que toutes les applications contiennent un libellé spécifié. | 1.1.4 | Standard | 
| pci-dss-v3.2.1-apps-must-have-certain-set-of-annotations | Garantit le respect des exigences relatives aux contrôles réseau en exigeant que toutes les applications contiennent une annotation spécifiée. | 1.1.5, 2.4 | Standard | 
| pci-dss-v3.2.1-require-default-deny-network-policies | Nécessite que chaque espace de noms défini dans le cluster ait un NetworkPolicyde refus par défaut pour la sortie. | 1.2, 1.3, 2.2.2 | Étendu | 
| pci-dss-v3.2.1-block-all-ingress | Limite la création d'objets Ingress. | 1.2, 1.3 | Étendu | 
| pci-dss-v3.2.1-require-valid-network-ranges | Limite les plages CIDR pouvant être utilisées avec l'entrée et la sortie. | 1.2, 1.3.2 | Étendu | 
| pci-dss-v3.2.1-require-namespace-network-policies | Nécessite que chaque espace de noms défini dans le cluster ait un objet NetworkPolicy. | 1.2 | Standard | 
| pci-dss-v3.2.1-enforce-managed-by-configmanagement-label | Nécessite un libellé app.kubernetes.io/managed-by=valide sur les ressourcesRoleBinding. | 1.2.2, 8.1.2 | Standard | 
| pci-dss-v3.2.1-block-creation-with-default-serviceaccount | Limite la création de ressources à l'aide d'un compte de service par défaut. | 2.1 | Standard | 
| pci-dss-v3.2.1-restrict-default-namespace | Empêche les pods d'utiliser l'espace de noms par défaut. | 2.1 | Standard | 
| pci-dss-v3.2.1-asm-peer-authn-strict-mtls | Appliquer l'ensemble des PeerAuthentications ne peut pas écraser le mode mTLS strict | 4.1 | Standard | 
| pci-dss-v3.2.1-require-av-daemonset | Nécessite la présence d'un daemonset antivirus. | 5.1.1, 5.3 | Standard | 
| pci-dss-v3.2.1-enforce-config-management | Appliquez la présence et l'activation de Config Sync. | 5.3, 6.1, 6.4 | Standard | 
| pci-dss-v3.2.1-enforce-cloudarmor-backendconfig | Applique la configuration de Cloud Armor aux ressources BackendConfig. | 6.5, 6.6 | Standard | 
| pci-dss-v3.2.1-restrict-rbac-subjects | Limite l'utilisation des noms dans les sujets RBAC aux valeurs autorisées. | 8.1, 8.1.5 | Étendu | 
| pci-dss-v3.2.1-block-secrets-of-type-basic-auth | Limite l'utilisation des secrets de type "basic-auth". | 8.1.5, 8.2.3, 8.5 | Standard | 
| pci-dss-v3.2.1-nodes-have-consistent-time | Garantit la cohérence et l'exactitude des heures sur les nœuds en s'assurant que COS est utilisé comme image d'OS. | 10.4.1, 10.4.3 | Standard | 
Contraintes de bundles standards et étendus
Le bundle PCI-DSS v3.2.1 implémente un ensemble de règles strictes pour atteindre certains aspects des contrôles PCI-DSS v3.2.1. En plus de la modification de votre charge de travail pour répondre aux exigences du bundle Standard, un ensemble facultatif de contraintes étendues est également disponible. Il nécessite une personnalisation pour votre environnement.
Avant de commencer
- Installez et initialisez Google Cloud CLI, qui fournit les commandes gcloudetkubectlutilisées dans ces instructions. Si vous utilisez Cloud Shell, Google Cloud CLI est préinstallé.
- Installez Policy Controller v1.14.3 ou version ultérieure sur votre cluster avec la bibliothèque par défaut de modèles de contraintes. Vous devez également activer la compatibilité avec les contraintes référentielles, car ce bundle contient des contraintes référentielles.
Configurer Policy Controller pour les contraintes référentielles
- Enregistrez le fichier manifeste YAML suivant dans un fichier sous le nom - policycontroller-config.yaml. Le fichier manifeste configure Policy Controller pour surveiller des types d'objets spécifiques.- 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"
- Appliquez le fichier manifeste - policycontroller-config.yaml:- kubectl apply -f policycontroller-config.yaml
Configurer la charge de travail de votre cluster pour la norme PCI-DSS v3.2.1
Bundle standard
- Toutes les applications (ReplicaSet,Deployment,StatefulSetetDaemonSet) doivent inclure unpci-dss-firewall-audit labelavec le schémapci-dss-[0-9]{4}q[1-4].
- Toutes les applications (ReplicaSet,Deployment,StatefulSetetDaemonSet) doivent inclure une annotationnetwork-controls/dateavec le schémaYYYY-MM-DD.
- Chaque namespacedéfini dans le cluster doit avoir unNetworkPolicy.
- L'utilisation de Config Sync pour configmanagement.gke.ioest requise par défaut. Toutefois, les valeursapp.kubernetes.io/managed-byautorisées peuvent être personnalisées dans la contraintepci-dss-v3.2.1-enforce-managed-by-configmanagement-label.
- Impossible de créer des ressources à l'aide du compte de service par défaut.
- La valeur namespacepar défaut ne peut pas être utilisée pour les pods.
- Si vous utilisez Cloud Service Mesh, PeerAuthentication ASM doit utiliser le protocole mTLS strict spec.mtls.mode: STRICT.
- Vous devez ajouter une solution antivirus. Par défaut, un daemonsetnomméclamavest présent dans lepci-dss-avnamespace; cependant, le nom et l'espace de noms dedaemonsetpeuvent être personnalisés en fonction de votre implémentation dans la contraintepci-dss-v3.2.1-require-av-daemonset.
- La présence et l'activation de Config Sync sont obligatoires.
- Tous les BackendConfigdoivent être configurés pour CloudArmor.
- L'utilisation de secrets de type basic-authn'est pas autorisée.
- Tous les nœuds doivent utiliser Google Container-Optimized OS pour leur image afin de garantir une heure cohérente.
Bundle étendu (facultatif, personnalisation requise)
- Chaque namespacedéfini dans le cluster possède unNetworkPolicyde refus par défaut pour la sortie. Les exceptions autorisées peuvent être spécifiées danspci-dss-v3.2.1-require-namespace-network-policies.
- Seuls les objets Ingress autorisés (types Ingress,GatewayetServicedeNodePortetLoadBalancer) peuvent être créés. Ils peuvent être spécifiés danspci-dss-v3.2.1-block-all-ingress.
- Seules les plages d'adresses IP autorisées peuvent être utilisées pour les objets Ingress et Express. Elles peuvent être spécifiées dans pci-dss-v3.2.1-require-valid-network-ranges.
- Seuls les sujets autorisés peuvent être utilisés dans les liaisons RBAC. Vos noms de domaine peuvent être spécifiés dans pci-dss-v3.2.1-restrict-rbac-subjects.
Auditer le bundle de règles PCI-DSS v3.2.1
Policy Controller vous permet d'appliquer des règles à votre cluster Kubernetes. Pour tester vos charges de travail et leur conformité avec les règles PCI-DSS v3.2.1 décrites dans le tableau précédent, vous pouvez déployer ces contraintes en mode "audit" pour révéler les cas de non-respect et, plus important, vous donner la possibilité de les corriger avant de les appliquer à votre cluster Kubernetes.
Vous pouvez appliquer ces règles en définissant le paramètre spec.enforcementAction sur dryrun à l'aide de kubectl, de kpt ou de Config Sync.
kubectl
- (Facultatif) Prévisualisez les contraintes de règle avec kubectl : - kubectl kustomize https://github.com/GoogleCloudPlatform/gke-policy-library.git/anthos-bundles/pci-dss-v3.2.1 
- Appliquez les contraintes de règle avec kubectl : - kubectl apply -k https://github.com/GoogleCloudPlatform/gke-policy-library.git/anthos-bundles/pci-dss-v3.2.1 - Le résultat est le suivant : - 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 
- Vérifiez que les contraintes de règles ont été installées et si des cas de non-respect existent dans le cluster : - kubectl get -k https://github.com/GoogleCloudPlatform/gke-policy-library.git/anthos-bundles/pci-dss-v3.2.1 - Le résultat ressemble à ce qui suit : - 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
- Installez et configurez kpt. kpt est utilisé dans ces instructions pour personnaliser et déployer les ressources Kubernetes. 
- Téléchargez le bundle de règles PCI-DSS v3.2.1 depuis GitHub à l'aide de kpt : - kpt pkg get https://github.com/GoogleCloudPlatform/gke-policy-library.git/anthos-bundles/pci-dss-v3.2.1 
- Exécutez la fonction kpt - set-enforcement-actionpour définir l'action d'application des règles sur- dryrun:- kpt fn eval pci-dss-v3.2.1 -i gcr.io/kpt-fn/set-enforcement-action:v0.1 \ -- enforcementAction=dryrun 
- Initialisez le répertoire de travail avec kpt, qui crée une ressource pour suivre les modifications : - cd pci-dss-v3.2.1 kpt live init 
- Appliquez les contraintes de règles avec kpt : - kpt live apply 
- Vérifiez que les contraintes de règles ont été installées et si des cas de non-respect existent dans le cluster : - kpt live status --output table --poll-until current - L'état - CURRENTconfirme l'installation correcte des contraintes.
Config Sync
- Installez et configurez kpt. kpt est utilisé dans ces instructions pour personnaliser et déployer les ressources Kubernetes.
Les opérateurs qui utilisent Config Sync pour déployer des règles sur leurs clusters peuvent suivre ces instructions :
- Accédez au répertoire de synchronisation pour Config Sync : - cd SYNC_ROOT_DIR - Pour créer ou ajouter - .gitignoreavec- resourcegroup.yaml, procédez comme suit :- echo resourcegroup.yaml >> .gitignore 
- Créez un répertoire - policiesdédié :- mkdir -p policies 
- Téléchargez le bundle de règles PCI-DSS v3.2.1 depuis GitHub à l'aide de kpt : - kpt pkg get https://github.com/GoogleCloudPlatform/gke-policy-library.git/anthos-bundles/pci-dss-v3.2.1 policies/pci-dss-v3.2.1 
- Exécutez la fonction kpt - set-enforcement-actionpour définir l'action d'application des règles sur- dryrun:- kpt fn eval policies/pci-dss-v3.2.1 -i gcr.io/kpt-fn/set-enforcement-action:v0.1 -- enforcementAction=dryrun 
- (Facultatif) Prévisualisez les contraintes de règles à créer : - kpt live init policies/pci-dss-v3.2.1 kpt live apply --dry-run policies/pci-dss-v3.2.1 
- Si votre répertoire de synchronisation pour Config Sync utilise Kustomize, ajoutez - policies/pci-dss-v3.2.1à votre fichier- kustomization.yamlracine. Sinon, supprimez le fichier- policies/pci-dss-v3.2.1/kustomization.yaml:- rm SYNC_ROOT_DIR/policies/pci-dss-v3.2.1/kustomization.yaml 
- Transférez les modifications au dépôt 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 
- Vérifiez l'état de l'installation : - watch gcloud beta container fleet config-management status --project PROJECT_ID - L'état - SYNCEDconfirme l'installation des règles .
Consulter les notifications de non-respect des règles
Une fois les contraintes de règle installées en mode audit, les cas de non-respect du cluster peuvent être visualisés dans l'interface utilisateur à l'aide du tableau de bord Policy Controller.
Vous pouvez également utiliser kubectl pour afficher les cas de non-respect sur le cluster à l'aide de la commande suivante :
kubectl get constraint -l policycontroller.gke.io/bundleName=pci-dss-v3.2.1 -o json | jq -cC '.items[]| [.metadata.name,.status.totalViolations]'
En cas de non-respect des règles, vous pouvez consulter la liste des messages de non-respect par contrainte avec :
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[]?]'
Modifier l'action d'application du bundle de règles PCI-DSS v3.2.1
Une fois que vous avez examiné les cas de non-respect des règles sur votre cluster, vous pouvez envisager de modifier le mode d'application afin que le contrôleur d'admission warn active ou deny bloque l'application des ressources non conformes sur le cluster.
kubectl
- Utilisez kubectl pour définir la mesure coercitive des règles sur - warn:- 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"}]'
- Vérifiez que la mesure coercitive des contraintes de règle a été mise à jour : - kubectl get constraint -l policycontroller.gke.io/bundleName=pci-dss-v3.2.1 
kpt
- Exécutez la fonction kpt - set-enforcement-actionpour définir la mesure coercitive des règles sur- warn:- kpt fn eval -i gcr.io/kpt-fn/set-enforcement-action:v0.1 -- enforcementAction=warn 
- Appliquez les contraintes de règles : - kpt live apply 
Config Sync
Les opérateurs qui utilisent Config Sync pour déployer des règles sur leurs clusters peuvent suivre ces instructions :
- Accédez au répertoire de synchronisation pour Config Sync : - cd SYNC_ROOT_DIR 
- Exécutez la fonction kpt - set-enforcement-actionpour définir la mesure coercitive des règles sur- warn:- kpt fn eval policies/pci-dss-v3.2.1 -i gcr.io/kpt-fn/set-enforcement-action:v0.1 -- enforcementAction=warn 
- Transférez les modifications au dépôt Config Sync : - 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 
- Vérifiez l'état de l'installation : - nomos status - Le cluster doit afficher l'état - SYNCEDavec les règles installées.
Tester l'application des règles
Créez une ressource non conforme sur le cluster à l'aide de la commande suivante :
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
Le contrôleur d'admission doit générer un avertissement répertoriant les cas de violation des règles que cette ressource ne respecte pas, comme indiqué dans l'exemple suivant :
Warning: [pci-dss-v3.2.1-restrict-default-namespace] <default> namespace is restricted pod/wp-non-compliant created
Supprimer le bundle de règles PCI-DSS v3.2.1
Si nécessaire, le bundle de règles PCI-DSS v3.2.1 peut être supprimé du cluster.
kubectl
- Utilisez kubectl pour supprimer les règles : - kubectl delete constraint -l policycontroller.gke.io/bundleName=pci-dss-v3.2.1 
kpt
- Supprimez les règles : - kpt live destroy 
Config Sync
Les opérateurs qui utilisent Config Sync pour déployer des règles sur leurs clusters peuvent suivre ces instructions :
- Transférez les modifications au dépôt Config Sync : - git rm -r SYNC_ROOT_DIR/policies/pci-dss-v3.2.1 git commit -m 'Removing PCI-DSS v3.2.1 policies' git push 
- Vérifiez l'état : - nomos status - L'état du cluster doit être - SYNCED, et les ressources doivent avoir été supprimées.