Use restrições de políticas da norma CIS Google Kubernetes Engine Benchmark v1.5.0

O Policy Controller inclui uma biblioteca predefinida de modelos de restrições que podem ser usados com o pacote de políticas do Center for Internet Security (CIS) GKE v1.5.0 para ajudar a auditar a conformidade do seu cluster do GKE no Google Cloud com os benchmarks do CIS Google Kubernetes Engine (GKE) v1.5.0. Esta referência é um conjunto de controlos de segurança recomendados para configurar o GKE.

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 inclui controlos 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
  • Serviços geridos

Restrições do pacote de políticas CIS GKE v1.5.0

Nome da restrição Descrição da restrição IDs de controlo
cis-gke-v1.5.0-apparmor Restringe o perfil AppArmor para os Pods. 4.2.1
cis-gke-v1.5.0-restrict-creation-with-default-serviceaccount Restrinja a criação de recursos através de um ServiceAccount predefinido. 4.1.5
cis-gke-v1.5.0-restrict-loadbalancer Não permite todos os serviços com o tipo LoadBalancer. 5.6.8
cis-gke-v1.5.0-restrict-secrets-of-type-basic-auth Restringe a utilização de segredos do tipo basic-auth. 4.4.2
cis-gke-v1.5.0-require-binauthz Requer o webhook de admissão de validação da autorização binária. 4.5.1, 5.10.4
cis-gke-v1.5.0-require-cos-node-image Requer o SO otimizado para contentores como imagem do SO do nó. 5.5.1
cis-gke-v1.5.0-require-gke-metadata-server-enabled Requer que o serviço de metadados do GKE esteja ativado em cada nó no cluster. 5.4.2
cis-gke-v1.5.0-require-ingress.class-gce Requer que todos os objetos Ingress tenham uma anotação kubernetes.io/ingress.class: gce. 5.6.8
cis-gke-v1.5.0-require-managed-certificates Requer que todos os objetos Ingress tenham uma anotação networking.gke.io/managed-certificates. 5.6.8
cis-gke-v1.5.0-require-namespace-networkpolicy Requer que cada Namespace definido no cluster tenha um NetworkPolicy. 4.3.2
cis-gke-v1.5.0-require-seccomp-default Os contentores não podem ser executados com um perfil seccomp que não seja runtime/default. 4.6.2
cis-gke-v1.5.0-require-securitycontext Requer que os agrupamentos definam securityContext. 4.6.3
cis-gke-v1.5.0-capabilities Não é permitido adicionar capacidades além das indicadas. 4.2.1
cis-gke-v1.5.0-restrict-cluster-admin-role Restringe a utilização da função cluster-admin. 4.1.1
cis-gke-v1.5.0-restrict-default-namespace Impede que os pods usem o Namespace predefinido. 4.6.1 e 4.6.4
cis-gke-v1.5.0-restrict-env-var-secrets Restringe a utilização de segredos como variáveis de ambiente em definições de contentores. 4.4.1
cis-gke-v1.5.0-host-namespace Restringe contentores com hostPID ou hostIPC definidos como verdadeiro. 4.2.1
cis-gke-v1.5.0-restrict-pods-create Restringe a criação de pods em Roles e ClusterRoles. 4.1.4
cis-gke-v1.5.0-restrict-privileged-containers Restringe contentores com securityContext.privileged definido como verdadeiro. 4.2.1
cis-gke-v1.5.0-restrict-rbac-subjects Restringe a utilização de nomes em objetos RBAC a valores permitidos. 5.8.2
cis-gke-v1.5.0-restrict-role-wildcards Restringe a utilização de carateres universais em Roles e ClusterRoles. 4.1.3
cis-gke-v1.5.0-restrict-role-secrets Restringe a utilização de segredos em Roles e ClusterRoles. 4.1.2
cis-gke-v1.5.0-restrict-automountserviceaccounttoken Restringe a utilização de tokens de contas de serviço para pods. 4.1.5, 4.1.6
cis-gke-v1.5.0-selinux Não é possível definir o tipo SELinux nem definir uma opção de utilizador ou função SELinux personalizada. 4.2.1
cis-gke-v1.5.0-host-port HostPorts deve ser proibido. 4.2.1
cis-gke-v1.5.0-hostpath-volumes Os HostPath volumes têm de ser proibidos. 4.2.1
cis-gke-v1.5.0-hostprocess Não é possível executar contentores e pods com securityContext.windowsOptions.hostProcess definido como true. 4.2.1
cis-gke-v1.5.0-proc-mount-type Os contentores não podem ser executados com um procMount definido para um valor diferente de Default. 4.2.1
cis-gke-v1.5.0-restrict-bind-escalate-impersonate Restringe o acesso à associação, à escalada e à representação em funções/funções de cluster em Roles e ClusterRoles. 4.1.8
cis-gke-v1.5.0-restrict-certificatesigningrequests-approval A aprovação dos certificados de cliente está restrita. 4.1.11
cis-gke-v1.5.0-restrict-nodes-proxy Restringe o acesso ao sub-recurso de proxy de nós em Roles e ClusterRoles. 4.1.10
cis-gke-v1.5.0-restrict-persistent-volume Restringe a criação de persistentvolumes em Roles e ClusterRoles. 4.1.9
cis-gke-v1.5.0-restrict-serviceaccounts-token Restringe a criação de tokens de contas de serviço no Roles e no ClusterRoles. 4.1.13
cis-gke-v1.5.0-restrict-system-masters-group Não permite a utilização do grupo system:masters. 5.1.7
cis-gke-v1.5.0-restrict-system-masters-group Restringe o acesso a objetos de configuração de webhook em Roles e ClusterRoles. 4.1.12
cis-gke-v1.5.0-seccomp O perfil do Seccomp não pode estar definido como Unconfined. 4.2.1
cis-gke-v1.5.0-sysctls Os contentores só podem definir sysctls indicados no campo allowedSysctls. 4.2.1
cis-gke-v1.5.0-host-namespaces-hostnetwork Os espaços de nomes do anfitrião hostNetwork só podem ser false. 4.2.1

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 v1.16.2 ou superior 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 dos Grupos Google para o RBAC são necessárias em cis-gke-v1.5.0-restrict-rbac-subjects.
  2. A ativação e a configuração da autorização binária são necessárias no cis-gke-v1.5.0-require-binauthz.

Políticas de auditoria

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 GKE v1.5.0 descritas na tabela anterior, pode implementar estas restrições no modo de "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-gke-v1.5.0
    
  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-gke-v1.5.0
    

    O resultado é o seguinte:

    k8savoiduseofsystemmastersgroup.constraints.gatekeeper.sh/cis-gke-v1.5.0-restrict-system-masters-group created
    k8sblockcreationwithdefaultserviceaccount.constraints.gatekeeper.sh/cis-gke-v1.5.0-restrict-creation-with-default-serviceaccount created
    k8sblockloadbalancer.constraints.gatekeeper.sh/cis-gke-v1.5.0-restrict-loadbalancer created
    k8sblockobjectsoftype.constraints.gatekeeper.sh/cis-gke-v1.5.0-restrict-secrets-of-type-basic-auth created
    k8snoenvvarsecrets.constraints.gatekeeper.sh/cis-gke-v1.5.0-restrict-env-var-secrets created
    k8spspapparmor.constraints.gatekeeper.sh/cis-gke-v1.5.0-apparmor created
    k8spspcapabilities.constraints.gatekeeper.sh/cis-gke-v1.5.0-capabilities created
    k8spspforbiddensysctls.constraints.gatekeeper.sh/cis-gke-v1.5.0-sysctls created
    k8spsphostfilesystem.constraints.gatekeeper.sh/cis-gke-v1.5.0-hostpath-volumes created
    k8spsphostnamespace.constraints.gatekeeper.sh/cis-gke-v1.5.0-host-namespace created
    k8spsphostnetworkingports.constraints.gatekeeper.sh/cis-gke-v1.5.0-host-port created
    k8spspprivilegedcontainer.constraints.gatekeeper.sh/cis-gke-v1.5.0-privileged-containers created
    k8spspprocmount.constraints.gatekeeper.sh/cis-gke-v1.5.0-proc-mount-type created
    k8spspselinuxv2.constraints.gatekeeper.sh/cis-gke-v1.5.0-selinux created
    k8spspseccomp.constraints.gatekeeper.sh/cis-gke-v1.5.0-require-seccomp-default created
    k8spspseccomp.constraints.gatekeeper.sh/cis-gke-v1.5.0-seccomp created
    k8spspwindowshostprocess.constraints.gatekeeper.sh/cis-gke-v1.5.0-hostprocess created
    k8spodsrequiresecuritycontext.constraints.gatekeeper.sh/cis-gke-v1.5.0-require-securitycontext created
    k8sprohibitrolewildcardaccess.constraints.gatekeeper.sh/cis-gke-v1.5.0-restrict-role-wildcards created
    k8srequirebinauthz.constraints.gatekeeper.sh/cis-gke-v1.5.0-require-binauthz created
    k8srequirecosnodeimage.constraints.gatekeeper.sh/cis-gke-v1.5.0-require-cos-node-image created
    k8srequirenamespacenetworkpolicies.constraints.gatekeeper.sh/cis-gke-v1.5.0-require-namespace-networkpolicy created
    k8srequiredannotations.constraints.gatekeeper.sh/cis-gke-v1.5.0-require-ingress.class-gce created
    k8srequiredannotations.constraints.gatekeeper.sh/cis-gke-v1.5.0-require-managed-certificates created
    k8srequiredlabels.constraints.gatekeeper.sh/cis-gke-v1.5.0-require-gke-metadata-server-enabled created
    k8srestrictautomountserviceaccounttokens.constraints.gatekeeper.sh/cis-gke-v1.5.0-restrict-automountserviceaccounttoken created
    k8srestrictnamespaces.constraints.gatekeeper.sh/cis-gke-v1.5.0-restrict-default-namespace created
    k8srestrictrbacsubjects.constraints.gatekeeper.sh/cis-gke-v1.5.0-restrict-rbac-subjects created
    k8srestrictrolebindings.constraints.gatekeeper.sh/cis-gke-v1.5.0-restrict-cluster-admin-role created
    k8srestrictrolerules.constraints.gatekeeper.sh/cis-gke-v1.5.0-restrict-bind-escalate-impersonate created
    k8srestrictrolerules.constraints.gatekeeper.sh/cis-gke-v1.5.0-restrict-certificatesigningrequests-approval created
    k8srestrictrolerules.constraints.gatekeeper.sh/cis-gke-v1.5.0-restrict-nodes-proxy created
    k8srestrictrolerules.constraints.gatekeeper.sh/cis-gke-v1.5.0-restrict-persistent-volume created
    k8srestrictrolerules.constraints.gatekeeper.sh/cis-gke-v1.5.0-restrict-pods-create created
    k8srestrictrolerules.constraints.gatekeeper.sh/cis-gke-v1.5.0-restrict-role-secrets created
    k8srestrictrolerules.constraints.gatekeeper.sh/cis-gke-v1.5.0-restrict-serviceaccounts-token created
    k8srestrictrolerules.constraints.gatekeeper.sh/cis-gke-v1.5.0-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-gke-v1.5.0
    

    O resultado é semelhante ao seguinte:

    NAME                                                                                                     ENFORCEMENT-ACTION   TOTAL-VIOLATIONS
    k8savoiduseofsystemmastersgroup.constraints.gatekeeper.sh/cis-gke-v1.5.0-restrict-system-masters-group   dryrun               0
    
    NAME                                                                                                                               ENFORCEMENT-ACTION   TOTAL-VIOLATIONS
    k8sblockcreationwithdefaultserviceaccount.constraints.gatekeeper.sh/cis-gke-v1.5.0-restrict-creation-with-default-serviceaccount   dryrun               0
    
    NAME                                                                                  ENFORCEMENT-ACTION   TOTAL-VIOLATIONS
    k8sblockloadbalancer.constraints.gatekeeper.sh/cis-gke-v1.5.0-restrict-loadbalancer   dryrun               0
    
    NAME                                                                                                 ENFORCEMENT-ACTION   TOTAL-VIOLATIONS
    k8sblockobjectsoftype.constraints.gatekeeper.sh/cis-gke-v1.5.0-restrict-secrets-of-type-basic-auth   dryrun               0
    
    NAME                                                                                   ENFORCEMENT-ACTION   TOTAL-VIOLATIONS
    k8snoenvvarsecrets.constraints.gatekeeper.sh/cis-gke-v1.5.0-restrict-env-var-secrets   dryrun               0
    
    NAME                                                                                             ENFORCEMENT-ACTION   TOTAL-VIOLATIONS
    k8spodsrequiresecuritycontext.constraints.gatekeeper.sh/cis-gke-v1.5.0-require-securitycontext   dryrun               0
    
    NAME                                                                                             ENFORCEMENT-ACTION   TOTAL-VIOLATIONS
    k8sprohibitrolewildcardaccess.constraints.gatekeeper.sh/cis-gke-v1.5.0-restrict-role-wildcards   dryrun               0
    
    NAME                                                               ENFORCEMENT-ACTION   TOTAL-VIOLATIONS
    k8spspapparmor.constraints.gatekeeper.sh/cis-gke-v1.5.0-apparmor   dryrun               0
    
    NAME                                                                       ENFORCEMENT-ACTION   TOTAL-VIOLATIONS
    k8spspcapabilities.constraints.gatekeeper.sh/cis-gke-v1.5.0-capabilities   dryrun               0
    
    NAME                                                                      ENFORCEMENT-ACTION   TOTAL-VIOLATIONS
    k8spspforbiddensysctls.constraints.gatekeeper.sh/cis-gke-v1.5.0-sysctls   dryrun               0
    
    NAME                                                                             ENFORCEMENT-ACTION   TOTAL-VIOLATIONS
    k8spsphostfilesystem.constraints.gatekeeper.sh/cis-gke-v1.5.0-hostpath-volumes   dryrun               0
    
    NAME                                                                          ENFORCEMENT-ACTION   TOTAL-VIOLATIONS
    k8spsphostnamespace.constraints.gatekeeper.sh/cis-gke-v1.5.0-host-namespace   dryrun               0
    
    NAME                                                                           ENFORCEMENT-ACTION   TOTAL-VIOLATIONS
    k8spsphostnetworkingports.constraints.gatekeeper.sh/cis-gke-v1.5.0-host-port   dryrun               0
    
    NAME                                                                                       ENFORCEMENT-ACTION   TOTAL-VIOLATIONS
    k8spspprivilegedcontainer.constraints.gatekeeper.sh/cis-gke-v1.5.0-privileged-containers   dryrun               0
    
    NAME                                                                       ENFORCEMENT-ACTION   TOTAL-VIOLATIONS
    k8spspprocmount.constraints.gatekeeper.sh/cis-gke-v1.5.0-proc-mount-type   dryrun               0
    
    NAME                                                                             ENFORCEMENT-ACTION   TOTAL-VIOLATIONS
    k8spspseccomp.constraints.gatekeeper.sh/cis-gke-v1.5.0-require-seccomp-default   dryrun               0
    k8spspseccomp.constraints.gatekeeper.sh/cis-gke-v1.5.0-seccomp                   dryrun               0
    
    NAME                                                               ENFORCEMENT-ACTION   TOTAL-VIOLATIONS
    k8spspselinuxv2.constraints.gatekeeper.sh/cis-gke-v1.5.0-selinux   dryrun               0
    
    NAME                                                                            ENFORCEMENT-ACTION   TOTAL-VIOLATIONS
    k8spspwindowshostprocess.constraints.gatekeeper.sh/cis-gke-v1.5.0-hostprocess   dryrun               0
    
    NAME                                                                           ENFORCEMENT-ACTION   TOTAL-VIOLATIONS
    k8srequirebinauthz.constraints.gatekeeper.sh/cis-gke-v1.5.0-require-binauthz   dryrun               0
    
    NAME                                                                                     ENFORCEMENT-ACTION   TOTAL-VIOLATIONS
    k8srequirecosnodeimage.constraints.gatekeeper.sh/cis-gke-v1.5.0-require-cos-node-image   dryrun               0
    
    NAME                                                                                           ENFORCEMENT-ACTION   TOTAL-VIOLATIONS
    k8srequiredannotations.constraints.gatekeeper.sh/cis-gke-v1.5.0-require-ingress.class-gce      dryrun               0
    k8srequiredannotations.constraints.gatekeeper.sh/cis-gke-v1.5.0-require-managed-certificates   dryrun               0
    
    NAME                                                                                             ENFORCEMENT-ACTION   TOTAL-VIOLATIONS
    k8srequiredlabels.constraints.gatekeeper.sh/cis-gke-v1.5.0-require-gke-metadata-server-enabled   dryrun               0
    
    NAME                                                                                                          ENFORCEMENT-ACTION   TOTAL-VIOLATIONS
    k8srequirenamespacenetworkpolicies.constraints.gatekeeper.sh/cis-gke-v1.5.0-require-namespace-networkpolicy   dryrun               0
    
    NAME                                                                                                                      ENFORCEMENT-ACTION   TOTAL-VIOLATIONS
    k8srestrictautomountserviceaccounttokens.constraints.gatekeeper.sh/cis-gke-v1.5.0-restrict-automountserviceaccounttoken   dryrun               0
    
    NAME                                                                                        ENFORCEMENT-ACTION   TOTAL-VIOLATIONS
    k8srestrictnamespaces.constraints.gatekeeper.sh/cis-gke-v1.5.0-restrict-default-namespace   dryrun               0
    
    NAME                                                                                      ENFORCEMENT-ACTION   TOTAL-VIOLATIONS
    k8srestrictrbacsubjects.constraints.gatekeeper.sh/cis-gke-v1.5.0-restrict-rbac-subjects   dryrun               0
    
    NAME                                                                                           ENFORCEMENT-ACTION   TOTAL-VIOLATIONS
    k8srestrictrolebindings.constraints.gatekeeper.sh/cis-gke-v1.5.0-restrict-cluster-admin-role   dryrun               0
    
    NAME                                                                                                         ENFORCEMENT-ACTION   TOTAL-VIOLATIONS
    k8srestrictrolerules.constraints.gatekeeper.sh/cis-gke-v1.5.0-restrict-bind-escalate-impersonate             dryrun               0
    k8srestrictrolerules.constraints.gatekeeper.sh/cis-gke-v1.5.0-restrict-certificatesigningrequests-approval   dryrun               0
    k8srestrictrolerules.constraints.gatekeeper.sh/cis-gke-v1.5.0-restrict-nodes-proxy                           dryrun               0
    k8srestrictrolerules.constraints.gatekeeper.sh/cis-gke-v1.5.0-restrict-persistent-volume                     dryrun               0
    k8srestrictrolerules.constraints.gatekeeper.sh/cis-gke-v1.5.0-restrict-pods-create                           dryrun               0
    k8srestrictrolerules.constraints.gatekeeper.sh/cis-gke-v1.5.0-restrict-role-secrets                          dryrun               0
    k8srestrictrolerules.constraints.gatekeeper.sh/cis-gke-v1.5.0-restrict-serviceaccounts-token                 dryrun               0
    k8srestrictrolerules.constraints.gatekeeper.sh/cis-gke-v1.5.0-restrict-webhook-config                        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-gke-v1.5.0
    
  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-gke-v1.5.0 -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-gke-v1.5.0
    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 GKE v1.5.0 do GitHub através do kpt:

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

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

    git add SYNC_ROOT_DIR/policies/cis-gke-v1.5.0
    git commit -m 'Adding CIS GKE v1.5.0 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-gke-v1.5.0 -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-gke-v1.5.0 -o json | jq -C '.items[]| select(.status.totalViolations>0)| [.metadata.name,.status.violations[]?]'

Alteração da ação de aplicação do pacote de políticas CIS GKE v1.5.0

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-gke-v1.5.0 -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-gke-v1.5.0
    

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-gke-v1.5.0 -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-gke-v1.5.0
    git commit -m 'Adding CIS GKE v1.5.0 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-gke-v1.5.0-restrict-default-namespace] <default> namespace is restricted
Warning: [cis-gke-v1.5.0-require-seccomp-default] Seccomp profile 'not configured' is not allowed for container 'wordpress'. Found at: no explicit profile found. Allowed profiles: {"RuntimeDefault", "runtime/default"}
Warning: [cis-gke-v1.5.0-require-securitycontext] securityContext must be defined for all Pod containers
pod/wp-non-compliant configured

Remova o pacote de políticas CIS GKE v1.5.0

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

kubectl

Use o kubectl para remover as políticas:

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

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-gke-v1.5.0
    git commit -m 'Removing CIS GKE v1.5.0 policy bundle'
    git push
    
  2. Valide o estado:

    nomos status
    

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