Use as restrições da política NIST SP 800-53 Rev. 5

O Policy Controller vem com uma biblioteca padrão de modelos de restrição que podem ser usados com o pacote NIST SP 800-53 Rev. 5 (em inglês), que implementa listados na Publicação especial do Instituto Nacional de Padrões e Tecnologia (NIST, na sigla em inglês) 800-53 Rev. 5 (em inglês). O pacote pode ajudar as organizações a proteger os sistemas e dados contra diversas ameaças implementando políticas de privacidade e segurança prontas para uso.

Restrições do pacote de políticas NIST SP 800-53 Rev. 5

Nome da restrição Descrição da restrição ID do controle
nist-sp-800-53-r5-block-secrets-of-type-basic-auth Restringe o uso de secrets do tipo de autenticação básica. Atributos de segurança e privacidade AC-16
nist-sp-800-53-r5-restrict-hostpath-volumes Restringe o uso de volumes do HostPath.
nist-sp-800-53-r5-restrict-rbac-subjects Restringe o uso de nomes nos assuntos do RBAC a valores permitidos. Gerenciamento de contas AC-2
nist-sp-800-53-r5-restrict-rbac-subjects Restringe o uso de nomes nos assuntos do RBAC a valores permitidos. Aplicação de acesso AC-3
nist-sp-800-53-r5-block-secrets-of-type-basic-auth Restringe o uso de secrets do tipo de autenticação básica. Aplicação do fluxo de informações AC-4
nist-sp-800-53-r5-require-binauthz Requer a autorização binária que valida o webhook de admissão.
nist-sp-800-53-r5-require-namespace-network-policies Requer que cada namespace definido no cluster tenha uma NetworkPolicy.
nist-sp-800-53-r5-restrict-hostpath-volumes Restringe o uso de volumes do HostPath.
nist-sp-800-53-r5-require-binauthz Requer a autorização binária que valida o webhook de admissão. Privilégio mínimo AC-6
nist-sp-800-53-r5-restrict-clusteradmin-rolebindings Restringe o uso do papel "cluster-admin".
nist-sp-800-53-r5-restrict-repos Restringe imagens de contêiner a uma lista de "repositórios" permitida.
nist-sp-800-53-r5-restrict-role-wildcards Restringe o uso de caracteres curinga em "Papéis" e "ClusterRoles".
nist-sp-800-53-r5-require-binauthz Requer a autorização binária que valida o webhook de admissão. Não reputação de AU-10
nist-sp-800-53-r5-nodes-have-consistent-time Garante tempo consistente e correto nos nós permitindo apenas o Container-Optimized OS (COS) ou o Ubuntu como a imagem do SO. Carimbos de hora AU-8
nist-sp-800-53-r5-require-namespace-network-policies Requer que cada namespace definido no cluster tenha uma NetworkPolicy. Conexões internas do sistema CA-9
nist-sp-800-53-r5-require-binauthz Requer a autorização binária que valida o webhook de admissão. Componentes assinados pelo CM-14
nist-sp-800-53-r5-enforce-config-management Exige que o Config Sync esteja em execução e o Drift Prevention ativado com pelo menos um objeto "RootSync" no cluster. Configuração de valor de referência do CM-2
nist-sp-800-53-r5-require-managed-by-label Requer que todos os apps tenham um rótulo "app.kubernetes.io/managed-by" válido.
nist-sp-800-53-r5-apparmor Restringe os perfis do AppArmor permitidos para pods. Controle de alterações de configuração do CM-3
nist-sp-800-53-r5-block-secrets-of-type-basic-auth Restringe o uso de secrets do tipo de autenticação básica.
nist-sp-800-53-r5-capabilities Restringe recursos adicionais permitidos para pods.
nist-sp-800-53-r5-enforce-config-management Exige que o Config Sync esteja em execução e o Drift Prevention ativado com pelo menos um objeto "RootSync" no cluster.
nist-sp-800-53-r5-host-namespaces Restringe contêineres com "hostPID" ou "hostIPC" definido como "true".
nist-sp-800-53-r5-host-network Restringe a execução de contêineres com a sinalização "hostNetwork" definida como "true".
nist-sp-800-53-r5-privileged-containers Restringe contêineres com "securityContext.privileged" como "true".
nist-sp-800-53-r5-proc-mount-type Requer as máscaras "/proc" padrão para pods.
nist-sp-800-53-r5-require-managed-by-label Requer que todos os apps tenham um rótulo "app.kubernetes.io/managed-by" válido.
nist-sp-800-53-r5-restrict-hostpath-volumes Restringe o uso de volumes do HostPath.
nist-sp-800-53-r5-restrict-volume-types Restringe os tipos de volumes montados à lista de permissões.
nist-sp-800-53-r5-seccomp O perfil do Seccomp não pode ser definido explicitamente como "Unconfined".
nist-sp-800-53-r5-selinux Restringe a configuração do SELinux para pods.
nist-sp-800-53-r5-sysctls Restringe o Sysctls permitido para pods.
nist-sp-800-53-r5-enforce-config-management Exige que o Config Sync esteja em execução e o Drift Prevention ativado com pelo menos um objeto "RootSync" no cluster. Análise do impacto de segurança no CM-4
nist-sp-800-53-r5-require-managed-by-label Requer que todos os apps tenham um rótulo "app.kubernetes.io/managed-by" válido.
nist-sp-800-53-r5-restrict-clusteradmin-rolebindings Restringe o uso do papel "cluster-admin".
nist-sp-800-53-r5-enforce-config-management Exige que o Config Sync esteja em execução e o Drift Prevention ativado com pelo menos um objeto "RootSync" no cluster. Restrições de acesso do CM-5 para alterações
nist-sp-800-53-r5-require-managed-by-label Requer que todos os apps tenham um rótulo "app.kubernetes.io/managed-by" válido.
nist-sp-800-53-r5-restrict-clusteradmin-rolebindings Restringe o uso do papel "cluster-admin".
nist-sp-800-53-r5-block-secrets-of-type-basic-auth Restringe o uso de secrets do tipo de autenticação básica. Definições da configuração do CM-6
nist-sp-800-53-r5-enforce-config-management Exige que o Config Sync esteja em execução e o Drift Prevention ativado com pelo menos um objeto "RootSync" no cluster.
nist-sp-800-53-r5-require-binauthz Requer a autorização binária que valida o webhook de admissão.
nist-sp-800-53-r5-require-managed-by-label Requer que todos os apps tenham um rótulo "app.kubernetes.io/managed-by" válido.
nist-sp-800-53-r5-restrict-hostpath-volumes Restringe o uso de volumes do HostPath.
nist-sp-800-53-r5-restrict-volume-types Restringe os tipos de volumes montados à lista de permissões.
nist-sp-800-53-r5-apparmor Restringe os perfis do AppArmor permitidos para pods. Funcionalidade mínima do CM-7
nist-sp-800-53-r5-capabilities Restringe recursos adicionais permitidos para pods.
nist-sp-800-53-r5-host-namespaces Restringe contêineres com "hostPID" ou "hostIPC" definido como "true".
nist-sp-800-53-r5-host-network Restringe a execução de contêineres com a sinalização "hostNetwork" definida como "true".
nist-sp-800-53-r5-privileged-containers Restringe contêineres com "securityContext.privileged" como "true".
nist-sp-800-53-r5-proc-mount-type Requer as máscaras "/proc" padrão para pods.
nist-sp-800-53-r5-restrict-clusteradmin-rolebindings Restringe o uso do papel "cluster-admin".
nist-sp-800-53-r5-restrict-hostpath-volumes Restringe o uso de volumes do HostPath.
nist-sp-800-53-r5-restrict-volume-types Restringe os tipos de volumes montados à lista de permissões.
nist-sp-800-53-r5-seccomp O perfil do Seccomp não pode ser definido explicitamente como "Unconfined".
nist-sp-800-53-r5-selinux Restringe a configuração do SELinux para pods.
nist-sp-800-53-r5-sysctls Restringe o Sysctls permitido para pods.
nist-sp-800-53-r5-enforce-config-management Exige que o Config Sync esteja em execução e o Drift Prevention ativado com pelo menos um objeto "RootSync" no cluster. Recuperação e reconstituição do sistema de informações CP-10
nist-sp-800-53-r5-require-managed-by-label Requer que todos os apps tenham um rótulo "app.kubernetes.io/managed-by" válido.
nist-sp-800-53-r5-enforce-config-management Exige que o Config Sync esteja em execução e o Drift Prevention ativado com pelo menos um objeto "RootSync" no cluster. Backup do sistema CP-9
nist-sp-800-53-r5-require-managed-by-label Requer que todos os apps tenham um rótulo "app.kubernetes.io/managed-by" válido.
nist-sp-800-53-r5-restrict-rbac-subjects Restringe o uso de nomes nos assuntos do RBAC a valores permitidos. IA-2 Identificação e autenticação (usuários organizacionais)
nist-sp-800-53-r5-block-creation-with-default-serviceaccount Restringir a criação de recursos usando uma conta de serviço padrão. Gerenciamento de identificadores IA-4
nist-sp-800-53-r5-restrict-rbac-subjects Restringe o uso de nomes nos assuntos do RBAC a valores permitidos.
nist-sp-800-53-r5-require-binauthz Requer a autorização binária que valida o webhook de admissão. Gerenciamento de autenticação IA-5
nist-sp-800-53-r5-restrict-rbac-subjects Restringe o uso de nomes nos assuntos do RBAC a valores permitidos.
nist-sp-800-53-r5-restrict-rbac-subjects Restringe o uso de nomes nos assuntos do RBAC a valores permitidos. Manutenção não local MA-4
nist-sp-800-53-r5-enforce-config-management Exige que o Config Sync esteja em execução e o Drift Prevention ativado com pelo menos um objeto "RootSync" no cluster. Política e procedimentos de PL-1
nist-sp-800-53-r5-require-managed-by-label Requer que todos os apps tenham um rótulo "app.kubernetes.io/managed-by" válido.
nist-sp-800-53-r5-require-binauthz Requer a autorização binária que valida o webhook de admissão. Verificação de vulnerabilidades RA-5
nist-sp-800-53-r5-enforce-config-management Exige que o Config Sync esteja em execução e o Drift Prevention ativado com pelo menos um objeto "RootSync" no cluster. Gerenciamento de configuração do desenvolvedor do SA-10
nist-sp-800-53-r5-require-managed-by-label Requer que todos os apps tenham um rótulo "app.kubernetes.io/managed-by" válido.
nist-sp-800-53-r5-require-binauthz Requer a autorização binária que valida o webhook de admissão. Caminho confiável do SA-11
nist-sp-800-53-r5-require-binauthz Requer a autorização binária que valida o webhook de admissão. Ciclo de vida do desenvolvimento de sistemas SA-3
nist-sp-800-53-r5-block-secrets-of-type-basic-auth Restringe o uso de secrets do tipo de autenticação básica. Princípios de engenharia de segurança e privacidade do SA-8
nist-sp-800-53-r5-restrict-hostpath-volumes Restringe o uso de volumes do HostPath.
nist-sp-800-53-r5-restrict-volume-types Restringe os tipos de volumes montados à lista de permissões.
nist-sp-800-53-r5-require-binauthz Requer a autorização binária que valida o webhook de admissão. Estabelecimento e gerenciamento de chaves criptográficas SC-12
nist-sp-800-53-r5-restrict-storageclass Restringe "StorageClass" a uma lista de "StorageClass", que criptografa por padrão. Proteção das informações em repouso SC-28
nist-sp-800-53-r5-require-namespace-network-policies Requer que cada namespace definido no cluster tenha uma NetworkPolicy. Informações sobre recursos compartilhados SC-4
nist-sp-800-53-r5-cpu-and-memory-limits-required Requer que os pods especifiquem limites de CPU e memória. Disponibilidade de recursos do SC-6
nist-sp-800-53-r5-block-secrets-of-type-basic-auth Restringe o uso de secrets do tipo de autenticação básica. Proteção de limite SC-7
nist-sp-800-53-r5-enforce-config-management Exige que o Config Sync esteja em execução e o Drift Prevention ativado com pelo menos um objeto "RootSync" no cluster.
nist-sp-800-53-r5-require-managed-by-label Requer que todos os apps tenham um rótulo "app.kubernetes.io/managed-by" válido.
nist-sp-800-53-r5-require-namespace-network-policies Requer que cada namespace definido no cluster tenha uma NetworkPolicy.
nist-sp-800-53-r5-restrict-hostpath-volumes Restringe o uso de volumes do HostPath.
nist-sp-800-53-r5-restrict-volume-types Restringe os tipos de volumes montados à lista de permissões.
nist-sp-800-53-r5-asm-peer-authn-strict-mtls Garante que o PeerAuthentications não pode substituir o mTLS restrito. Confidencialidade e integridade da transmissão do SC-8
nist-sp-800-53-r5-require-binauthz Requer a autorização binária que valida o webhook de admissão. SI-12: gerenciamento e retenção de informações
nist-sp-800-53-r5-restrict-storageclass Restringe "StorageClass" a uma lista de "StorageClass", que criptografa por padrão.
nist-sp-800-53-r5-require-av-daemonset Requer a presença de um daemonset antivírus. Proteção de código malicioso SI-3
nist-sp-800-53-r5-block-secrets-of-type-basic-auth Restringe o uso de secrets do tipo de autenticação básica. Software, firmware e integridade da informação SI-7
nist-sp-800-53-r5-enforce-config-management Exige que o Config Sync esteja em execução e o Drift Prevention ativado com pelo menos um objeto "RootSync" no cluster.
nist-sp-800-53-r5-require-binauthz Requer a autorização binária que valida o webhook de admissão.
nist-sp-800-53-r5-require-managed-by-label Requer que todos os apps tenham um rótulo "app.kubernetes.io/managed-by" válido.
nist-sp-800-53-r5-restrict-hostpath-volumes Restringe o uso de volumes do HostPath.
nist-sp-800-53-r5-require-binauthz Requer a autorização binária que valida o webhook de admissão. Procedência SR-4

Antes de começar

  1. Instale e inicialize a Google Cloud CLI, que fornece os comandos gcloud e kubectl usados nestas instruções. Se você usa o Cloud Shell, a Google Cloud CLI já vem pré-instalada.
  2. Instale o Policy Controller v1.15.2 ou mais recente no cluster com a biblioteca padrão de modelos de restrição. Você também precisa ativar a compatibilidade com restrições referenciais, já que este pacote contém restrições referenciais.

Configurar o Policy Controller com restrições referenciais

  1. Salve o seguinte manifesto YAML em um arquivo como policycontroller-config.yaml. O manifesto configura o Policy Controller para observar tipos específicos de objetos.

    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. Aplique o manifesto policycontroller-config.yaml:

    kubectl apply -f policycontroller-config.yaml
    

Configurar o cluster e a carga de trabalho

  1. A ativação e a configuração do Config Sync , incluindo o webhook de admissão da Prevenção contra violação, são necessárias em nist-sp-800-53-r5-enforce-config-management.
  2. Uma solução antivírus é necessária. O padrão é a presença de um daemonset chamado clamav no clamav namespace, mas o nome e o namespace do daemonset podem ser personalizados para sua implementação na restrição nist-sp-800-53-r5-require-av-daemonset.
  3. As imagens de contêiner são limitadas a uma lista de repositórios permitidos, que pode ser personalizada se necessário em nist-sp-800-53-r5-restrict-repos.
  4. Os nós precisam usar o Container-Optimized OS ou Ubuntu na imagem no nist-sp-800-53-r5-nodes-have-consistent-time.
  5. O uso de classes de armazenamento é limitado a uma lista permitida, que pode ser personalizada para adicionar outras classes com criptografia padrão em nist-sp-800-53-r5-restrict-storageclass.
  6. A ativação e a configuração da autorização binária são necessárias em nist-sp-800-53-r5-require-binauthz.

Pacote de políticas de auditoria NIST SP 800-53 Rev. 5

O Policy Controller permite aplicar políticas ao cluster do Kubernetes. Para ajudar a testar suas cargas de trabalho e a conformidade delas com relação às políticas de NIST SP 800-53 descritas na tabela anterior, implante essas restrições no modo de "auditoria" para revelar violações e, mais importante, se permitir corrigir antes de aplicar no cluster do Kubernetes.

É possível aplicar essas políticas com spec.enforcementAction definido como dryrun usando kubectl, kpt ou Config Sync .

kubectl

  1. (Opcional) Visualize as restrições de política com o kubectl:

    kubectl kustomize https://github.com/GoogleCloudPlatform/gke-policy-library.git/anthos-bundles/nist-sp-800-53-r5
    
  2. Aplique as restrições da política com o kubectl:

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

    A saída é esta:

    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. Verifique se as restrições da política foram instaladas e se existem violações no cluster:

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

    O resultado será assim:

    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. Instale e configure o kpt.

    O kpt é usado nestas instruções para personalizar e implantar recursos do Kubernetes.

  2. Faça o download do pacote de políticas do NIST SP 800-53 Rev. 5 no GitHub usando o kpt:

    kpt pkg get https://github.com/GoogleCloudPlatform/gke-policy-library.git/anthos-bundles/nist-sp-800-53-r5
    
  3. Execute a função set-enforcement-action do kpt para definir a ação de aplicação das políticas como dryrun:

    kpt fn eval nist-sp-800-53-r5 -i gcr.io/kpt-fn/set-enforcement-action:v0.1 \
    -- enforcementAction=dryrun
    
  4. Inicialize o diretório de trabalho com o kpt, que cria um recurso para acompanhar as alterações:

    cd nist-sp-800-53-r5 kpt live init
    
  5. Aplique as restrições da política ao kpt:

    kpt live apply
    
  6. Verifique se as restrições da política foram instaladas e se existem violações no cluster:

    kpt live status --output table --poll-until current
    

    O status CURRENT confirma a instalação bem-sucedida das restrições.

Config Sync

  1. Instale e configure o kpt.

    O kpt é usado nestas instruções para personalizar e implantar recursos do Kubernetes.

    Os operadores que usam o Config Sync para implantar políticas nos clusters podem usar as seguintes instruções:

  2. Altere para o diretório de sincronização do Config Sync:

    cd SYNC_ROOT_DIR
    

    Para criar ou anexar .gitignore com resourcegroup.yaml:

    echo resourcegroup.yaml >> .gitignore
    
  3. Crie um diretório policies dedicado:

    mkdir -p policies
    
  4. Faça o download do pacote de políticas do NIST SP 800-53 Rev. 5 no GitHub usando o 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. Execute a função set-enforcement-action do kpt para definir a ação de aplicação das políticas como dryrun:

    kpt fn eval policies/nist-sp-800-53-r5 -i gcr.io/kpt-fn/set-enforcement-action:v0.1 -- enforcementAction=dryrun
    
  6. (Opcional) Visualize as restrições de política a serem criadas:

    kpt live init policies/nist-sp-800-53-r5 kpt live apply --dry-run policies/nist-sp-800-53-r5
    
  7. Se o diretório de sincronização do Config Sync usar Kustomize, adicione policies/nist-sp-800-53-r5 à raiz kustomization.yaml. Caso contrário, remova o arquivo policies/nist-sp-800-53-r5/kustomization.yaml:

    rm SYNC_ROOT_DIR/policies/nist-sp-800-53-r5/kustomization.yaml
    
  8. Envie as alterações para o repositório do 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. Verifique o status da instalação:

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

    O status SYNCED confirma a instalação das políticas.

Visualizar violações de políticas

Depois que as restrições de política são instaladas no modo de auditoria, as violações no cluster podem ser visualizadas na interface usando o Painel do Controlador de políticas.

  1. Também é possível usar kubectl para visualizar violações no cluster usando o seguinte comando:

    kubectl get constraint -l policycontroller.gke.io/bundleName=nist-sp-800-53-r5 -o json | jq -cC '.items[]| [.metadata.name,.status.totalViolations]'
    
  2. Se houver violações, uma lista das mensagens de violação por restrição poderá ser visualizada com:

    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[]?]'
    

Alterar ação de aplicação do pacote de políticas do NIST SP 800-53 Rev. 5

Depois de analisar as violações de políticas no cluster, considere alterar o modo de aplicação para que o controlador de admissão warn ou deny bloqueie a aplicação de recursos sem compliance no cluster.

kubectl

  1. Use o kubectl para definir a ação de cumprimento das políticas como 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. Verifique se a ação de cumprimento das restrições da política foi atualizada:

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

kpt

  1. Execute a função set-enforcement-action do kpt para definir a ação de aplicação das políticas como warn:

    kpt fn eval -i gcr.io/kpt-fn/set-enforcement-action:v0.1 -- enforcementAction=warn
    
  2. Aplique as restrições da política:

    kpt live apply
    

Config Sync

Os operadores que usam o Config Sync para implantar políticas nos clusters podem usar as seguintes instruções:

  1. Altere para o diretório de sincronização do Config Sync:

    cd SYNC_ROOT_DIR
    
  2. Execute a função set-enforcement-action do kpt para definir a ação de aplicação das políticas como warn:

    kpt fn eval policies/nist-sp-800-53-r5 -i gcr.io/kpt-fn/set-enforcement-action:v0.1 -- enforcementAction=warn
    
  3. Envie as alterações para o repositório do 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. Verifique o status da instalação:

    gcloud alpha anthos config sync repo list --project PROJECT_ID
    

    Seu repo que aparece na coluna SYNCED confirma a instalação das políticas.

Aplicação da política de testes

Crie um recurso não compatível no cluster usando o seguinte comando:

cat <<EOF | kubectl apply -f -
apiVersion: v1
kind: Pod
metadata:
  name: wp-non-compliant
spec:
  containers:
    ‐ image: wordpress
      name: wordpress
EOF

O controlador de admissão produzirá um alerta listando as violações da política que esse recurso viola, conforme mostrado no exemplo a seguir:

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

Remoção do pacote de políticas do NIST SP 800-53 Rev. 5

Se necessário, o pacote de políticas NIST SP 800-53 Rev. 5 pode ser removido do cluster.

kubectl

  • Use o kubectl para remover as políticas:

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

kpt

  • Remova as políticas:

    kpt live destroy
    

Config Sync

Os operadores que usam o Config Sync para implantar políticas nos clusters podem usar as seguintes instruções:

  1. Envie as alterações para o repositório do 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. Verifique o status:

    gcloud alpha anthos config sync repo list --project PROJECT_ID
    

    Seu repo que aparece na coluna SYNCED confirma a remoção das políticas.