Restrições de políticas essenciais de políticas de utilização v2022

O Policy Controller inclui uma biblioteca predefinida de modelos de restrições que podem ser usados com o pacote Policy Essentials v2022 para aplicar as práticas recomendadas da Google aos recursos do cluster.

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
  • Interface de rede de contentores (CNI)
  • Gestão de segredos
  • Políticas gerais

Restrições do pacote de políticas essenciais

Nome da restrição Descrição da restrição
policy-essentials-v2022-no-secrets-as-env-vars Prefira usar Secrets como ficheiros em vez de Secrets como variáveis de ambiente
policy-essentials-v2022-pods-require-security-context Aplique o contexto de segurança aos seus pods e contentores
policy-essentials-v2022-prohibit-role-wildcard-access Minimize a utilização de carateres universais em Roles e ClusterRoles.
policy-essentials-v2022-psp-allow-privilege-escalation-container Minimize a admissão de contentores com allowPrivilegeEscalation
policy-essentials-v2022-psp-capabilities Os contentores têm de remover a capacidade `NET_RAW` e não podem adicionar novamente capacidades.
policy-essentials-v2022-psp-host-namespace Minimize a admissão de contentores com `hostPID` ou `hostIPC` definidos como `true`.
policy-essentials-v2022-psp-host-network-ports Minimize a admissão de contentores que pretendam partilhar o espaço de nomes da rede do anfitrião
policy-essentials-v2022-psp-privileged-container Minimize a admissão de contentores privilegiados
policy-essentials-v2022-psp-pods-must-run-as-nonroot Minimize a admissão de contentores principais
policy-essentials-v2022-psp-seccomp-default Certifique-se de que o perfil seccomp está definido como `runtime/default` ou `docker/default` nas definições do seu pod
policy-essentials-v2022-restrict-clusteradmin-rolebindings Minimize a utilização da função cluster-admin.

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.14.3 ou superior no seu cluster com a biblioteca predefinida de modelos de restrições.

Pacote de políticas Audit Policy Essentials

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 relativamente às práticas recomendadas da Google descritas na tabela anterior, pode implementar estas restrições no modo "auditoria" para revelar violações e, mais importante, dar-se a oportunidade de as corrigir antes de aplicar no seu cluster do Kubernetes.

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/bundles/policy-essentials-v2022 
  2. Aplique as restrições de políticas com o kubectl:

     kubectl apply -k https://github.com/GoogleCloudPlatform/gke-policy-library.git/bundles/policy-essentials-v2022 

    O resultado é o seguinte:

     k8snoenvvarsecrets.constraints.gatekeeper.sh/policy-essentials-v2022-no-secrets-as-env-vars created k8spspallowprivilegeescalationcontainer.constraints.gatekeeper.sh/policy-essentials-v2022-psp-allow-privilege-escalation created k8spspallowedusers.constraints.gatekeeper.sh/policy-essentials-v2022-psp-pods-must-run-as-nonroot created k8spspcapabilities.constraints.gatekeeper.sh/policy-essentials-v2022-psp-capabilities created k8spsphostnamespace.constraints.gatekeeper.sh/policy-essentials-v2022-psp-host-namespace created k8spsphostnetworkingports.constraints.gatekeeper.sh/policy-essentials-v2022-psp-host-network-ports created k8spspprivilegedcontainer.constraints.gatekeeper.sh/policy-essentials-v2022-psp-privileged-container created k8spspseccomp.constraints.gatekeeper.sh/policy-essentials-v2022-psp-seccomp-default created k8spodsrequiresecuritycontext.constraints.gatekeeper.sh/policy-essentials-v2022-pods-require-security-context created k8sprohibitrolewildcardaccess.constraints.gatekeeper.sh/policy-essentials-v2022-prohibit-role-wildcard-access created k8srestrictrolebindings.constraints.gatekeeper.sh/policy-essentials-v2022-restrict-clusteradmin-rolebindings created 
  3. Confirme se as restrições de políticas foram instaladas e verifique se existem violações no cluster:

     kubectl get -k https://github.com/GoogleCloudPlatform/gke-policy-library.git/bundles/policy-essentials-v2022 

    O resultado é semelhante ao seguinte:

     NAME                                                                                          ENFORCEMENT-ACTION   TOTAL-VIOLATIONS k8snoenvvarsecrets.constraints.gatekeeper.sh/policy-essentials-v2022-no-secrets-as-env-vars   dryrun               0  NAME                                                                                                                       ENFORCEMENT-ACTION   TOTAL-VIOLATIONS k8spspallowprivilegeescalationcontainer.constraints.gatekeeper.sh/policy-essentials-v2022-psp-allow-privilege-escalation   dryrun               0  NAME                                                                                                ENFORCEMENT-ACTION   TOTAL-VIOLATIONS k8spspallowedusers.constraints.gatekeeper.sh/policy-essentials-v2022-psp-pods-must-run-as-nonroot   dryrun               0  NAME                                                                                    ENFORCEMENT-ACTION   TOTAL-VIOLATIONS k8spspcapabilities.constraints.gatekeeper.sh/policy-essentials-v2022-psp-capabilities   dryrun               0  NAME                                                                                       ENFORCEMENT-ACTION   TOTAL-VIOLATIONS k8spsphostnamespace.constraints.gatekeeper.sh/policy-essentials-v2022-psp-host-namespace   dryrun               0  NAME                                                                                                 ENFORCEMENT-ACTION   TOTAL-VIOLATIONS k8spsphostnetworkingports.constraints.gatekeeper.sh/policy-essentials-v2022-psp-host-network-ports   dryrun               0  NAME                                                                                                   ENFORCEMENT-ACTION   TOTAL-VIOLATIONS k8spspprivilegedcontainer.constraints.gatekeeper.sh/policy-essentials-v2022-psp-privileged-container   dryrun               0  NAME                                                                                  ENFORCEMENT-ACTION   TOTAL-VIOLATIONS k8spspseccomp.constraints.gatekeeper.sh/policy-essentials-v2022-psp-seccomp-default   dryrun               0  NAME                                                                                                            ENFORCEMENT-ACTION   TOTAL-VIOLATIONS k8spodsrequiresecuritycontext.constraints.gatekeeper.sh/policy-essentials-v2022-pods-require-security-context   dryrun               0  NAME                                                                                                            ENFORCEMENT-ACTION   TOTAL-VIOLATIONS k8sprohibitrolewildcardaccess.constraints.gatekeeper.sh/policy-essentials-v2022-prohibit-role-wildcard-access   dryrun               0  NAME                                                                                                           ENFORCEMENT-ACTION   TOTAL-VIOLATIONS k8srestrictrolebindings.constraints.gatekeeper.sh/policy-essentials-v2022-restrict-clusteradmin-rolebindings   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 Policy Essentials v2022 do GitHub através do kpt:

     kpt pkg get https://github.com/GoogleCloudPlatform/gke-policy-library.git/bundles/policy-essentials-v2022 
  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 policy-essentials-v2022 -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 policy-essentials-v2022 kpt live init 
  5. Aplique as restrições de políticas com o kpt:

     kpt live apply 

    O resultado é o seguinte:

     k8spspseccomp.constraints.gatekeeper.sh/policy-essentials-v2022-psp-seccomp-docker-default created k8spodsrequiresecuritycontext.constraints.gatekeeper.sh/policy-essentials-v2022-pods-require-security-context created k8sprohibitrolewildcardaccess.constraints.gatekeeper.sh/policy-essentials-v2022-prohibit-role-wildcard-access created k8snoenvvarsecrets.constraints.gatekeeper.sh/policy-essentials-v2022-no-secrets-as-env-vars created k8spspallowprivilegeescalationcontainer.constraints.gatekeeper.sh/policy-essentials-v2022-psp-allow-privilege-escalation-container created k8spspallowedusers.constraints.gatekeeper.sh/policy-essentials-v2022-psp-pods-must-run-as-nonroot created k8spsphostnetworkingports.constraints.gatekeeper.sh/policy-essentials-v2022-psp-host-network-ports created k8srestrictrolebindings.constraints.gatekeeper.sh/policy-essentials-v2022-restrict-clusteradmin-rolebindings created k8spspcapabilities.constraints.gatekeeper.sh/policy-essentials-v2022-psp-capabilities created k8spsphostnamespace.constraints.gatekeeper.sh/policy-essentials-v2022-psp-host-namespace created k8spspprivilegedcontainer.constraints.gatekeeper.sh/policy-essentials-v2022-psp-privileged-container created 11 resource(s) applied. 11 created, 0 unchanged, 0 configured, 0 failed 
  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 Policy Essentials v2022 do GitHub através do kpt:

     kpt pkg get https://github.com/GoogleCloudPlatform/gke-policy-library.git/bundles/policy-essentials-v2022 policies/policy-essentials-v2022 
  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/policy-essentials-v2022 -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/policy-essentials-v2022 kpt live apply --dry-run policies/policy-essentials-v2022 

    O resultado é o seguinte:

     Dry-run strategy: client inventory update started inventory update finished apply phase started k8snoenvvarsecrets.constraints.gatekeeper.sh/policy-essentials-v2022-no-secrets-as-env-vars apply successful k8spspallowprivilegeescalationcontainer.constraints.gatekeeper.sh/policy-essentials-v2022-psp-allow-privilege-escalation apply successful k8spspallowedusers.constraints.gatekeeper.sh/policy-essentials-v2022-psp-pods-must-run-as-nonroot apply successful k8spspcapabilities.constraints.gatekeeper.sh/policy-essentials-v2022-psp-capabilities apply successful k8spsphostnamespace.constraints.gatekeeper.sh/policy-essentials-v2022-psp-host-namespace apply successful k8spsphostnetworkingports.constraints.gatekeeper.sh/policy-essentials-v2022-psp-host-network-ports apply successful k8spspprivilegedcontainer.constraints.gatekeeper.sh/policy-essentials-v2022-psp-privileged-container apply successful k8spspseccomp.constraints.gatekeeper.sh/policy-essentials-v2022-psp-seccomp-default apply successful k8spodsrequiresecuritycontext.constraints.gatekeeper.sh/policy-essentials-v2022-pods-require-security-context apply successful k8sprohibitrolewildcardaccess.constraints.gatekeeper.sh/policy-essentials-v2022-prohibit-role-wildcard-access apply successful k8srestrictrolebindings.constraints.gatekeeper.sh/policy-essentials-v2022-restrict-clusteradmin-rolebindings apply successful apply phase finished inventory update started inventory update finished apply result: 11 attempted, 11 successful, 0 skipped, 0 failed 
  6. Se o diretório de sincronização do Config Sync usar o Kustomize, adicione policies/policy-essentials-v2022 ao kustomization.yaml raiz. Caso contrário, remova o ficheiro policies/policy-essentials-v2022/kustomization.yaml:

     rm SYNC_ROOT_DIR/policies/policy-essentials-v2022/kustomization.yaml 
  7. Envie as alterações para o repositório do Config Sync:

     git add SYNC_ROOT_DIR/policy-essentials-v2022 git commit -m 'Adding Policy Essentials v2022 policy audit enforcement' 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 as violações no cluster através do seguinte comando:

 kubectl get constraint -l policycontroller.gke.io/bundleName=policy-essentials-v2022 -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=policy-essentials-v2022 -o json | jq -C '.items[]| select(.status.totalViolations>0)| [.metadata.name,.status.violations[]?]' 

Altere a ação de aplicação do conjunto de políticas Policy Essentials

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=policy-essentials-v2022 -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 constraint -l policycontroller.gke.io/bundleName=policy-essentials-v2022 

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/policy-essentials-v2022 -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/policy-essentials-v2022 git commit -m 'Adding Policy Essentials 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: [policy-essentials-v2022-psp-capabilities] container <wordpress> is not dropping all required capabilities. Container must drop all of ["NET_RAW"] or "ALL" pod/wp-non-compliant created 

Remova o pacote de políticas Policy Essentials

Se necessário, o pacote de políticas Policy Essentials pode ser removido do cluster.

kubectl

  • Use o kubectl para remover as políticas:

     kubectl delete constraint -l policycontroller.gke.io/bundleName=policy-essentials-v2022 

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 as alterações para o repositório do Config Sync:

     git rm -r SYNC_ROOT_DIR/policies/policy-essentials-v2022 git commit -m 'Removing Policy Essentials v2022 policies' git push 
  2. Valide o estado:

     nomos status 

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