Use restrições de políticas da referência do CIS Kubernetes v1.7.1

O Policy Controller inclui uma biblioteca predefinida de modelos de restrições que podem ser usados com o conjunto do CIS para auditar a conformidade do seu cluster com a CIS Kubernetes Benchmark v1.7.1. Esta referência é um conjunto de recomendações para configurar o Kubernetes de forma a suportar uma postura de segurança forte.

Esta página contém instruções para aplicar manualmente um pacote de políticas. Em alternativa, pode aplicar pacotes de políticas diretamente.

Esta página destina-se a administradores de TI e operadores que querem garantir que todos os recursos executados na plataforma de nuvem cumprem os requisitos de conformidade da organização, fornecendo e mantendo a automatização para auditar ou aplicar. Para saber mais sobre as funções comuns e as tarefas de exemplo a que fazemos referência no Google Cloud conteúdo, consulte o artigo Funções e tarefas comuns de utilizadores do GKE.

Este conjunto de restrições aborda e aplica políticas nos seguintes domínios:

  • RBAC e contas de serviço
  • Políticas de segurança de agrupamentos
  • Políticas de rede e CNI
  • Gestão de segredos
  • Extensible Admission Control
  • Políticas gerais

Restrições do pacote de políticas do CIS Kubernetes v1.7.1

Nome da restrição Descrição da restrição IDs de controlo
cis-k8s-v1.7.1-restrict-system-masters-group Não permite a utilização do grupo system:masters. Não tem efeito durante a auditoria. 5.1.7
cis-k8s-v1.7.1-restrict-env-var-secrets Restringe a utilização de segredos como variáveis de ambiente em definições de contentores. 5.4.1
cis-k8s-v1.7.1-restrict-capabilities Os contentores têm de remover a capacidade NET_RAW e não podem adicionar novamente capacidades. 5.2.8, 5.2.9 e 5.2.10
cis-k8s-v1.7.1-require-admission-controller Requer a Pod Security Admission ou um sistema de controlo de políticas externo. 5.2.1
cis-k8s-v1.7.1-require-binauthz Requer o webhook de admissão de validação da autorização binária. 5.5.1
cis-k8s-v1.7.1-require-namespace-networkpolicy Requer que cada espaço de nomes definido no cluster tenha um NetworkPolicy. 5.3.2
cis-k8s-v1.7.1-require-seccomp-default Requer que os pods tenham o perfil seccomp definido como runtime/default ou docker/default. 5.7.2
cis-k8s-v1.7.1-require-securitycontext Requer que os agrupamentos definam securityContext. 5.7.3
cis-k8s-v1.7.1-restrict-aggregation-controller Restringe a utilização da função clusterrole-aggregation-controller. 5.1.8
cis-k8s-v1.7.1-restrict-automountserviceaccounttoken Restringe a utilização de tokens de contas de serviço. 5.1.5 e 5.1.6
cis-k8s-v1.7.1-restrict-bind-escalate-impersonate Restringe o acesso à associação, à escalada e à representação no Roles e no ClusterRoles. 5.1.8
cis-k8s-v1.7.1-restrict-certificatesigningrequests-approval Restringe o acesso à API de aprovação de certificados de cliente. 5.1.11
cis-k8s-v1.7.1-restrict-cluster-admin-role Restringe a utilização da função cluster-admin. 5.1.1, 5.1.8
cis-k8s-v1.7.1-restrict-creation-with-default-serviceaccount Restringe a criação de recursos através de uma conta de serviço predefinida. Não tem efeito durante a auditoria. 5.1.5
cis-k8s-v1.7.1-restrict-default-namespace Impede que os pods usem o espaço de nomes predefinido. 5.7.1, 5.7.4
cis-k8s-v1.7.1-restrict-host-namespace Restringe recipientes com hostPID ou hostIPC definidos como true. 5.2.3, 5.2.4
cis-k8s-v1.7.1-restrict-host-port Restringe a execução de contentores com o hostPort configurado. 5.2.13
cis-k8s-v1.7.1-restrict-hostpath-volumes Restringe a utilização de volumes hostPath. 5.2.12
cis-k8s-v1.7.1-restrict-hostnetwork Impede a execução de contentores com a flag hostNetwork definida como true. 5.2.5
cis-k8s-v1.7.1-restrict-nodes-proxy Restringe o acesso ao sub-recurso de proxy de nós em Roles e ClusterRoles. 5.1.10
cis-k8s-v1.7.1-restrict-persistent-volume Restringe a criação de persistentvolumes em Roles e ClusterRoles. 5.1.9
cis-k8s-v1.7.1-restrict-pods-create Restringe a criação de pods em Roles e ClusterRoles. 5.1.4
cis-k8s-v1.7.1-restrict-privilege-escalation Restringe contentores com allowPrivilegeEscalation definido como true. 5.2.6
cis-k8s-v1.7.1-restrict-privileged-containers Restringe contentores com securityContext.privileged definido como true. 5.2.2
cis-k8s-v1.7.1-restrict-role-secrets Restringe a utilização de segredos em Roles e ClusterRoles. 5.1.2
cis-k8s-v1.7.1-restrict-role-wildcards Restringe a utilização de carateres universais em Roles e ClusterRoles. 5.1.3
cis-k8s-v1.7.1-restrict-root-containers Impede que os contentores sejam executados como utilizador root. 5.2.7
cis-k8s-v1.7.1-restrict-secrets-of-type-basic-auth Restringe a utilização de segredos do tipo basic-auth. 5.4.2
cis-k8s-v1.7.1-restrict-serviceaccounts-token Restringe a criação de tokens de contas de serviço no Roles e no ClusterRoles. 5.1.13
cis-k8s-v1.7.1-restrict-webhook-config Restringe o acesso a objetos de configuração de webhook em Roles e ClusterRoles. 5.1.12
cis-k8s-v1.7.1-restrict-windows-hostprocess Restringe a execução de contentores ou pods do Windows hostProcess. 5.2.11

Antes de começar

  1. Instale e inicialize a CLI do Google Cloud, que fornece os comandos gcloud e kubectl usados nestas instruções. Se usar a Cloud Shell, a Google Cloud CLI é pré-instalada.
  2. Instale o Policy Controller no seu cluster com a biblioteca predefinida de modelos de restrições. Também tem de ativar o suporte para restrições referenciais, uma vez que este pacote contém restrições referenciais.

Configure para restrições referenciais

  1. Guarde o seguinte manifesto YAML num ficheiro como policycontroller-config.yaml. O manifesto configura o Policy Controller para monitorizar tipos específicos de objetos.

    apiVersion: config.gatekeeper.sh/v1alpha1
    kind: Config
    metadata:
      name: config
      namespace: "gatekeeper-system"
    spec:
      sync:
        syncOnly:
          - group: "admissionregistration.k8s.io"
            version: "v1"
            kind: "ValidatingWebhookConfiguration"
          - group: "networking.k8s.io"
            version: "v1"
            kind: "NetworkPolicy"
    
  2. Aplique o manifesto policycontroller-config.yaml:

    kubectl apply -f policycontroller-config.yaml
    

Configure o cluster e a carga de trabalho

  1. A ativação e a configuração da autorização binária são necessárias no cis-k8s-v1.7.1-require-binauthz.

Audite o pacote de políticas CIS Kubernetes v1.7.1

O Policy Controller permite-lhe aplicar políticas ao seu cluster do Kubernetes. Para ajudar a testar as suas cargas de trabalho e a respetiva conformidade no que diz respeito às políticas do CIS Kubernetes v1.7.1 descritas na tabela anterior, pode implementar estas restrições no modo "auditoria" para revelar e resolver violações.

Pode aplicar estas políticas com spec.enforcementAction definido como dryrun através do kubectl, kpt, ou Config Sync.

kubectl

  1. (Opcional) Pré-visualize as restrições de políticas com o kubectl:

    kubectl kustomize https://github.com/GoogleCloudPlatform/gke-policy-library.git/anthos-bundles/cis-k8s-v1.7.1
    
  2. Aplique as restrições de políticas com o kubectl:

    kubectl apply -k https://github.com/GoogleCloudPlatform/gke-policy-library.git/anthos-bundles/cis-k8s-v1.7.1
    

    O resultado é o seguinte:

    k8savoiduseofsystemmastersgroup.constraints.gatekeeper.sh/cis-k8s-v1.7.1-avoid-use-of-system-masters-group created
    k8sblockcreationwithdefaultserviceaccount.constraints.gatekeeper.sh/cis-k8s-v1.7.1-restrict-creation-with-default-serviceaccount created
    k8sblockobjectsoftype.constraints.gatekeeper.sh/cis-k8s-v1.7.1-restrict-secrets-of-type-basic-auth created
    k8snoenvvarsecrets.constraints.gatekeeper.sh/cis-k8s-v1.7.1-no-secrets-as-env-vars created
    k8spspallowprivilegeescalationcontainer.constraints.gatekeeper.sh/cis-k8s-v1.7.1-restrict-privilege-escalation created
    k8spspallowedusers.constraints.gatekeeper.sh/cis-k8s-v1.7.1-restrict-root-containers created
    k8spspcapabilities.constraints.gatekeeper.sh/cis-k8s-v1.7.1-psp-capabilities created
    k8spsphostfilesystem.constraints.gatekeeper.sh/cis-k8s-v1.7.1-restrict-hostpath-volumes created
    k8spsphostnamespace.constraints.gatekeeper.sh/cis-k8s-v1.7.1-restrict-host-namespace created
    k8spsphostnetworkingports.constraints.gatekeeper.sh/cis-k8s-v1.7.1-restrict-host-port created
    k8spsphostnetworkingports.constraints.gatekeeper.sh/cis-k8s-v1.7.1-restrict-hostnetwork created
    k8spspprivilegedcontainer.constraints.gatekeeper.sh/cis-k8s-v1.7.1-restrict-privileged-containers created
    k8spspseccomp.constraints.gatekeeper.sh/cis-k8s-v1.7.1-require-seccomp-default created
    k8spspwindowshostprocess.constraints.gatekeeper.sh/cis-k8s-v1.7.1-restrict-windows-hostprocess created
    k8spodsrequiresecuritycontext.constraints.gatekeeper.sh/cis-k8s-v1.7.1-require-securitycontext created
    k8sprohibitrolewildcardaccess.constraints.gatekeeper.sh/cis-k8s-v1.7.1-restrict-role-wildcards created
    k8srequireadmissioncontroller.constraints.gatekeeper.sh/cis-k8s-v1.7.1-require-admission-controller created
    k8srequirebinauthz.constraints.gatekeeper.sh/cis-k8s-v1.7.1-require-binauthz created
    k8srequirenamespacenetworkpolicies.constraints.gatekeeper.sh/cis-k8s-v1.7.1-require-namespace-networkpolicy created
    k8srestrictautomountserviceaccounttokens.constraints.gatekeeper.sh/cis-k8s-v1.7.1-restrict-automountserviceaccounttoken created
    k8srestrictnamespaces.constraints.gatekeeper.sh/cis-k8s-v1.7.1-restrict-default-namespace created
    k8srestrictrolebindings.constraints.gatekeeper.sh/cis-k8s-v1.7.1-restrict-aggregation-controller created
    k8srestrictrolebindings.constraints.gatekeeper.sh/cis-k8s-v1.7.1-restrict-cluster-admin-role created
    k8srestrictrolerules.constraints.gatekeeper.sh/cis-k8s-v1.7.1-restrict-bind-escalate-impersonate created
    k8srestrictrolerules.constraints.gatekeeper.sh/cis-k8s-v1.7.1-restrict-certificatesigningrequests-approval created
    k8srestrictrolerules.constraints.gatekeeper.sh/cis-k8s-v1.7.1-restrict-nodes-proxy created
    k8srestrictrolerules.constraints.gatekeeper.sh/cis-k8s-v1.7.1-restrict-persistent-volume created
    k8srestrictrolerules.constraints.gatekeeper.sh/cis-k8s-v1.7.1-restrict-pods-create created
    k8srestrictrolerules.constraints.gatekeeper.sh/cis-k8s-v1.7.1-restrict-role-secrets created
    k8srestrictrolerules.constraints.gatekeeper.sh/cis-k8s-v1.7.1-restrict-serviceaccounts-token created
    k8srestrictrolerules.constraints.gatekeeper.sh/cis-k8s-v1.7.1-restrict-webhook-config created
    
  3. Confirme se as restrições de políticas foram instaladas e verifique se existem violações no cluster:

    kubectl get constraints -l policycontroller.gke.io/bundleName=cis-k8s-v1.7.1
    

    O resultado é semelhante ao seguinte:

    NAME                                                                                                             ENFORCEMENT-ACTION   TOTAL-VIOLATIONS
    k8spspallowprivilegeescalationcontainer.constraints.gatekeeper.sh/cis-k8s-v1.7.1-restrict-privilege-escalation   dryrun               0
    
    NAME                                                                                                                               ENFORCEMENT-ACTION   TOTAL-VIOLATIONS
    k8sblockcreationwithdefaultserviceaccount.constraints.gatekeeper.sh/cis-k8s-v1.7.1-restrict-creation-with-default-serviceaccount   dryrun               0
    
    NAME                                                                                             ENFORCEMENT-ACTION   TOTAL-VIOLATIONS
    k8sprohibitrolewildcardaccess.constraints.gatekeeper.sh/cis-k8s-v1.7.1-restrict-role-wildcards   dryrun               0
    
    NAME                                                                           ENFORCEMENT-ACTION   TOTAL-VIOLATIONS
    k8srequirebinauthz.constraints.gatekeeper.sh/cis-k8s-v1.7.1-require-binauthz   dryrun               0
    
    NAME                                                                                                  ENFORCEMENT-ACTION   TOTAL-VIOLATIONS
    k8srequireadmissioncontroller.constraints.gatekeeper.sh/cis-k8s-v1.7.1-require-admission-controller   dryrun               0
    
    NAME                                                                                             ENFORCEMENT-ACTION   TOTAL-VIOLATIONS
    k8spspwindowshostprocess.constraints.gatekeeper.sh/cis-k8s-v1.7.1-restrict-windows-hostprocess   dryrun               0
    
    NAME                                                                                      ENFORCEMENT-ACTION   TOTAL-VIOLATIONS
    k8spsphostnetworkingports.constraints.gatekeeper.sh/cis-k8s-v1.7.1-restrict-host-port     dryrun               0
    k8spsphostnetworkingports.constraints.gatekeeper.sh/cis-k8s-v1.7.1-restrict-hostnetwork   dryrun               0
    
    NAME                                                                                                                      ENFORCEMENT-ACTION   TOTAL-VIOLATIONS
    k8srestrictautomountserviceaccounttokens.constraints.gatekeeper.sh/cis-k8s-v1.7.1-restrict-automountserviceaccounttoken   dryrun               0
    
    NAME                                                                                             ENFORCEMENT-ACTION   TOTAL-VIOLATIONS
    k8spodsrequiresecuritycontext.constraints.gatekeeper.sh/cis-k8s-v1.7.1-require-securitycontext   dryrun               0
    
    NAME                                                                                      ENFORCEMENT-ACTION   TOTAL-VIOLATIONS
    k8spsphostfilesystem.constraints.gatekeeper.sh/cis-k8s-v1.7.1-restrict-hostpath-volumes   dryrun               0
    
    NAME                                                                                                ENFORCEMENT-ACTION   TOTAL-VIOLATIONS
    k8spspprivilegedcontainer.constraints.gatekeeper.sh/cis-k8s-v1.7.1-restrict-privileged-containers   dryrun               0
    
    NAME                                                                             ENFORCEMENT-ACTION   TOTAL-VIOLATIONS
    k8spspseccomp.constraints.gatekeeper.sh/cis-k8s-v1.7.1-require-seccomp-default   dryrun               0
    
    NAME                                                                                               ENFORCEMENT-ACTION   TOTAL-VIOLATIONS
    k8srestrictrolebindings.constraints.gatekeeper.sh/cis-k8s-v1.7.1-restrict-aggregation-controller   dryrun               0
    k8srestrictrolebindings.constraints.gatekeeper.sh/cis-k8s-v1.7.1-restrict-cluster-admin-role       dryrun               0
    
    NAME                                                                                                         ENFORCEMENT-ACTION   TOTAL-VIOLATIONS
    k8srestrictrolerules.constraints.gatekeeper.sh/cis-k8s-v1.7.1-restrict-bind-escalate-impersonate             dryrun               0
    k8srestrictrolerules.constraints.gatekeeper.sh/cis-k8s-v1.7.1-restrict-certificatesigningrequests-approval   dryrun               0
    k8srestrictrolerules.constraints.gatekeeper.sh/cis-k8s-v1.7.1-restrict-nodes-proxy                           dryrun               0
    k8srestrictrolerules.constraints.gatekeeper.sh/cis-k8s-v1.7.1-restrict-persistent-volume                     dryrun               0
    k8srestrictrolerules.constraints.gatekeeper.sh/cis-k8s-v1.7.1-restrict-pods-create                           dryrun               0
    k8srestrictrolerules.constraints.gatekeeper.sh/cis-k8s-v1.7.1-restrict-role-secrets                          dryrun               0
    k8srestrictrolerules.constraints.gatekeeper.sh/cis-k8s-v1.7.1-restrict-serviceaccounts-token                 dryrun               0
    k8srestrictrolerules.constraints.gatekeeper.sh/cis-k8s-v1.7.1-restrict-webhook-config                        dryrun               0
    
    NAME                                                                                   ENFORCEMENT-ACTION   TOTAL-VIOLATIONS
    k8spspallowedusers.constraints.gatekeeper.sh/cis-k8s-v1.7.1-restrict-root-containers   dryrun               0
    
    NAME                                                                                                          ENFORCEMENT-ACTION   TOTAL-VIOLATIONS
    k8srequirenamespacenetworkpolicies.constraints.gatekeeper.sh/cis-k8s-v1.7.1-require-namespace-networkpolicy   dryrun               0
    
    NAME                                                                                                         ENFORCEMENT-ACTION   TOTAL-VIOLATIONS
    k8savoiduseofsystemmastersgroup.constraints.gatekeeper.sh/cis-k8s-v1.7.1-avoid-use-of-system-masters-group   dryrun               0
    
    NAME                                                                                 ENFORCEMENT-ACTION   TOTAL-VIOLATIONS
    k8snoenvvarsecrets.constraints.gatekeeper.sh/cis-k8s-v1.7.1-no-secrets-as-env-vars   dryrun               0
    
    NAME                                                                                                 ENFORCEMENT-ACTION   TOTAL-VIOLATIONS
    k8sblockobjectsoftype.constraints.gatekeeper.sh/cis-k8s-v1.7.1-restrict-secrets-of-type-basic-auth   dryrun               0
    
    NAME                                                                                   ENFORCEMENT-ACTION   TOTAL-VIOLATIONS
    k8spsphostnamespace.constraints.gatekeeper.sh/cis-k8s-v1.7.1-restrict-host-namespace   dryrun               0
    
    NAME                                                                                        ENFORCEMENT-ACTION   TOTAL-VIOLATIONS
    k8srestrictnamespaces.constraints.gatekeeper.sh/cis-k8s-v1.7.1-restrict-default-namespace   dryrun               0
    
    NAME                                                                           ENFORCEMENT-ACTION   TOTAL-VIOLATIONS
    k8spspcapabilities.constraints.gatekeeper.sh/cis-k8s-v1.7.1-psp-capabilities   dryrun               0
    

kpt

  1. Instale e configure o kpt. O kpt é usado nestas instruções para personalizar e implementar recursos do Kubernetes.

  2. Transfira o pacote de políticas da CIS do GitHub através do kpt:

    kpt pkg get https://github.com/GoogleCloudPlatform/gke-policy-library.git/anthos-bundles/cis-k8s-v1.7.1
    
  3. Execute a função set-enforcement-action kpt para definir a ação de aplicação das políticas como dryrun:

    kpt fn eval cis-k8s-v1.7.1 -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 monitorizar as alterações:

    cd cis-k8s-v1.7.1
    kpt live init
    
  5. Aplique as restrições de políticas com o kpt:

    kpt live apply
    
  6. Confirme se as restrições de políticas foram instaladas e verifique se existem violações no cluster:

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

    O estado 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 implementar recursos do Kubernetes.

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

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

    cd SYNC_ROOT_DIR
    

    Para criar ou acrescentar .gitignore com resourcegroup.yaml:

    echo resourcegroup.yaml >> .gitignore
    

  2. Crie um diretório policies dedicado:

    mkdir -p policies
    
  3. Transfira o pacote de políticas CIS Kubernetes v1.7.1 do GitHub através do kpt:

    kpt pkg get https://github.com/GoogleCloudPlatform/gke-policy-library.git/anthos-bundles/cis-k8s-v1.7.1 policies/cis-k8s-v1.7.1
    
  4. Execute a função set-enforcement-action kpt para definir a ação de aplicação das políticas como dryrun:

    kpt fn eval policies/cis-k8s-v1.7.1 -i gcr.io/kpt-fn/set-enforcement-action:v0.1 -- enforcementAction=dryrun
    
  5. (Opcional) Pré-visualize as restrições de políticas a serem criadas:

    kpt live init policies/cis-k8s-v1.7.1
    kpt live apply --dry-run policies/cis-k8s-v1.7.1
    
  6. Se o diretório de sincronização do Config Sync usar o Kustomize, adicione policies/cis-k8s-v1.7.1 ao kustomization.yaml raiz. Caso contrário, remova o ficheiro policies/cis-k8s-v1.7.1/kustomization.yaml:

    rm SYNC_ROOT_DIR/policies/cis-k8s-v1.7.1/kustomization.yaml
    
  7. Envie alterações para o repositório do Config Sync:

    git add SYNC_ROOT_DIR/policies/cis-k8s-v1.7.1
    git commit -m 'Adding CIS Kubernetes v1.7.1 policy bundle'
    git push
    
  8. Valide o estado da instalação:

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

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

Veja as violações de políticas

Depois de instaladas no modo de auditoria, as restrições de políticas no cluster podem ser vistas na IU através do painel de controlo do Policy Controller.

Também pode usar kubectl para ver violações no cluster através do seguinte comando:

kubectl get constraint -l policycontroller.gke.io/bundleName=cis-k8s-v1.7.1 -o json | jq -cC '.items[]| [.metadata.name,.status.totalViolations]'

Se existirem violações, pode ver uma lista das mensagens de violação por restrição com o seguinte comando:

kubectl get constraint -l policycontroller.gke.io/bundleName=cis-k8s-v1.7.1 -o json | jq -C '.items[]| select(.status.totalViolations>0)| [.metadata.name,.status.violations[]?]'

Altere a ação de aplicação do pacote de políticas CIS Kubernetes v1.7.1

Depois de rever as violações de políticas no seu cluster, pode considerar alterar o modo de aplicação para que o controlador de admissão warn permita ou até mesmo deny impeça que o recurso não conforme seja aplicado ao cluster.

kubectl

  1. Use o kubectl para definir a ação de aplicação das políticas como warn:

    kubectl get constraint -l policycontroller.gke.io/bundleName=cis-k8s-v1.7.1 -o name | xargs -I {} kubectl patch {} --type='json' -p='[{"op":"replace","path":"/spec/enforcementAction","value":"warn"}]'
    
  2. Verifique se a ação de aplicação das restrições de políticas foi atualizada:

    kubectl get constraints -l policycontroller.gke.io/bundleName=cis-k8s-v1.7.1
    

kpt

  1. Execute a função set-enforcement-action 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 de políticas:

    kpt live apply
    

Config Sync

Os operadores que usam o Config Sync para implementar políticas nos respetivos 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 kpt para definir a ação de aplicação das políticas como warn:

    kpt fn eval policies/cis-k8s-v1.7.1 -i gcr.io/kpt-fn/set-enforcement-action:v0.1 -- enforcementAction=warn
    
  3. Envie alterações para o repositório do Config Sync:

    git add SYNC_ROOT_DIR/policies/cis-k8s-v1.7.1
    git commit -m 'Adding CIS Kubernetes v1.7.1 policy bundle warn enforcement'
    git push
    
  4. Valide o estado da instalação:

    nomos status
    

    O cluster deve apresentar o estado SYNCED com as políticas instaladas.

Teste a aplicação de políticas

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

cat <<EOF | kubectl apply -f -
apiVersion: v1
kind: Pod
metadata:
  namespace: default
  name: wp-non-compliant
  labels:
    app: wordpress
spec:
  containers:
    - image: wordpress
      name: wordpress
      ports:
      - containerPort: 80
        name: wordpress
EOF

O controlador de admissão deve produzir um aviso que liste as violações de políticas que este recurso viola, conforme mostrado no exemplo seguinte:

Warning: [cis-k8s-v1.7.1-restrict-default-namespace] <default> namespace is restricted
Warning: [cis-k8s-v1.7.1-restrict-root-containers] Container wordpress is attempting to run without a required securityContext/runAsNonRoot or securityContext/runAsUser != 0
Warning: [cis-k8s-v1.7.1-restrict-privilege-escalation] Privilege escalation container is not allowed: wordpress
Warning: [cis-k8s-v1.7.1-require-seccomp-default] Seccomp profile 'not configured' is not allowed for container 'wordpress'. Found at: no explicit profile found. Allowed profiles: {"RuntimeDefault", "docker/default", "runtime/default"}
Warning: [cis-k8s-v1.7.1-psp-capabilities] container <wordpress> is not dropping all required capabilities. Container must drop all of ["NET_RAW"] or "ALL"
Warning: [cis-k8s-v1.7.1-require-securitycontext] securityContext must be defined for all Pod containers
pod/wp-non-compliant created

Remova o pacote de políticas CIS Kubernetes v1.7.1

Se necessário, o pacote de políticas CIS Kubernetes v1.7.1 pode ser removido do cluster.

kubectl

Use o kubectl para remover as políticas:

  kubectl delete constraint -l policycontroller.gke.io/bundleName=cis-k8s-v1.7.1
  

kpt

Remova as políticas:

  kpt live destroy
  

Config Sync

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

  1. Envie alterações para o repositório do Config Sync:

    git rm -r SYNC_ROOT_DIR/policies/cis-k8s-v1.7.1
    git commit -m 'Removing CIS Kubernetes v1.7.1 policy bundle'
    git push
    
  2. Valide o estado:

    nomos status
    

    O cluster deve apresentar o estado SYNCED com os recursos removidos.