O Policy Controller inclui uma biblioteca predefinida de modelos de restrições que podem ser usados com o pacote de políticas MITRE para avaliar a conformidade dos recursos do cluster com alguns aspetos da base de conhecimentos MITRE de táticas e técnicas de adversários com base em observações do mundo real.
Esta página contém instruções para aplicar manualmente um pacote de políticas. Em alternativa, pode aplicar pacotes de políticas diretamente.
Restrições do pacote de políticas da MITRE
| Nome da restrição | Descrição da restrição | 
|---|---|
| mitre-v2024-apparmor | Restringe o perfil AppArmorpara os Pods. | 
| mitre-v2024-block-all-ingress | Restringe a criação de objetos Ingress. | 
| mitre-v2024-cronjob-restrict-repos | Restringe as imagens de contentores para CronJoba uma lista de repositórios permitidos. | 
| mitre-v2024-no-anonymous | Não permite associar recursos ClusterRoleeRoleao utilizadorsystem:anonymouse ao gruposystem:unauthenticated. | 
| mitre-v2024-host-namespaces-host-pid-ipc | Os contentores não podem ser executados com hostPIDouhostIPCdefinidos comotrue. | 
| mitre-v2024-host-namespaces-hostnetwork | Não é possível executar contentores com hostNetworkdefinido comotrue. | 
| mitre-v2024-host-ports | HostPortsdeve ser proibido ou, pelo menos, restrito a uma lista conhecida. | 
| mitre-v2024-no-secrets-as-env-vars | Restringe a utilização de segredos como variáveis de ambiente em definições de contentores. | 
| mitre-v2024-privileged-containers | Restringe contentores com securityContext.privilegeddefinido comotrue. | 
| mitre-v2024-proc-mount-type | As máscaras /procpredefinidas reduzem a superfície de ataque e são obrigatórias. | 
| mitre-v2024-require-binauthz | Requer o webhook de admissão de validação da autorização binária. | 
| mitre-v2024-require-namespace-networkpolicy | Requer que todos os namespaces definidos no cluster tenham uma NetworkPolicy. | 
| mitre-v2024-restrict-admission-controller | Restringe a utilização de controladores de admissão dinâmicos e webhooks. | 
| mitre-v2024-restrict-automountserviceaccounttoken | Restringe a utilização de tokens de contas de serviço. | 
| mitre-v2024-restrict-capabilities | Não é permitido adicionar capacidades além das indicadas. | 
| mitre-v2024-restrict-cluster-admin-role | Restringe a utilização da função cluster-admin. | 
| mitre-v2024-restrict-hostpath-volumes | Restringe a utilização de volumes HostPath. | 
| mitre-v2024-restrict-kubernetes-dashboard-namespace | Restringe a utilização do espaço de nomes kubernetes-dashboard. | 
| mitre-v2024-restrict-pods-exec | Restringe a utilização do pods/execnoRolese noClusterRoles. | 
| mitre-v2024-restrict-rbac-subjects | Restringe a utilização de nomes em objetos RBAC a valores permitidos. | 
| mitre-v2024-restrict-repos | Restringe as imagens de contentores a uma reposlista permitida. | 
| mitre-v2024-restrict-role-secrets | Restringe a utilização de segredos em RoleseClusterRoles. | 
| mitre-v2024-restrict-windows-hostprocess | Restringe a execução de contentores / pods HostProcess do Windows | 
| mitre-v2024-seccomp | O perfil do Seccomp não pode estar definido como Unconfined. | 
| mitre-v2024-selinux | Não é possível definir o tipo SELinux nem definir uma opção de utilizador ou função SELinux personalizada. | 
| mitre-v2024-sysctls | Os contentores só podem definir sysctls indicados no campo allowedSysctls. | 
Antes de começar
- Instale e inicialize a CLI do Google Cloud, que fornece os comandos gcloudekubectlusados nestas instruções. Se usar a Cloud Shell, a Google Cloud CLI é pré-instalada.
- Instale o Policy Controller v1.17.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 o Policy Controller para restrições referenciais
- 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: "networking.k8s.io" version: "v1" kind: "NetworkPolicy" - group: "admissionregistration.k8s.io" version: "v1" kind: "ValidatingWebhookConfiguration"
- Aplique o manifesto - policycontroller-config.yaml:- kubectl apply -f policycontroller-config.yaml
Auditoria do pacote de políticas MITRE
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 da MITRE 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 as 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
- (Opcional) Pré-visualize as restrições de políticas com o kubectl: - kubectl kustomize https://github.com/GoogleCloudPlatform/gke-policy-library.git/anthos-bundles/mitre-v2024 
- Aplique as restrições de políticas com o kubectl: - kubectl apply -k https://github.com/GoogleCloudPlatform/gke-policy-library.git/anthos-bundles/mitre-v2024 - O resultado é o seguinte: - k8sallowedrepos.constraints.gatekeeper.sh/mitre-v2024-restrict-repos created k8sblockallingress.constraints.gatekeeper.sh/mitre-v2024-block-all-ingress created k8scronjoballowedrepos.constraints.gatekeeper.sh/mitre-v2024-cronjob-restrict-repos created k8sdisallowanonymous.constraints.gatekeeper.sh/mitre-v2024-no-anonymous created k8snoenvvarsecrets.constraints.gatekeeper.sh/mitre-v2024-no-secrets-as-env-vars created k8spspapparmor.constraints.gatekeeper.sh/mitre-v2024-apparmor created k8spspcapabilities.constraints.gatekeeper.sh/mitre-v2024-restrict-capabilities created k8spspforbiddensysctls.constraints.gatekeeper.sh/mitre-v2024-sysctls created k8spsphostfilesystem.constraints.gatekeeper.sh/mitre-v2024-restrict-hostpath-volumes created k8spsphostnamespace.constraints.gatekeeper.sh/mitre-v2024-host-namespaces-host-pid-ipc created k8spsphostnetworkingports.constraints.gatekeeper.sh/mitre-v2024-host-namespaces-hostnetwork created k8spsphostnetworkingports.constraints.gatekeeper.sh/mitre-v2024-host-ports created k8spspprivilegedcontainer.constraints.gatekeeper.sh/mitre-v2024-privileged-containers created k8spspprocmount.constraints.gatekeeper.sh/mitre-v2024-proc-mount-type created k8spspselinuxv2.constraints.gatekeeper.sh/mitre-v2024-selinux created k8spspseccomp.constraints.gatekeeper.sh/mitre-v2024-seccomp created k8spspwindowshostprocess.constraints.gatekeeper.sh/mitre-v2024-restrict-windows-hostprocess created k8srequirebinauthz.constraints.gatekeeper.sh/mitre-v2024-require-binauthz created k8srequirenamespacenetworkpolicies.constraints.gatekeeper.sh/mitre-v2024-require-namespace-networkpolicy created k8srestrictadmissioncontroller.constraints.gatekeeper.sh/mitre-v2024-restrict-admission-controller created k8srestrictautomountserviceaccounttokens.constraints.gatekeeper.sh/mitre-v2024-restrict-automountserviceaccounttoken created k8srestrictnamespaces.constraints.gatekeeper.sh/mitre-v2024-restrict-kubernetes-dashboard-namespace created k8srestrictrbacsubjects.constraints.gatekeeper.sh/mitre-v2024-restrict-rbac-subjects created k8srestrictrolebindings.constraints.gatekeeper.sh/mitre-v2024-restrict-cluster-admin-role created k8srestrictrolerules.constraints.gatekeeper.sh/mitre-v2024-restrict-pods-exec created k8srestrictrolerules.constraints.gatekeeper.sh/mitre-v2024-restrict-role-secrets created 
- 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=mitre-v2024 - O resultado é semelhante ao seguinte: - NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8sallowedrepos.constraints.gatekeeper.sh/mitre-v2024-restrict-repos dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8sblockallingress.constraints.gatekeeper.sh/mitre-v2024-block-all-ingress dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8scronjoballowedrepos.constraints.gatekeeper.sh/mitre-v2024-cronjob-restrict-repos dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8sdisallowanonymous.constraints.gatekeeper.sh/mitre-v2024-no-anonymous dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8snoenvvarsecrets.constraints.gatekeeper.sh/mitre-v2024-no-secrets-as-env-vars dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8spspapparmor.constraints.gatekeeper.sh/mitre-v2024-apparmor dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8spspcapabilities.constraints.gatekeeper.sh/mitre-v2024-restrict-capabilities dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8spspforbiddensysctls.constraints.gatekeeper.sh/mitre-v2024-sysctls dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8spsphostfilesystem.constraints.gatekeeper.sh/mitre-v2024-restrict-hostpath-volumes dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8spsphostnamespace.constraints.gatekeeper.sh/mitre-v2024-host-namespaces-host-pid-ipc dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8spsphostnetworkingports.constraints.gatekeeper.sh/mitre-v2024-host-namespaces-hostnetwork dryrun 0 k8spsphostnetworkingports.constraints.gatekeeper.sh/mitre-v2024-host-ports dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8spspprivilegedcontainer.constraints.gatekeeper.sh/mitre-v2024-privileged-containers dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8spspprocmount.constraints.gatekeeper.sh/mitre-v2024-proc-mount-type dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8spspseccomp.constraints.gatekeeper.sh/mitre-v2024-seccomp dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8spspselinuxv2.constraints.gatekeeper.sh/mitre-v2024-selinux dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8spspwindowshostprocess.constraints.gatekeeper.sh/mitre-v2024-restrict-windows-hostprocess dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8srequirebinauthz.constraints.gatekeeper.sh/mitre-v2024-require-binauthz dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8srequirenamespacenetworkpolicies.constraints.gatekeeper.sh/mitre-v2024-require-namespace-networkpolicy dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8srestrictadmissioncontroller.constraints.gatekeeper.sh/mitre-v2024-restrict-admission-controller dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8srestrictautomountserviceaccounttokens.constraints.gatekeeper.sh/mitre-v2024-restrict-automountserviceaccounttoken dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8srestrictnamespaces.constraints.gatekeeper.sh/mitre-v2024-restrict-kubernetes-dashboard-namespace dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8srestrictrbacsubjects.constraints.gatekeeper.sh/mitre-v2024-restrict-rbac-subjects dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8srestrictrolebindings.constraints.gatekeeper.sh/mitre-v2024-restrict-cluster-admin-role dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8srestrictrolerules.constraints.gatekeeper.sh/mitre-v2024-restrict-pods-exec dryrun 0 k8srestrictrolerules.constraints.gatekeeper.sh/mitre-v2024-restrict-role-secrets dryrun 0 
kpt
- Instale e configure o kpt. O kpt é usado nestas instruções para personalizar e implementar recursos do Kubernetes. 
- Transfira o pacote de políticas da MITRE do GitHub através do kpt: - kpt pkg get https://github.com/GoogleCloudPlatform/gke-policy-library.git/anthos-bundles/mitre-v2024 
- Execute a função - set-enforcement-actionkpt para definir a ação de aplicação das políticas como- dryrun:- kpt fn eval mitre-v2024 -i gcr.io/kpt-fn/set-enforcement-action:v0.1 \ -- enforcementAction=dryrun 
- Inicialize o diretório de trabalho com o kpt, que cria um recurso para monitorizar as alterações: - cd mitre-v2024 kpt live init 
- Aplique as restrições de políticas com o kpt: - kpt live apply 
- 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 - CURRENTconfirma a instalação bem-sucedida das restrições.
Config Sync
- 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:
- Altere para o diretório de sincronização do Config Sync: - cd SYNC_ROOT_DIR - Para criar ou acrescentar - .gitignorecom- resourcegroup.yaml:- echo resourcegroup.yaml >> .gitignore 
- Crie um diretório - policiesdedicado:- mkdir -p policies 
- Transfira o pacote de políticas da MITRE do GitHub através do kpt: - kpt pkg get https://github.com/GoogleCloudPlatform/gke-policy-library.git/anthos-bundles/mitre-v2024 policies/mitre-v2024 
- Execute a função - set-enforcement-actionkpt para definir a ação de aplicação das políticas como- dryrun:- kpt fn eval policies/mitre-v2024 -i gcr.io/kpt-fn/set-enforcement-action:v0.1 -- enforcementAction=dryrun 
- (Opcional) Pré-visualize as restrições de políticas a serem criadas: - kpt live init policies/mitre-v2024 kpt live apply --dry-run policies/mitre-v2024 
- Se o diretório de sincronização do Config Sync usar o Kustomize, adicione - policies/mitre-v2024ao- kustomization.yamlraiz. Caso contrário, remova o ficheiro- policies/mitre-v2024/kustomization.yaml:- rm SYNC_ROOT_DIR/policies/mitre-v2024/kustomization.yaml 
- Envie alterações para o repositório do Config Sync: - git add SYNC_ROOT_DIR/policies/mitre-v2024 git commit -m 'Adding MITRE policy audit enforcement' git push 
- Valide o estado da instalação: - watch gcloud beta container fleet config-management status --project PROJECT_ID - O estado - SYNCEDconfirma 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=mitre-v2024 -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=mitre-v2024 -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 MITRE
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
- Use o kubectl para definir a ação de aplicação das políticas como - warn:- kubectl get constraint -l policycontroller.gke.io/bundleName=mitre-v2024 -o name | xargs -I {} kubectl patch {} --type='json' -p='[{"op":"replace","path":"/spec/enforcementAction","value":"warn"}]'
- Verifique se a ação de aplicação das restrições de políticas foi atualizada: - kubectl get constraint -l policycontroller.gke.io/bundleName=mitre-v2024 
kpt
- Execute a função - set-enforcement-actionkpt 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 
- 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:
- Altere para o diretório de sincronização do Config Sync: - cd SYNC_ROOT_DIR 
- Execute a função - set-enforcement-actionkpt para definir a ação de aplicação das políticas como- warn:- kpt fn eval policies/mitre-v2024 -i gcr.io/kpt-fn/set-enforcement-action:v0.1 -- enforcementAction=warn 
- Envie alterações para o repositório do Config Sync: - git add SYNC_ROOT_DIR/policies/mitre-v2024 git commit -m 'Adding MITRE policy bundle warn enforcement' git push 
- Valide o estado da instalação: - nomos status - O cluster deve apresentar o estado - SYNCEDcom 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: [mitre-v2024-restrict-repos] container <wordpress> has an invalid image repo <wordpress>, allowed repos are ["gcr.io/gke-release/", "gcr.io/anthos-baremetal-release/", "gcr.io/gke-on-prem-release/", "gcr.io/gke-multi-cloud-release/", "gcr.io/config-management-release/", "gcr.io/kubebuilder/", "gcr.io/gkeconnect/", "gke.gcr.io/"] pod/wp-non-compliant created
Remova o pacote de políticas MITRE
Se necessário, o pacote de políticas MITRE pode ser removido do cluster.
kubectl
- Use o kubectl para remover as políticas: - kubectl delete constraint -l policycontroller.gke.io/bundleName=mitre-v2024 
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:
- Envie alterações para o repositório do Config Sync: - git rm -r SYNC_ROOT_DIR/policies/mitre-v2024 git commit -m 'Removing MITRE policies' git push 
- Valide o estado: - nomos status - O cluster deve apresentar o estado - SYNCEDcom os recursos removidos.