Usar restrições da política do comparativo de mercado do Google Kubernetes Engine CIS v1.5.0

O Controlador de políticas vem com uma biblioteca padrão demodelos de restrição que pode ser usada com o Pacote de políticas da Central para segurança na Internet (CIS) GKE v1.5.0 para auditar a conformidade do cluster do GKE no Google Cloud em relação aos Comparativos de mercado CIS do Google Kubernetes Engine (GKE) v1.5.0. Esse comparativo de mercado é um conjunto de controles de segurança recomendados para configurar o GKE.

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

Esta página é destinada a administradores e operadores de TI que querem usar e manter uma automação para garantir que todos os recursos em execução na plataforma de nuvem cumpram os requisitos de compliance organizacionais. Para saber mais sobre papéis comuns e tarefas de exemplo que mencionamos no conteúdo do Google Cloud , consulte Tarefas e funções de usuário comuns do GKE.

Esse pacote de restrições inclui controles nos seguintes domínios:

  • RBAC e contas de serviço
  • políticas de segurança de pods
  • Políticas de rede e CNI
  • Gerenciamento de secrets
  • Controle de admissão extensível
  • Políticas gerais
  • Serviços gerenciados

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

Nome da restrição Descrição da restrição IDs de controle
cis-gke-v1.5.0-apparmor Restringe o perfil AppArmor para pods. 4.2.1
cis-gke-v1.5.0-restrict-creation-with-default-serviceaccount Restrinja a criação de recursos usando um ServiceAccount padrão. 4.1.5
cis-gke-v1.5.0-restrict-loadbalancer Bloqueia todos os serviços com o tipo LoadBalancer. 5.6.8
cis-gke-v1.5.0-restrict-secrets-of-type-basic-auth Restringe o uso de secrets do tipo de autenticação básica. 4.4.2
cis-gke-v1.5.0-require-binauthz Requer a autorização binária que valida o webhook de admissão. 4.5.1, 5.10.4
cis-gke-v1.5.0-require-cos-node-image Requer o Container-Optimized OS como a 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 contêineres não podem ser executados com um perfil seccomp diferente de runtime/default. 4.6.2
cis-gke-v1.5.0-require-securitycontext Requer que os pods definam securityContext. 4.6.3
cis-gke-v1.5.0-capabilities Não é permitido adicionar recursos além dos listados. 4.2.1
cis-gke-v1.5.0-restrict-cluster-admin-role Restringe o uso do papel cluster-admin. 4.1.1
cis-gke-v1.5.0-restrict-default-namespace Restringe os pods a usarem o Namespace padrão. 4.6.1, 4.6.4
cis-gke-v1.5.0-restrict-env-var-secrets Restringe o uso de secrets como variáveis de ambiente em definições de contêiner. 4.4.1
cis-gke-v1.5.0-host-namespace Restringe contêineres com hostPID ou hostIPC definido 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 contêineres com securityContext.privileged definido como verdadeiro. 4.2.1
cis-gke-v1.5.0-restrict-rbac-subjects Restringe o uso de nomes nos assuntos do RBAC a valores permitidos. 5.8.2
cis-gke-v1.5.0-restrict-role-wildcards Restringe o uso de caracteres curinga em Roles e ClusterRoles. 4.1.3
cis-gke-v1.5.0-restrict-role-secrets Restringe o uso de secrets em Roles e ClusterRoles. 4.1.2
cis-gke-v1.5.0-restrict-automountserviceaccounttoken Restringe o uso de tokens da conta de serviço para pods. 4.1.5, 4.1.6
cis-gke-v1.5.0-selinux Não é possível definir o tipo de SELinux ou uma opção de papel ou usuário personalizado do SELinux. 4.2.1
cis-gke-v1.5.0-host-port HostPorts não deve ser permitido. 4.2.1
cis-gke-v1.5.0-hostpath-volumes Os volumes HostPath precisam ser proibidos. 4.2.1
cis-gke-v1.5.0-hostprocess Os contêineres e pods não podem ser executados com securityContext.windowsOptions.hostProcess definido como true. 4.2.1
cis-gke-v1.5.0-proc-mount-type Os contêineres não podem ser executados com um procMount definido como um valor diferente de Default. 4.2.1
cis-gke-v1.5.0-restrict-bind-escalate-impersonate Restringe o acesso a bind, escalate e impersonate em papéis/clusterroles em Roles e ClusterRoles. 4.1.8
cis-gke-v1.5.0-restrict-certificatesigningrequests-approval A aprovação dos certificados do cliente é restrita. 4.1.11
cis-gke-v1.5.0-restrict-nodes-proxy Restringe o acesso ao subrecurso de proxy dos 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 serviceaccount em Roles e ClusterRoles. 4.1.13
cis-gke-v1.5.0-restrict-system-masters-group Bloqueia o uso 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 Seccomp não pode ser definido como Unconfined. 4.2.1
cis-gke-v1.5.0-sysctls Os contêineres só podem definir sysctls listados no campo allowedSysctls. 4.2.1
cis-gke-v1.5.0-host-namespaces-hostnetwork Os namespaces de host hostNetwork só podem ser false. 4.2.1

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 Controlador de políticas v.1.16.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 para 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: "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 

Configurar o cluster e a carga de trabalho

  1. A ativação e a configuração dos Grupos do Google para 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 em cis-gke-v1.5.0-require-binauthz.

Políticas de auditoria

O Policy Controller permite aplicar políticas ao cluster do Kubernetes. Para ajudar a testar suas cargas de trabalho e a conformidade delas em relação às políticas CIS GKE v1.5.0 descritas na tabela anterior, implante essas restrições no modo "auditoria" para revelar e resolver violações.

É 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/cis-gke-v1.5.0 
  2. Aplique as restrições da política com o kubectl:

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

    A saída é esta:

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

    O resultado será assim:

     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 implantar recursos do Kubernetes.

  2. Faça o download do pacote de políticas do CIS no GitHub usando o 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 do 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 acompanhar as alterações:

     cd cis-gke-v1.5.0 kpt live init 
  5. Aplique as restrições da política com 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:

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

  2. Crie um diretório policies dedicado:

     mkdir -p policies 
  3. Faça o download do pacote de políticas CIS GKE v1.5.0 no GitHub usando o 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 do 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) Visualize as restrições de política 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 Kustomize, adicione policies/cis-gke-v1.5.0 à raiz kustomization.yaml. Caso contrário, remova o arquivo policies/cis-gke-v1.5.0/kustomization.yaml:

     rm SYNC_ROOT_DIR/policies/cis-gke-v1.5.0/kustomization.yaml 
  7. Envie as 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. 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.

Também é possível usar kubectl para visualizar violações no cluster usando o 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 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=cis-gke-v1.5.0 -o json | jq -C '.items[]| select(.status.totalViolations>0)| [.metadata.name,.status.violations[]?]' 

Alterar ação de fiscalização do pacote de políticas CIS GKE v1.5.0

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 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 cumprimento das restrições da política foi atualizada:

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

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/cis-gke-v1.5.0 -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/cis-gke-v1.5.0 git commit -m 'Adding CIS GKE v1.5.0 policy bundle warn enforcement' git push 
  4. Verifique o status da instalação:

     nomos status 

    O cluster vai mostrar um status de SYNCED com as políticas instaladas.

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:   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 produzirá um alerta listando as violações da política que esse recurso viola, conforme mostrado no exemplo a seguir:

 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 

Remover 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 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/cis-gke-v1.5.0 git commit -m 'Removing CIS GKE v1.5.0 policy bundle' git push 
  2. Verifique o status:

     nomos status 

    O cluster vai mostrar o status SYNCED com os recursos removidos.