Utiliser des contraintes de règles NIST SP 800-53 Rev. 5

Policy Controller est fourni avec une bibliothèque par défaut de modèles de contrainte qui peuvent être utilisés avec le lot NIST SP 800-53 Rev. 5 qui met en œuvre les contrôles répertoriés dans la Publication spéciale 800-53 Rev. 5 du NIST (National Institute of Standards and Technology). Le bundle peut aider les organisations à protéger leurs systèmes et leurs données contre diverses menaces en implémentant des règles de sécurité et de confidentialité prêtes à l'emploi.

Contraintes liées aux groupes de règles NIST SP 800-53 Rev. 5

Nom de la contrainte Description de la contrainte ID de commande
nist-sp-800-53-r5-block-secrets-of-type-basic-auth Limite l'utilisation des secrets de type "basic-auth". Attributs de sécurité et de confidentialité AC-16
nist-sp-800-53-r5-restrict-hostpath-volumes Limite l'utilisation des volumes HostPath.
nist-sp-800-53-r5-restrict-rbac-subjects Limite l'utilisation des noms dans les sujets RBAC aux valeurs autorisées. Gestion de compte AC-2
nist-sp-800-53-r5-restrict-rbac-subjects Limite l'utilisation des noms dans les sujets RBAC aux valeurs autorisées. Application de l'accès AC-3
nist-sp-800-53-r5-block-secrets-of-type-basic-auth Limite l'utilisation des secrets de type "basic-auth". Application du flux d'informations AC-4
nist-sp-800-53-r5-require-binauthz Nécessite le webhook d'admission de validation d'autorisation binaire.
nist-sp-800-53-r5-require-namespace-network-policies Nécessite que chaque espace de noms défini dans le cluster ait un objet NetworkPolicy.
nist-sp-800-53-r5-restrict-hostpath-volumes Limite l'utilisation des volumes HostPath.
nist-sp-800-53-r5-require-binauthz Nécessite le webhook d'admission de validation d'autorisation binaire. Moindre privilège AC-6
nist-sp-800-53-r5-restrict-clusteradmin-rolebindings Limite l'utilisation du rôle "cluster-admin".
nist-sp-800-53-r5-restrict-repos Limite les images de conteneurs à une liste "dépôt" autorisée.
nist-sp-800-53-r5-restrict-role-wildcards Limite l'utilisation des caractères génériques dans "Roles" et "ClusterRoles".
nist-sp-800-53-r5-require-binauthz Nécessite le webhook d'admission de validation d'autorisation binaire. Non-répudiation AU-10
nist-sp-800-53-r5-nodes-have-consistent-time Garantit la cohérence et l'exactitude des heures sur les nœuds en n'autorisant que Container-Optimized OS (COS) ou Ubuntu comme image de l'OS. Horodatages AU-8
nist-sp-800-53-r5-require-namespace-network-policies Nécessite que chaque espace de noms défini dans le cluster ait un objet NetworkPolicy. Connexions du système interne CA-9
nist-sp-800-53-r5-require-binauthz Nécessite le webhook d'admission de validation d'autorisation binaire. Composants signés CM-14
nist-sp-800-53-r5-enforce-config-management Nécessite que Config Sync soit en cours d'exécution et que la prévention des dérives soit activée avec au moins un objet "RootSync" sur le cluster. Configuration de référence CM-2
nist-sp-800-53-r5-require-managed-by-label Nécessite que toutes les applications aient un libellé "app.kubernetes.io/managed-by" valide.
nist-sp-800-53-r5-apparmor Limite les profils AppArmor autorisés pour les pods. Contrôle des modifications de configuration CM-3
nist-sp-800-53-r5-block-secrets-of-type-basic-auth Limite l'utilisation des secrets de type "basic-auth".
nist-sp-800-53-r5-capabilities Limite les fonctionnalités supplémentaires autorisées pour les pods.
nist-sp-800-53-r5-enforce-config-management Nécessite que Config Sync soit en cours d'exécution et que la prévention des dérives soit activée avec au moins un objet "RootSync" sur le cluster.
nist-sp-800-53-r5-host-namespaces Limite les conteneurs pour lesquels "hostPID" ou "hostIPC" est défini sur "true".
nist-sp-800-53-r5-host-network Empêche l'exécution des conteneurs avec l'option "hostNetwork" définie sur "true".
nist-sp-800-53-r5-privileged-containers Limite les conteneurs dont "securityContext.privileged" est défini sur "true".
nist-sp-800-53-r5-proc-mount-type Nécessite les masques "/proc" par défaut pour les pods
nist-sp-800-53-r5-require-managed-by-label Nécessite que toutes les applications aient un libellé "app.kubernetes.io/managed-by" valide.
nist-sp-800-53-r5-restrict-hostpath-volumes Limite l'utilisation des volumes HostPath.
nist-sp-800-53-r5-restrict-volume-types Limite les types de volumes installables à la liste autorisée.
nist-sp-800-53-r5-seccomp Le profil Seccomp ne doit pas être explicitement défini sur "Non confiné".
nist-sp-800-53-r5-selinux Limite la configuration SELinux pour les pods.
nist-sp-800-53-r5-sysctls Limite les Sysctls autorisés pour les pods.
nist-sp-800-53-r5-enforce-config-management Nécessite que Config Sync soit en cours d'exécution et que la prévention des dérives soit activée avec au moins un objet "RootSync" sur le cluster. Analyse de l'impact sur la sécurité du CM-4
nist-sp-800-53-r5-require-managed-by-label Nécessite que toutes les applications aient un libellé "app.kubernetes.io/managed-by" valide.
nist-sp-800-53-r5-restrict-clusteradmin-rolebindings Limite l'utilisation du rôle "cluster-admin".
nist-sp-800-53-r5-enforce-config-management Nécessite que Config Sync soit en cours d'exécution et que la prévention des dérives soit activée avec au moins un objet "RootSync" sur le cluster. Restrictions d'accès concernant la modification CM-5
nist-sp-800-53-r5-require-managed-by-label Nécessite que toutes les applications aient un libellé "app.kubernetes.io/managed-by" valide.
nist-sp-800-53-r5-restrict-clusteradmin-rolebindings Limite l'utilisation du rôle "cluster-admin".
nist-sp-800-53-r5-block-secrets-of-type-basic-auth Limite l'utilisation des secrets de type "basic-auth". Paramètres de configuration CM-6
nist-sp-800-53-r5-enforce-config-management Nécessite que Config Sync soit en cours d'exécution et que la prévention des dérives soit activée avec au moins un objet "RootSync" sur le cluster.
nist-sp-800-53-r5-require-binauthz Nécessite le webhook d'admission de validation d'autorisation binaire.
nist-sp-800-53-r5-require-managed-by-label Nécessite que toutes les applications aient un libellé "app.kubernetes.io/managed-by" valide.
nist-sp-800-53-r5-restrict-hostpath-volumes Limite l'utilisation des volumes HostPath.
nist-sp-800-53-r5-restrict-volume-types Limite les types de volumes installables à la liste autorisée.
nist-sp-800-53-r5-apparmor Limite les profils AppArmor autorisés pour les pods. Plus faible fonctionnement de CM-7
nist-sp-800-53-r5-capabilities Limite les fonctionnalités supplémentaires autorisées pour les pods.
nist-sp-800-53-r5-host-namespaces Limite les conteneurs pour lesquels "hostPID" ou "hostIPC" est défini sur "true".
nist-sp-800-53-r5-host-network Empêche l'exécution des conteneurs avec l'option "hostNetwork" définie sur "true".
nist-sp-800-53-r5-privileged-containers Limite les conteneurs dont "securityContext.privileged" est défini sur "true".
nist-sp-800-53-r5-proc-mount-type Nécessite les masques "/proc" par défaut pour les pods
nist-sp-800-53-r5-restrict-clusteradmin-rolebindings Limite l'utilisation du rôle "cluster-admin".
nist-sp-800-53-r5-restrict-hostpath-volumes Limite l'utilisation des volumes HostPath.
nist-sp-800-53-r5-restrict-volume-types Limite les types de volumes installables à la liste autorisée.
nist-sp-800-53-r5-seccomp Le profil Seccomp ne doit pas être explicitement défini sur "Non confiné".
nist-sp-800-53-r5-selinux Limite la configuration SELinux pour les pods.
nist-sp-800-53-r5-sysctls Limite les Sysctls autorisés pour les pods.
nist-sp-800-53-r5-enforce-config-management Nécessite que Config Sync soit en cours d'exécution et que la prévention des dérives soit activée avec au moins un objet "RootSync" sur le cluster. Récupération et reconstitution du système d'information CP-10
nist-sp-800-53-r5-require-managed-by-label Nécessite que toutes les applications aient un libellé "app.kubernetes.io/managed-by" valide.
nist-sp-800-53-r5-enforce-config-management Nécessite que Config Sync soit en cours d'exécution et que la prévention des dérives soit activée avec au moins un objet "RootSync" sur le cluster. Sauvegarde du système CP-9
nist-sp-800-53-r5-require-managed-by-label Nécessite que toutes les applications aient un libellé "app.kubernetes.io/managed-by" valide.
nist-sp-800-53-r5-restrict-rbac-subjects Limite l'utilisation des noms dans les sujets RBAC aux valeurs autorisées. Identification et authentification IA-2 (utilisateurs organisationnels)
nist-sp-800-53-r5-block-creation-with-default-serviceaccount Limitez la création de ressources à l'aide d'un compte de service par défaut. Gestion des identifiants IA-4
nist-sp-800-53-r5-restrict-rbac-subjects Limite l'utilisation des noms dans les sujets RBAC aux valeurs autorisées.
nist-sp-800-53-r5-require-binauthz Nécessite le webhook d'admission de validation d'autorisation binaire. Gestion de l'authentificateur IA-5
nist-sp-800-53-r5-restrict-rbac-subjects Limite l'utilisation des noms dans les sujets RBAC aux valeurs autorisées.
nist-sp-800-53-r5-restrict-rbac-subjects Limite l'utilisation des noms dans les sujets RBAC aux valeurs autorisées. Maintenance non locale MA-4
nist-sp-800-53-r5-enforce-config-management Nécessite que Config Sync soit en cours d'exécution et que la prévention des dérives soit activée avec au moins un objet "RootSync" sur le cluster. Règles et procédures PL-1
nist-sp-800-53-r5-require-managed-by-label Nécessite que toutes les applications aient un libellé "app.kubernetes.io/managed-by" valide.
nist-sp-800-53-r5-require-binauthz Nécessite le webhook d'admission de validation d'autorisation binaire. Analyse des failles RA-5
nist-sp-800-53-r5-enforce-config-management Nécessite que Config Sync soit en cours d'exécution et que la prévention des dérives soit activée avec au moins un objet "RootSync" sur le cluster. Gestion de la configuration du développeur SA-10
nist-sp-800-53-r5-require-managed-by-label Nécessite que toutes les applications aient un libellé "app.kubernetes.io/managed-by" valide.
nist-sp-800-53-r5-require-binauthz Nécessite le webhook d'admission de validation d'autorisation binaire. Chemin approuvé SA-11
nist-sp-800-53-r5-require-binauthz Nécessite le webhook d'admission de validation d'autorisation binaire. Cycle de vie de développement du système SA-3
nist-sp-800-53-r5-block-secrets-of-type-basic-auth Limite l'utilisation des secrets de type "basic-auth". Principes d'ingénierie en matière de sécurité et de confidentialité SA-8
nist-sp-800-53-r5-restrict-hostpath-volumes Limite l'utilisation des volumes HostPath.
nist-sp-800-53-r5-restrict-volume-types Limite les types de volumes installables à la liste autorisée.
nist-sp-800-53-r5-require-binauthz Nécessite le webhook d'admission de validation d'autorisation binaire. Établissement et gestion des clés cryptographiques SC-12
nist-sp-800-53-r5-restrict-storageclass Limite la classe "StorageClass" à une liste de "StorageClass" qui chiffrent par défaut. Protection des informations au repos SC-28
nist-sp-800-53-r5-require-namespace-network-policies Nécessite que chaque espace de noms défini dans le cluster ait un objet NetworkPolicy. Informations SC-4 dans les ressources partagées
nist-sp-800-53-r5-cpu-and-memory-limits-required Les pods doivent spécifier des limites de processeur et de mémoire. Disponibilité des ressources SC-6
nist-sp-800-53-r5-block-secrets-of-type-basic-auth Limite l'utilisation des secrets de type "basic-auth". Protection des limites SC-7
nist-sp-800-53-r5-enforce-config-management Nécessite que Config Sync soit en cours d'exécution et que la prévention des dérives soit activée avec au moins un objet "RootSync" sur le cluster.
nist-sp-800-53-r5-require-managed-by-label Nécessite que toutes les applications aient un libellé "app.kubernetes.io/managed-by" valide.
nist-sp-800-53-r5-require-namespace-network-policies Nécessite que chaque espace de noms défini dans le cluster ait un objet NetworkPolicy.
nist-sp-800-53-r5-restrict-hostpath-volumes Limite l'utilisation des volumes HostPath.
nist-sp-800-53-r5-restrict-volume-types Limite les types de volumes installables à la liste autorisée.
nist-sp-800-53-r5-asm-peer-authn-strict-mtls S'assure que PeerAuthentications ne peut pas écraser le mode mTLS strict Confidentialité et intégrité de la transmission SC-8
nist-sp-800-53-r5-require-binauthz Nécessite le webhook d'admission de validation d'autorisation binaire. Gestion et conservation des informations SI-12
nist-sp-800-53-r5-restrict-storageclass Limite la classe "StorageClass" à une liste de "StorageClass" qui chiffrent par défaut.
nist-sp-800-53-r5-require-av-daemonset Nécessite la présence d'un daemonset antivirus. Protection contre le code malveillant SI-3
nist-sp-800-53-r5-block-secrets-of-type-basic-auth Limite l'utilisation des secrets de type "basic-auth". Logiciel SI-7, micrologiciel et intégrité des informations
nist-sp-800-53-r5-enforce-config-management Nécessite que Config Sync soit en cours d'exécution et que la prévention des dérives soit activée avec au moins un objet "RootSync" sur le cluster.
nist-sp-800-53-r5-require-binauthz Nécessite le webhook d'admission de validation d'autorisation binaire.
nist-sp-800-53-r5-require-managed-by-label Nécessite que toutes les applications aient un libellé "app.kubernetes.io/managed-by" valide.
nist-sp-800-53-r5-restrict-hostpath-volumes Limite l'utilisation des volumes HostPath.
nist-sp-800-53-r5-require-binauthz Nécessite le webhook d'admission de validation d'autorisation binaire. Provenance du SR-4

Avant de commencer

  1. Installez et initialisez Google Cloud CLI, qui fournit les commandes gcloud, kubectl, et utilisées dans les présentes instructions. Si vous utilisez Cloud Shell, Google Cloud CLI est préinstallé.
  2. Installez Policy Controller 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

  1. 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"
          - group: "configsync.gke.io"
            version: "v1beta1"
            kind: "RootSync"
          - group: "storage.k8s.io"
            version: "v1"
            kind: "StorageClass"
          - group: "admissionregistration.k8s.io"
            version: "v1"
            kind: "ValidatingWebhookConfiguration"
    
  2. Appliquez le fichier manifeste policycontroller-config.yaml :

    kubectl apply -f policycontroller-config.yaml
    

Configurer le cluster et la charge de travail

  1. L'activation et la configuration de Config Sync , y compris du webhook d'admission de prévention de dérive, sont requises dans nist-sp-800-53-r5-enforce-config-management.
  2. Vous devez ajouter une solution antivirus. Par défaut, un daemonset nommé clamav est présent dans le clamav namespace ; cependant, le nom et l'espace de noms de daemonset peut être personnalisé en fonction de votre mise en œuvre dans la contrainte nist-sp-800-53-r5-require-av-daemonset.
  3. Les images de conteneur sont limitées à une liste de dépôts autorisés, qui peut être personnalisée si nécessaire dans nist-sp-800-53-r5-restrict-repos.
  4. Les nœuds doivent utiliser Container-Optimized OS ou Ubuntu pour leur image dans nist-sp-800-53-r5-nodes-have-consistent-time.
  5. L'utilisation des classes de stockage est limitée à une liste autorisée, qui peut être personnalisée pour ajouter des classes supplémentaires avec chiffrement par défaut dans nist-sp-800-53-r5-restrict-storageclass.
  6. L'activation et la configuration de l'autorisation binaire sont requises dans nist-sp-800-53-r5-require-binauthz.

Auditer le lot de règles NIST SP 800-53 Rev. 5

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 NIST SP 800-53 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, kpt ou Config Sync.

kubectl

  1. (Facultatif) Prévisualisez les contraintes de règle avec kubectl :

    kubectl kustomize https://github.com/GoogleCloudPlatform/gke-policy-library.git/anthos-bundles/nist-sp-800-53-r5
    
  2. Appliquez les contraintes de règle avec kubectl :

    kubectl apply -k https://github.com/GoogleCloudPlatform/gke-policy-library.git/anthos-bundles/nist-sp-800-53-r5
    

    Le résultat est le suivant :

    asmpeerauthnstrictmtls.constraints.gatekeeper.sh/nist-sp-800-53-r5-asm-peer-authn-strict-mtls created
    k8sallowedrepos.constraints.gatekeeper.sh/nist-sp-800-53-r5-restrict-repos created
    k8sblockcreationwithdefaultserviceaccount.constraints.gatekeeper.sh/nist-sp-800-53-r5-block-creation-with-default-serviceaccount created
    k8sblockobjectsoftype.constraints.gatekeeper.sh/nist-sp-800-53-r5-block-secrets-of-type-basic-auth created
    k8senforceconfigmanagement.constraints.gatekeeper.sh/nist-sp-800-53-r5-enforce-config-management created
    k8spspapparmor.constraints.gatekeeper.sh/nist-sp-800-53-r5-apparmor created
    k8spspcapabilities.constraints.gatekeeper.sh/nist-sp-800-53-r5-capabilities created
    k8spspforbiddensysctls.constraints.gatekeeper.sh/nist-sp-800-53-r5-sysctls created
    k8spsphostfilesystem.constraints.gatekeeper.sh/nist-sp-800-53-r5-restrict-hostpath-volumes created
    k8spsphostnamespace.constraints.gatekeeper.sh/nist-sp-800-53-r5-host-namespaces created
    k8spsphostnetworkingports.constraints.gatekeeper.sh/nist-sp-800-53-r5-host-network created
    k8spspprivilegedcontainer.constraints.gatekeeper.sh/nist-sp-800-53-r5-privileged-containers created
    k8spspprocmount.constraints.gatekeeper.sh/nist-sp-800-53-r5-proc-mount-type created
    k8spspselinuxv2.constraints.gatekeeper.sh/nist-sp-800-53-r5-selinux created
    k8spspseccomp.constraints.gatekeeper.sh/nist-sp-800-53-r5-seccomp created
    k8spspvolumetypes.constraints.gatekeeper.sh/nist-sp-800-53-r5-restrict-volume-types created
    k8sprohibitrolewildcardaccess.constraints.gatekeeper.sh/nist-sp-800-53-r5-restrict-role-wildcards created
    k8srequirebinauthz.constraints.gatekeeper.sh/nist-sp-800-53-r5-require-binauthz created
    k8srequirecosnodeimage.constraints.gatekeeper.sh/nist-sp-800-53-r5-nodes-have-consistent-time created
    k8srequiredaemonsets.constraints.gatekeeper.sh/nist-sp-800-53-r5-require-av-daemonset created
    k8srequirenamespacenetworkpolicies.constraints.gatekeeper.sh/nist-sp-800-53-r5-require-namespace-network-policies created
    k8srequiredlabels.constraints.gatekeeper.sh/nist-sp-800-53-r5-require-managed-by-label created
    k8srequiredresources.constraints.gatekeeper.sh/nist-sp-800-53-r5-cpu-and-memory-limits-required created
    k8srestrictrbacsubjects.constraints.gatekeeper.sh/nist-sp-800-53-r5-restrict-rbac-subjects created
    k8srestrictrolebindings.constraints.gatekeeper.sh/nist-sp-800-53-r5-restrict-clusteradmin-rolebindings created
    k8sstorageclass.constraints.gatekeeper.sh/nist-sp-800-53-r5-restrict-storageclass created
    
  3. 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 constraints -l policycontroller.gke.io/bundleName=nist-sp-800-53-r5
    

    Le résultat ressemble à ce qui suit :

    NAME                                                            ENFORCEMENT-ACTION   TOTAL-VIOLATIONS
    k8spspapparmor.constraints.gatekeeper.sh/nist-sp-800-53-r5-apparmor   dryrun               0
    
    NAME                                                                        ENFORCEMENT-ACTION   TOTAL-VIOLATIONS
    k8srequirebinauthz.constraints.gatekeeper.sh/nist-sp-800-53-r5-require-binauthz   dryrun               0
    
    NAME                                                                                   ENFORCEMENT-ACTION   TOTAL-VIOLATIONS
    k8srestrictrbacsubjects.constraints.gatekeeper.sh/nist-sp-800-53-r5-restrict-rbac-subjects   dryrun               0
    
    NAME                                                                   ENFORCEMENT-ACTION   TOTAL-VIOLATIONS
    k8spspforbiddensysctls.constraints.gatekeeper.sh/nist-sp-800-53-r5-sysctls   dryrun               0
    
    NAME                                                                            ENFORCEMENT-ACTION   TOTAL-VIOLATIONS
    k8spspvolumetypes.constraints.gatekeeper.sh/nist-sp-800-53-r5-restrict-volume-types   dryrun               0
    
    NAME                                                                           ENFORCEMENT-ACTION   TOTAL-VIOLATIONS
    k8spsphostnetworkingports.constraints.gatekeeper.sh/nist-sp-800-53-r5-host-network   dryrun               0
    
    NAME                                                                        ENFORCEMENT-ACTION   TOTAL-VIOLATIONS
    k8spsphostnamespace.constraints.gatekeeper.sh/nist-sp-800-53-r5-host-namespaces   dryrun               0
    
    NAME                                                                              ENFORCEMENT-ACTION   TOTAL-VIOLATIONS
    k8srequiredaemonsets.constraints.gatekeeper.sh/nist-sp-800-53-r5-require-av-daemonset   dryrun               0
    
    NAME                                                                                          ENFORCEMENT-ACTION   TOTAL-VIOLATIONS
    k8sprohibitrolewildcardaccess.constraints.gatekeeper.sh/nist-sp-800-53-r5-restrict-role-wildcards   dryrun               0
    
    NAME                                                                                                                         ENFORCEMENT-ACTION   TOTAL-VIOLATIONS
    k8sblockcreationwithdefaultserviceaccount.constraints.gatekeeper.sh/nist-sp-800-53-r5-block-creation-with-default-serviceaccount   dryrun               0
    
    NAME                                                                                   ENFORCEMENT-ACTION   TOTAL-VIOLATIONS
    k8spsphostfilesystem.constraints.gatekeeper.sh/nist-sp-800-53-r5-restrict-hostpath-volumes   dryrun               0
    
    NAME                                                          ENFORCEMENT-ACTION   TOTAL-VIOLATIONS
    k8spspseccomp.constraints.gatekeeper.sh/nist-sp-800-53-r5-seccomp   dryrun               0
    
    NAME                                                                                      ENFORCEMENT-ACTION   TOTAL-VIOLATIONS
    asmpeerauthnstrictmtls.constraints.gatekeeper.sh/nist-sp-800-53-r5-asm-peer-authn-strict-mtls   dryrun               0
    
    NAME                                                                                        ENFORCEMENT-ACTION   TOTAL-VIOLATIONS
    k8srequiredresources.constraints.gatekeeper.sh/nist-sp-800-53-r5-cpu-and-memory-limits-required   dryrun               0
    
    NAME                                                                    ENFORCEMENT-ACTION   TOTAL-VIOLATIONS
    k8spspprocmount.constraints.gatekeeper.sh/nist-sp-800-53-r5-proc-mount-type   dryrun               0
    
    NAME                                                                                           ENFORCEMENT-ACTION   TOTAL-VIOLATIONS
    k8sblockobjectsoftype.constraints.gatekeeper.sh/nist-sp-800-53-r5-block-secrets-of-type-basic-auth   dryrun               0
    
    NAME                                                                                                          ENFORCEMENT-ACTION   TOTAL-VIOLATIONS
    k8srequirenamespacenetworkpolicies.constraints.gatekeeper.sh/nist-sp-800-53-r5-require-namespace-network-policies   dryrun               0
    
    NAME                                                                    ENFORCEMENT-ACTION   TOTAL-VIOLATIONS
    k8spspcapabilities.constraints.gatekeeper.sh/nist-sp-800-53-r5-capabilities   dryrun               0
    
    NAME                                                                          ENFORCEMENT-ACTION   TOTAL-VIOLATIONS
    k8sstorageclass.constraints.gatekeeper.sh/nist-sp-800-53-r5-restrict-storageclass   dryrun               0
    
    NAME                                                                               ENFORCEMENT-ACTION   TOTAL-VIOLATIONS
    k8srequiredlabels.constraints.gatekeeper.sh/nist-sp-800-53-r5-require-managed-by-label   dryrun               0
    
    NAME                                                                                    ENFORCEMENT-ACTION   TOTAL-VIOLATIONS
    k8spspprivilegedcontainer.constraints.gatekeeper.sh/nist-sp-800-53-r5-privileged-containers   dryrun               0
    
    NAME                                                                   ENFORCEMENT-ACTION   TOTAL-VIOLATIONS
    k8sallowedrepos.constraints.gatekeeper.sh/nist-sp-800-53-r5-restrict-repos   dryrun               0
    
    NAME                                                            ENFORCEMENT-ACTION   TOTAL-VIOLATIONS
    k8spspselinuxv2.constraints.gatekeeper.sh/nist-sp-800-53-r5-selinux   dryrun               0
    
    NAME                                                                                         ENFORCEMENT-ACTION   TOTAL-VIOLATIONS
    k8senforceconfigmanagement.constraints.gatekeeper.sh/nist-sp-800-53-r5-enforce-config-management   dryrun               0
    
    NAME                                                                                               ENFORCEMENT-ACTION   TOTAL-VIOLATIONS
    k8srestrictrolebindings.constraints.gatekeeper.sh/nist-sp-800-53-r5-restrict-clusteradmin-rolebindings   dryrun               0
    
    NAME                                                                                      ENFORCEMENT-ACTION   TOTAL-VIOLATIONS
    k8srequirecosnodeimage.constraints.gatekeeper.sh/nist-sp-800-53-r5-nodes-have-consistent-time   dryrun               0
    

kpt

  1. Installez et configurez kpt.

    kpt est utilisé dans ces instructions pour personnaliser et déployer les ressources Kubernetes.

  2. Téléchargez le groupe de règles NIST SP 800-53 Rev. 5 depuis GitHub à l'aide de Kpt :

    kpt pkg get https://github.com/GoogleCloudPlatform/gke-policy-library.git/anthos-bundles/nist-sp-800-53-r5
    
  3. Exécutez la fonction kpt set-enforcement-action pour définir l'action d'application des règles sur dryrun :

    kpt fn eval nist-sp-800-53-r5 -i gcr.io/kpt-fn/set-enforcement-action:v0.1 \
    -- enforcementAction=dryrun
    
  4. Initialisez le répertoire de travail avec kpt, qui crée une ressource pour suivre les modifications :

    cd nist-sp-800-53-r5 kpt live init
    
  5. Appliquez les contraintes de règles avec kpt :

    kpt live apply
    
  6. 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 CURRENT confirme l'installation correcte des contraintes.

Config Sync

  1. 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 :

  2. Accédez au répertoire de synchronisation pour Config Sync :

    cd SYNC_ROOT_DIR
    

    Pour créer ou ajouter .gitignore avec resourcegroup.yaml, procédez comme suit :

    echo resourcegroup.yaml >> .gitignore
    
  3. Créez un répertoire policies dédié :

    mkdir -p policies
    
  4. Téléchargez le groupe de règles NIST SP 800-53 Rev. 5 depuis GitHub à l'aide de Kpt :

    kpt pkg get https://github.com/GoogleCloudPlatform/gke-policy-library.git/anthos-bundles/nist-sp-800-53-r5 policies/nist-sp-800-53-r5
    
  5. Exécutez la fonction kpt set-enforcement-action pour définir l'action d'application des règles sur dryrun :

    kpt fn eval policies/nist-sp-800-53-r5 -i gcr.io/kpt-fn/set-enforcement-action:v0.1 -- enforcementAction=dryrun
    
  6. (Facultatif) Prévisualisez les contraintes de règles à créer :

    kpt live init policies/nist-sp-800-53-r5 kpt live apply --dry-run policies/nist-sp-800-53-r5
    
  7. Si votre répertoire de synchronisation pour Config Sync utilise Kustomize, ajoutez policies/nist-sp-800-53-r5 à votre kustomization.yaml racine. Sinon, supprimez le fichier policies/nist-sp-800-53-r5/kustomization.yaml :

    rm SYNC_ROOT_DIR/policies/nist-sp-800-53-r5/kustomization.yaml
    
  8. Transférez les modifications au dépôt Config Sync :

    git add SYNC_ROOT_DIR/policies/nist-sp-800-53-r5 git commit -m 'Adding NIST SP 800-53 Rev. 5 policy audit enforcement'
    git push
    
  9. Vérifiez l'état de l'installation :

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

    L'état SYNCED confirme 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.

  1. 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=nist-sp-800-53-r5 -o json | jq -cC '.items[]| [.metadata.name,.status.totalViolations]'
    
  2. 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=nist-sp-800-53-r5 -o json | jq -C '.items[]| select(.status.totalViolations>0)| [.metadata.name,.status.violations[]?]'
    

Modification de l'action d'application du lot de règles NIST SP 800-53 révision 5

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

  1. Utilisez kubectl pour définir l'action d'application des règles sur warn :

    kubectl get constraints -l policycontroller.gke.io/bundleName=nist-sp-800-53-r5 -o name | xargs -I {} kubectl patch {} --type='json' -p='[{"op":"replace","path":"/spec/enforcementAction","value":"warn"}]'
    
  2. Vérifiez que l'action d'application des contraintes de règle a été mise à jour :

    kubectl get constraints -l policycontroller.gke.io/bundleName=nist-sp-800-53-r5
    

kpt

  1. Exécutez la fonction kpt set-enforcement-action pour définir l'action d'application des règles sur warn :

    kpt fn eval -i gcr.io/kpt-fn/set-enforcement-action:v0.1 -- enforcementAction=warn
    
  2. 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 :

  1. Accédez au répertoire de synchronisation pour Config Sync :

    cd SYNC_ROOT_DIR
    
  2. Exécutez la fonction kpt set-enforcement-action pour définir l'action d'application des règles sur warn :

    kpt fn eval policies/nist-sp-800-53-r5 -i gcr.io/kpt-fn/set-enforcement-action:v0.1 -- enforcementAction=warn
    
  3. Transférez les modifications au dépôt Config Sync :

    git add SYNC_ROOT_DIR/policies/nist-sp-800-53-r5
    git commit -m 'Adding NIST SP 800-53 Rev. 5 policy warn enforcement'
    git push
    
  4. Vérifiez l'état de l'installation :

    gcloud alpha anthos config sync repo list --project PROJECT_ID
    

    Le dépôt qui s'affiche dans la colonne SYNCED confirme l'installation des règles.

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:
  name: wp-non-compliant
spec:
  containers:
    ‐ image: wordpress
      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: [nist-sp-800-53-r5-cpu-and-memory-limits-required] container <wordpress> does not have <{"cpu", "memory"}> limits defined
Warning: [nist-sp-800-53-r5-restrict-repos] container <wordpress> has an invalid image repo <wordpress>, allowed repos are ["gcr.io/gke-release/", "gcr.io/anthos-baremetal-release/", "gcr.io/config-management-release/", "gcr.io/kubebuilder/", "gcr.io/gkeconnect/", "gke.gcr.io/"]
pod/wp-non-compliant created

Supprimer le lot de règles NIST SP 800-53 Rev. 5

Si nécessaire, le lot de règles NIST SP 800-53 Rev. 5 peut être supprimé du cluster.

kubectl

  • Utilisez kubectl pour supprimer les règles :

    kubectl delete constraint -l policycontroller.gke.io/bundleName=nist-sp-800-53-r5
    

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 :

  1. Transférez les modifications au dépôt Config Sync :

    git rm -r SYNC_ROOT_DIR/policies/nist-sp-800-53-r5
    git commit -m 'Removing NIST SP 800-53 Rev. 5 policies'
    git push
    
  2. Vérifiez l'état :

    gcloud alpha anthos config sync repo list --project PROJECT_ID
    

    Le dépôt qui s'affiche dans la colonne SYNCED confirme la suppression des règles.