Usar as restrições da política NIST SP 800-190

O Policy Controller vem com uma biblioteca padrão de modelos de restrição que pode ser usada com o pacote NIST SP 800-190 (em inglês), que implementa controles listados em Publicação especial do Instituto Nacional de Padrões e Tecnologia (NIST, na sigla em inglês) 800-190, Guia de Segurança de Contêineres de Aplicativo. O pacote destina-se a ajudar organizações com segurança de contêineres de aplicativos, incluindo segurança de imagens, segurança do ambiente de execução do contêiner, segurança da rede e segurança do sistema host, entre outras.

Restrições do pacote de políticas NIST SP 800-190

Nome da restrição Descrição da restrição ID do controle
nist-sp-800-190-restrict-rbac-subjects Restringe o uso de nomes nos assuntos do RBAC a valores permitidos. Gerenciamento de contas AC-2
nist-sp-800-190-restrict-rbac-subjects Restringe o uso de nomes nos assuntos do RBAC a valores permitidos. Aplicação de acesso AC-3
nist-sp-800-190-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-190-require-binauthz Requer a autorização binária que valida o webhook de admissão.
nist-sp-800-190-require-namespace-network-policies Requer que cada namespace definido no cluster tenha uma NetworkPolicy.
nist-sp-800-190-restrict-hostpath-volumes Restringe o uso de volumes do HostPath.
nist-sp-800-190-require-binauthz Requer a autorização binária que valida o webhook de admissão. Privilégio mínimo AC-6
nist-sp-800-190-restrict-clusteradmin-rolebindings Restringe o uso do papel "cluster-admin".
nist-sp-800-190-restrict-repos Restringe imagens de contêiner a uma lista de "repos" permitida.
nist-sp-800-190-restrict-role-wildcards Restringe o uso de caracteres curinga em "Papéis" e "ClusterRoles".
nist-sp-800-190-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-190-require-namespace-network-policies Requer que cada namespace definido no cluster tenha uma NetworkPolicy. Conexões internas do sistema CA-9
nist-sp-800-190-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-190-require-managed-by-label Requer que todos os apps tenham um rótulo "app.kubernetes.io/managed-by" válido.
nist-sp-800-190-apparmor Restringe os perfis do AppArmor permitidos para pods. Controle de alterações de configuração do CM-3
nist-sp-800-190-block-secrets-of-type-basic-auth Restringe o uso de secrets do tipo de autenticação básica.
nist-sp-800-190-capabilities Restringe recursos adicionais permitidos para pods.
nist-sp-800-190-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-190-host-namespaces Restringe contêineres com "hostPID" ou "hostIPC" definido como "true".
nist-sp-800-190-host-network Restringe a execução de contêineres com a sinalização "hostNetwork" definida como "true".
nist-sp-800-190-privileged-containers Restringe contêineres com "securityContext.privileged" como "true".
nist-sp-800-190-proc-mount-type Requer as máscaras "default"/"pro" padrão para pods
nist-sp-800-190-require-managed-by-label Requer que todos os apps tenham um rótulo "app.kubernetes.io/managed-by" válido.
nist-sp-800-190-restrict-hostpath-volumes Restringe o uso de volumes do HostPath.
nist-sp-800-190-restrict-volume-types Restringe os tipos de volumes montados à lista de permissões.
nist-sp-800-190-seccomp O perfil Seccomp não pode ser definido explicitamente como "Unconfined".
nist-sp-800-190-selinux Restringe a configuração do SELinux para pods.
nist-sp-800-190-sysctls Restringe o Sysctls permitido para pods.
nist-sp-800-190-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-190-require-managed-by-label Requer que todos os apps tenham um rótulo "app.kubernetes.io/managed-by" válido.
nist-sp-800-190-restrict-clusteradmin-rolebindings Restringe o uso do papel "cluster-admin".
nist-sp-800-190-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-190-require-managed-by-label Requer que todos os apps tenham um rótulo "app.kubernetes.io/managed-by" válido.
nist-sp-800-190-restrict-clusteradmin-rolebindings Restringe o uso do papel "cluster-admin".
nist-sp-800-190-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-190-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-190-require-binauthz Requer a autorização binária que valida o webhook de admissão.
nist-sp-800-190-require-managed-by-label Requer que todos os apps tenham um rótulo "app.kubernetes.io/managed-by" válido.
nist-sp-800-190-restrict-hostpath-volumes Restringe o uso de volumes do HostPath.
nist-sp-800-190-restrict-volume-types Restringe os tipos de volumes montados à lista de permissões.
nist-sp-800-190-apparmor Restringe os perfis do AppArmor permitidos para pods. Funcionalidade mínima do CM-7
nist-sp-800-190-capabilities Restringe recursos adicionais permitidos para pods.
nist-sp-800-190-host-namespaces Restringe contêineres com "hostPID" ou "hostIPC" definido como "true".
nist-sp-800-190-host-network Restringe a execução de contêineres com a sinalização "hostNetwork" definida como "true".
nist-sp-800-190-privileged-containers Restringe contêineres com "securityContext.privileged" como "true".
nist-sp-800-190-proc-mount-type Requer as máscaras "default"/"pro" padrão para pods
nist-sp-800-190-restrict-clusteradmin-rolebindings Restringe o uso do papel "cluster-admin".
nist-sp-800-190-restrict-hostpath-volumes Restringe o uso de volumes do HostPath.
nist-sp-800-190-restrict-volume-types Restringe os tipos de volumes montados à lista de permissões.
nist-sp-800-190-seccomp O perfil Seccomp não pode ser definido explicitamente como "Unconfined".
nist-sp-800-190-selinux Restringe a configuração do SELinux para pods.
nist-sp-800-190-sysctls Restringe o Sysctls permitido para pods.
nist-sp-800-190-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-190-require-managed-by-label Requer que todos os apps tenham um rótulo "app.kubernetes.io/managed-by" válido.
nist-sp-800-190-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-190-require-managed-by-label Requer que todos os apps tenham um rótulo "app.kubernetes.io/managed-by" válido.
nist-sp-800-190-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-190-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-190-restrict-rbac-subjects Restringe o uso de nomes nos assuntos do RBAC a valores permitidos.
nist-sp-800-190-require-binauthz Requer a autorização binária que valida o webhook de admissão. Gerenciamento de autenticação IA-5
nist-sp-800-190-restrict-rbac-subjects Restringe o uso de nomes nos assuntos do RBAC a valores permitidos.
nist-sp-800-190-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-190-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-190-require-managed-by-label Requer que todos os apps tenham um rótulo "app.kubernetes.io/managed-by" válido.
nist-sp-800-190-require-namespace-network-policies Requer que cada namespace definido no cluster tenha uma NetworkPolicy. Informações sobre recursos compartilhados SC-4
nist-sp-800-190-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-190-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-190-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-190-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-190-require-binauthz Requer a autorização binária que valida o webhook de admissão.
nist-sp-800-190-require-managed-by-label Requer que todos os apps tenham um rótulo "app.kubernetes.io/managed-by" válido.
nist-sp-800-190-restrict-hostpath-volumes Restringe o uso de volumes do HostPath.

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 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: "networking.k8s.io"
            version: "v1"
            kind: "NetworkPolicy"
          - group: "configsync.gke.io"
            version: "v1beta1"
            kind: "RootSync"
          - 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-190-enforce-config-management.
  2. 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-190-restrict-repos.
  3. Os nós precisam usar o Container-Optimized OS ou Ubuntu na imagem no nist-sp-800-190-nodes-have-consistent-time.
  4. A ativação e a configuração da autorização binária são necessárias em nist-sp-800-190-require-binauthz.

Auditar o pacote de políticas do NIST SP 800-190

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 do NIST 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-190
    
  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-190
    

    A saída é esta:

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

    O resultado será assim:

    NAME                                                            ENFORCEMENT-ACTION   TOTAL-VIOLATIONS
    k8spspapparmor.constraints.gatekeeper.sh/nist-sp-800-190-apparmor   dryrun               0
    
    NAME                                                                        ENFORCEMENT-ACTION   TOTAL-VIOLATIONS
    k8srequirebinauthz.constraints.gatekeeper.sh/nist-sp-800-190-require-binauthz   dryrun               0
    
    NAME                                                                                   ENFORCEMENT-ACTION   TOTAL-VIOLATIONS
    k8srestrictrbacsubjects.constraints.gatekeeper.sh/nist-sp-800-190-restrict-rbac-subjects   dryrun               0
    
    NAME                                                                   ENFORCEMENT-ACTION   TOTAL-VIOLATIONS
    k8spspforbiddensysctls.constraints.gatekeeper.sh/nist-sp-800-190-sysctls   dryrun               0
    
    NAME                                                                            ENFORCEMENT-ACTION   TOTAL-VIOLATIONS
    k8spspvolumetypes.constraints.gatekeeper.sh/nist-sp-800-190-restrict-volume-types   dryrun               0
    
    NAME                                                                           ENFORCEMENT-ACTION   TOTAL-VIOLATIONS
    k8spsphostnetworkingports.constraints.gatekeeper.sh/nist-sp-800-190-host-network   dryrun               0
    
    NAME                                                                        ENFORCEMENT-ACTION   TOTAL-VIOLATIONS
    k8spsphostnamespace.constraints.gatekeeper.sh/nist-sp-800-190-host-namespaces   dryrun               0
    
    NAME                                                                                          ENFORCEMENT-ACTION   TOTAL-VIOLATIONS
    k8sprohibitrolewildcardaccess.constraints.gatekeeper.sh/nist-sp-800-190-restrict-role-wildcards   dryrun               0
    
    NAME                                                                                                                         ENFORCEMENT-ACTION   TOTAL-VIOLATIONS
    k8sblockcreationwithdefaultserviceaccount.constraints.gatekeeper.sh/nist-sp-800-190-block-creation-with-default-serviceaccount   dryrun               0
    
    NAME                                                                                   ENFORCEMENT-ACTION   TOTAL-VIOLATIONS
    k8spsphostfilesystem.constraints.gatekeeper.sh/nist-sp-800-190-restrict-hostpath-volumes   dryrun               0
    
    NAME                                                          ENFORCEMENT-ACTION   TOTAL-VIOLATIONS
    k8spspseccomp.constraints.gatekeeper.sh/nist-sp-800-190-seccomp   dryrun               0
    
    NAME                                                                                      ENFORCEMENT-ACTION   TOTAL-VIOLATIONS
    asmpeerauthnstrictmtls.constraints.gatekeeper.sh/nist-sp-800-190-asm-peer-authn-strict-mtls   dryrun               0
    
    NAME                                                                                        ENFORCEMENT-ACTION   TOTAL-VIOLATIONS
    k8srequiredresources.constraints.gatekeeper.sh/nist-sp-800-190-cpu-and-memory-limits-required   dryrun               0
    
    NAME                                                                    ENFORCEMENT-ACTION   TOTAL-VIOLATIONS
    k8spspprocmount.constraints.gatekeeper.sh/nist-sp-800-190-proc-mount-type   dryrun               0
    
    NAME                                                                                           ENFORCEMENT-ACTION   TOTAL-VIOLATIONS
    k8sblockobjectsoftype.constraints.gatekeeper.sh/nist-sp-800-190-block-secrets-of-type-basic-auth   dryrun               0
    
    NAME                                                                                                          ENFORCEMENT-ACTION   TOTAL-VIOLATIONS
    k8srequirenamespacenetworkpolicies.constraints.gatekeeper.sh/nist-sp-800-190-require-namespace-network-policies   dryrun               0
    
    NAME                                                                    ENFORCEMENT-ACTION   TOTAL-VIOLATIONS
    k8spspcapabilities.constraints.gatekeeper.sh/nist-sp-800-190-capabilities   dryrun               0
    
    NAME                                                                               ENFORCEMENT-ACTION   TOTAL-VIOLATIONS
    k8srequiredlabels.constraints.gatekeeper.sh/nist-sp-800-190-require-managed-by-label   dryrun               0
    
    NAME                                                                                    ENFORCEMENT-ACTION   TOTAL-VIOLATIONS
    k8spspprivilegedcontainer.constraints.gatekeeper.sh/nist-sp-800-190-privileged-containers   dryrun               0
    
    NAME                                                                   ENFORCEMENT-ACTION   TOTAL-VIOLATIONS
    k8sallowedrepos.constraints.gatekeeper.sh/nist-sp-800-190-restrict-repos   dryrun               0
    
    NAME                                                            ENFORCEMENT-ACTION   TOTAL-VIOLATIONS
    k8spspselinuxv2.constraints.gatekeeper.sh/nist-sp-800-190-selinux   dryrun               0
    
    NAME                                                                                         ENFORCEMENT-ACTION   TOTAL-VIOLATIONS
    k8senforceconfigmanagement.constraints.gatekeeper.sh/nist-sp-800-190-enforce-config-management   dryrun               0
    
    NAME                                                                                               ENFORCEMENT-ACTION   TOTAL-VIOLATIONS
    k8srestrictrolebindings.constraints.gatekeeper.sh/nist-sp-800-190-restrict-clusteradmin-rolebindings   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 NIST SP 800-190 no GitHub usando o kpt:

    kpt pkg get https://github.com/GoogleCloudPlatform/gke-policy-library.git/anthos-bundles/nist-sp-800-190
    
  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-190 -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-190 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 NIST SP 800-190 no GitHub usando o kpt:

    kpt pkg get https://github.com/GoogleCloudPlatform/gke-policy-library.git/anthos-bundles/nist-sp-800-190 policies/nist-sp-800-190
    
  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-190 -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-190 kpt live apply --dry-run policies/nist-sp-800-190
    
  7. Se o diretório de sincronização do Config Sync usar Kustomize, adicione policies/nist-sp-800-190 à raiz kustomization.yaml. Caso contrário, remova o arquivo policies/nist-sp-800-190/kustomization.yaml:

    rm SYNC_ROOT_DIR/policies/nist-sp-800-190/kustomization.yaml
    
  8. Envie as alterações para o repositório do Config Sync:

    git add SYNC_ROOT_DIR/policies/nist-sp-800-190 git commit -m 'Adding NIST SP 800-190 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-190 -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-190 -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-190

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 deny:

    kubectl get constraints -l policycontroller.gke.io/bundleName=nist-sp-800-190 -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-190
    

kpt

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

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

    kpt fn eval policies/nist-sp-800-190 -i gcr.io/kpt-fn/set-enforcement-action:v0.1 -- enforcementAction=deny
    
  3. Envie as alterações para o repositório do Config Sync:

    git add SYNC_ROOT_DIR/policies/nist-sp-800-190
    git commit -m 'Adding NIST SP 800-190 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-190-cpu-and-memory-limits-required] container <wordpress> does not have <{"cpu", "memory"}> limits defined
Warning: [nist-sp-800-190-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 NIST SP 800-190

Se necessário, o pacote de políticas NIST SP 800-190 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-190
    

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-190
    git commit -m 'Removing NIST SP 800-190 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.