O Policy Controller inclui uma biblioteca predefinida de modelos de restrições que podem ser usados com o pacote NIST SP 800-190 que implementa controlos indicados na Publicação especial (SP) 800-190 do Instituto Nacional de Padrões e Tecnologia (NIST), guia de segurança de contentores de aplicações. O pacote destina-se a ajudar as organizações com a segurança de contentores de aplicações, incluindo a segurança de imagens, a segurança do tempo de execução de contentores, a segurança de redes e a segurança do sistema anfitrião, entre outros.
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.
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 conjunto de políticas NIST SP 800-190
Nome da restrição | Descrição da restrição | ID do controlo |
---|---|---|
nist-sp-800-190-restrict-rbac-subjects | Restringe a utilização de nomes em objetos RBAC a valores permitidos. | AC-2 Gestão de contas |
nist-sp-800-190-restrict-rbac-subjects | Restringe a utilização de nomes em objetos RBAC a valores permitidos. | Aplicação do acesso AC-3 |
nist-sp-800-190-block-secrets-of-type-basic-auth | Restringe a utilização de segredos do tipo basic-auth. | Aplicação do fluxo de informações AC-4 |
nist-sp-800-190-require-binauthz | Requer o webhook de admissão de validação da autorização binária. | |
nist-sp-800-190-require-namespace-network-policies | Requer que todos os namespaces definidos no cluster tenham uma NetworkPolicy. | |
nist-sp-800-190-restrict-hostpath-volumes | Restringe a utilização de volumes HostPath. | |
nist-sp-800-190-require-binauthz | Requer o webhook de admissão de validação da autorização binária. | AC-6 Menor privilégio |
nist-sp-800-190-restrict-clusteradmin-rolebindings | Restringe a utilização da função `cluster-admin`. | |
nist-sp-800-190-restrict-repos | Restringe as imagens de contentores a uma lista de repositórios permitidos. | |
nist-sp-800-190-restrict-role-wildcards | Restringe a utilização de carateres universais em `Roles` e `ClusterRoles`. | |
nist-sp-800-190-nodes-have-consistent-time | Garante uma hora consistente e correta nos nós, permitindo apenas o SO otimizado para contentores(COS) ou o Ubuntu como imagem do SO. | Indicações de tempo AU-8 |
nist-sp-800-190-require-namespace-network-policies | Requer que todos os namespaces definidos no cluster tenham uma NetworkPolicy. | CA-9 Internal System Connections |
nist-sp-800-190-enforce-config-management | Requer que o Config Sync esteja em execução e a prevenção de desvio ativada com, pelo menos, um objeto `RootSync` no cluster. | Configuração de referência CM-2 |
nist-sp-800-190-require-managed-by-label | Requer que todas as apps tenham uma etiqueta `app.kubernetes.io/managed-by` válida. | |
nist-sp-800-190-apparmor | Restringe os perfis do AppArmor permitidos para pods. | CM-3 Configuration Change Control |
nist-sp-800-190-block-secrets-of-type-basic-auth | Restringe a utilização de segredos do tipo basic-auth. | |
nist-sp-800-190-capabilities | Restringe as capacidades adicionais permitidas para os agrupamentos. | |
nist-sp-800-190-enforce-config-management | Requer que o Config Sync esteja em execução e a prevenção de desvio ativada com, pelo menos, um objeto `RootSync` no cluster. | |
nist-sp-800-190-host-namespaces | Restringe contentores com `hostPID` ou `hostIPC` definidos como `true`. | |
nist-sp-800-190-host-network | Restringe a execução de contentores com a flag `hostNetwork` definida como `true`. | |
nist-sp-800-190-privileged-containers | Restringe contentores com `securityContext.privileged` definido como `true`. | |
nist-sp-800-190-proc-mount-type | Requer as máscaras `/proc` predefinidas para pods | |
nist-sp-800-190-require-managed-by-label | Requer que todas as apps tenham uma etiqueta `app.kubernetes.io/managed-by` válida. | |
nist-sp-800-190-restrict-hostpath-volumes | Restringe a utilização de volumes HostPath. | |
nist-sp-800-190-restrict-volume-types | Restringe os tipos de volumes montáveis à lista de autorizações. | |
nist-sp-800-190-seccomp | O perfil do Seccomp não pode ser explicitamente definido como "Unconfined". | |
nist-sp-800-190-selinux | Restringe a configuração do SELinux para pods. | |
nist-sp-800-190-sysctls | Restringe os Sysctls permitidos para pods. | |
nist-sp-800-190-enforce-config-management | Requer que o Config Sync esteja em execução e a prevenção de desvio ativada com, pelo menos, um objeto `RootSync` no cluster. | CM-4 Análise de impacto na segurança |
nist-sp-800-190-require-managed-by-label | Requer que todas as apps tenham uma etiqueta `app.kubernetes.io/managed-by` válida. | |
nist-sp-800-190-restrict-clusteradmin-rolebindings | Restringe a utilização da função `cluster-admin`. | |
nist-sp-800-190-enforce-config-management | Requer que o Config Sync esteja em execução e a prevenção de desvio ativada com, pelo menos, um objeto `RootSync` no cluster. | CM-5 Restrições de acesso para alterações |
nist-sp-800-190-require-managed-by-label | Requer que todas as apps tenham uma etiqueta `app.kubernetes.io/managed-by` válida. | |
nist-sp-800-190-restrict-clusteradmin-rolebindings | Restringe a utilização da função `cluster-admin`. | |
nist-sp-800-190-block-secrets-of-type-basic-auth | Restringe a utilização de segredos do tipo basic-auth. | CM-6 Configuration Settings |
nist-sp-800-190-enforce-config-management | Requer que o Config Sync esteja em execução e a prevenção de desvio ativada com, pelo menos, um objeto `RootSync` no cluster. | |
nist-sp-800-190-require-binauthz | Requer o webhook de admissão de validação da autorização binária. | |
nist-sp-800-190-require-managed-by-label | Requer que todas as apps tenham uma etiqueta `app.kubernetes.io/managed-by` válida. | |
nist-sp-800-190-restrict-hostpath-volumes | Restringe a utilização de volumes HostPath. | |
nist-sp-800-190-restrict-volume-types | Restringe os tipos de volumes montáveis à lista de autorizações. | |
nist-sp-800-190-apparmor | Restringe os perfis do AppArmor permitidos para pods. | CM-7 Funcionalidade mínima |
nist-sp-800-190-capabilities | Restringe as capacidades adicionais permitidas para os agrupamentos. | |
nist-sp-800-190-host-namespaces | Restringe contentores com `hostPID` ou `hostIPC` definidos como `true`. | |
nist-sp-800-190-host-network | Restringe a execução de contentores com a flag `hostNetwork` definida como `true`. | |
nist-sp-800-190-privileged-containers | Restringe contentores com `securityContext.privileged` definido como `true`. | |
nist-sp-800-190-proc-mount-type | Requer as máscaras `/proc` predefinidas para pods | |
nist-sp-800-190-restrict-clusteradmin-rolebindings | Restringe a utilização da função `cluster-admin`. | |
nist-sp-800-190-restrict-hostpath-volumes | Restringe a utilização de volumes HostPath. | |
nist-sp-800-190-restrict-volume-types | Restringe os tipos de volumes montáveis à lista de autorizações. | |
nist-sp-800-190-seccomp | O perfil do Seccomp não pode ser explicitamente definido como "Unconfined". | |
nist-sp-800-190-selinux | Restringe a configuração do SELinux para pods. | |
nist-sp-800-190-sysctls | Restringe os Sysctls permitidos para pods. | |
nist-sp-800-190-enforce-config-management | Requer que o Config Sync esteja em execução e a prevenção de desvio ativada com, pelo menos, um objeto `RootSync` no cluster. | CP-9 System Backup |
nist-sp-800-190-require-managed-by-label | Requer que todas as apps tenham uma etiqueta `app.kubernetes.io/managed-by` válida. | |
nist-sp-800-190-enforce-config-management | Requer que o Config Sync esteja em execução e a prevenção de desvio ativada com, pelo menos, um objeto `RootSync` no cluster. | CP-10 Recuperação e reconstituição do sistema de informações |
nist-sp-800-190-require-managed-by-label | Requer que todas as apps tenham uma etiqueta `app.kubernetes.io/managed-by` válida. | |
nist-sp-800-190-restrict-rbac-subjects | Restringe a utilização de nomes em objetos RBAC a valores permitidos. | IA-2 Identification and Authentication (Organizational Users) |
nist-sp-800-190-block-creation-with-default-serviceaccount | Restrinja a criação de recursos através de uma conta de serviço predefinida. | IA-4 Gestão de identificadores |
nist-sp-800-190-restrict-rbac-subjects | Restringe a utilização de nomes em objetos RBAC a valores permitidos. | |
nist-sp-800-190-require-binauthz | Requer o webhook de admissão de validação da autorização binária. | IA-5 Gestão do autenticador |
nist-sp-800-190-restrict-rbac-subjects | Restringe a utilização de nomes em objetos RBAC a valores permitidos. | |
nist-sp-800-190-restrict-rbac-subjects | Restringe a utilização de nomes em objetos RBAC a valores permitidos. | MA-4 Nonlocal Maintenance |
nist-sp-800-190-enforce-config-management | Requer que o Config Sync esteja em execução e a prevenção de desvio ativada com, pelo menos, um objeto `RootSync` no cluster. | SA-10 Gestão da configuração do programador |
nist-sp-800-190-require-managed-by-label | Requer que todas as apps tenham uma etiqueta `app.kubernetes.io/managed-by` válida. | |
nist-sp-800-190-require-namespace-network-policies | Requer que todos os namespaces definidos no cluster tenham uma NetworkPolicy. | SC-4 Informações nos recursos partilhados |
nist-sp-800-190-cpu-and-memory-limits-required | Requer que os agrupamentos especifiquem limites de CPU e memória. | SC-6 Resource Availability |
nist-sp-800-190-asm-peer-authn-strict-mtls | Garante que as PeerAuthentications não podem substituir o mTLS rigoroso. | SC-8 Confidencialidade e integridade da transmissão |
nist-sp-800-190-block-secrets-of-type-basic-auth | Restringe a utilização de segredos do tipo basic-auth. | SI-7 Software, firmware e integridade das informações |
nist-sp-800-190-enforce-config-management | Requer que o Config Sync esteja em execução e a prevenção de desvio ativada com, pelo menos, um objeto `RootSync` no cluster. | |
nist-sp-800-190-require-binauthz | Requer o webhook de admissão de validação da autorização binária. | |
nist-sp-800-190-require-managed-by-label | Requer que todas as apps tenham uma etiqueta `app.kubernetes.io/managed-by` válida. | |
nist-sp-800-190-restrict-hostpath-volumes | Restringe a utilização de volumes HostPath. |
Antes de começar
Por exemplo,kubectl delete constraints -l policycontroller.gke.io/bundleName=nist-800-r5
- Instale e inicialize a CLI Google Cloud, que fornece os comandos
gcloud
ekubectl
usados nestas instruções. Se usar o Cloud Shell, a CLI do Google Cloud é pré-instalada. - 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 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: "configsync.gke.io" version: "v1beta1" kind: "RootSync" - group: "admissionregistration.k8s.io" version: "v1" kind: "ValidatingWebhookConfiguration"
Aplique o manifesto
policycontroller-config.yaml
:kubectl apply -f policycontroller-config.yaml
Configure o cluster e a carga de trabalho
- A ativação e a configuração da sincronização de configuração
, incluindo o webhook de admissão de prevenção de desvio, são necessárias no
nist-sp-800-190-enforce-config-management
. - As imagens de contentores estão limitadas a uma lista de repositórios permitidos, que pode ser
personalizada, se necessário, em
nist-sp-800-190-restrict-repos
. - Os nós têm de usar o SO otimizado para contentores ou o Ubuntu
para a respetiva imagem no
nist-sp-800-190-nodes-have-consistent-time
. A ativação e a configuração da autorização binária são necessárias no
nist-sp-800-190-require-binauthz
.
Audite o conjunto de políticas NIST SP 800-190
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 NIST 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 de
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/nist-sp-800-190
Aplique as restrições de políticas com o kubectl:
kubectl apply -k https://github.com/GoogleCloudPlatform/gke-policy-library.git/anthos-bundles/nist-sp-800-190
O resultado é o seguinte:
asmpeerauthnstrictmtls.constraints.gatekeeper.sh/nist-sp-800-190-asm-peer-authn-strict-mtls created k8sallowedrepos.constraints.gatekeeper.sh/nist-sp-800-190-restrict-repos created k8sblockcreationwithdefaultserviceaccount.constraints.gatekeeper.sh/nist-sp-800-190-block-creation-with-default-serviceaccount created k8sblockobjectsoftype.constraints.gatekeeper.sh/nist-sp-800-190-block-secrets-of-type-basic-auth created k8senforceconfigmanagement.constraints.gatekeeper.sh/nist-sp-800-190-enforce-config-management created k8spspapparmor.constraints.gatekeeper.sh/nist-sp-800-190-apparmor created k8spspcapabilities.constraints.gatekeeper.sh/nist-sp-800-190-capabilities created k8spspforbiddensysctls.constraints.gatekeeper.sh/nist-sp-800-190-sysctls created k8spsphostfilesystem.constraints.gatekeeper.sh/nist-sp-800-190-restrict-hostpath-volumes created k8spsphostnamespace.constraints.gatekeeper.sh/nist-sp-800-190-host-namespaces created k8spsphostnetworkingports.constraints.gatekeeper.sh/nist-sp-800-190-host-network created k8spspprivilegedcontainer.constraints.gatekeeper.sh/nist-sp-800-190-privileged-containers created k8spspprocmount.constraints.gatekeeper.sh/nist-sp-800-190-proc-mount-type created k8spspselinuxv2.constraints.gatekeeper.sh/nist-sp-800-190-selinux created k8spspseccomp.constraints.gatekeeper.sh/nist-sp-800-190-seccomp created k8spspvolumetypes.constraints.gatekeeper.sh/nist-sp-800-190-restrict-volume-types created k8sprohibitrolewildcardaccess.constraints.gatekeeper.sh/nist-sp-800-190-restrict-role-wildcards created k8srequirebinauthz.constraints.gatekeeper.sh/nist-sp-800-190-require-binauthz created k8srequirecosnodeimage.constraints.gatekeeper.sh/nist-sp-800-190-nodes-have-consistent-time created k8srequirenamespacenetworkpolicies.constraints.gatekeeper.sh/nist-sp-800-190-require-namespace-network-policies created k8srequiredlabels.constraints.gatekeeper.sh/nist-sp-800-190-require-managed-by-label created k8srequiredresources.constraints.gatekeeper.sh/nist-sp-800-190-cpu-and-memory-limits-required created k8srestrictrbacsubjects.constraints.gatekeeper.sh/nist-sp-800-190-restrict-rbac-subjects created k8srestrictrolebindings.constraints.gatekeeper.sh/nist-sp-800-190-restrict-clusteradmin-rolebindings 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=nist-sp-800-190
O resultado é semelhante ao seguinte:
NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8spspapparmor.constraints.gatekeeper.sh/nist-sp-800-190-apparmor dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8srequirebinauthz.constraints.gatekeeper.sh/nist-sp-800-190-require-binauthz dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8srestrictrbacsubjects.constraints.gatekeeper.sh/nist-sp-800-190-restrict-rbac-subjects dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8spspforbiddensysctls.constraints.gatekeeper.sh/nist-sp-800-190-sysctls dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8spspvolumetypes.constraints.gatekeeper.sh/nist-sp-800-190-restrict-volume-types dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8spsphostnetworkingports.constraints.gatekeeper.sh/nist-sp-800-190-host-network dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8spsphostnamespace.constraints.gatekeeper.sh/nist-sp-800-190-host-namespaces dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8sprohibitrolewildcardaccess.constraints.gatekeeper.sh/nist-sp-800-190-restrict-role-wildcards dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8sblockcreationwithdefaultserviceaccount.constraints.gatekeeper.sh/nist-sp-800-190-block-creation-with-default-serviceaccount dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8spsphostfilesystem.constraints.gatekeeper.sh/nist-sp-800-190-restrict-hostpath-volumes dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8spspseccomp.constraints.gatekeeper.sh/nist-sp-800-190-seccomp dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS asmpeerauthnstrictmtls.constraints.gatekeeper.sh/nist-sp-800-190-asm-peer-authn-strict-mtls dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8srequiredresources.constraints.gatekeeper.sh/nist-sp-800-190-cpu-and-memory-limits-required dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8spspprocmount.constraints.gatekeeper.sh/nist-sp-800-190-proc-mount-type dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8sblockobjectsoftype.constraints.gatekeeper.sh/nist-sp-800-190-block-secrets-of-type-basic-auth dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8srequirenamespacenetworkpolicies.constraints.gatekeeper.sh/nist-sp-800-190-require-namespace-network-policies dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8spspcapabilities.constraints.gatekeeper.sh/nist-sp-800-190-capabilities dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8srequiredlabels.constraints.gatekeeper.sh/nist-sp-800-190-require-managed-by-label dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8spspprivilegedcontainer.constraints.gatekeeper.sh/nist-sp-800-190-privileged-containers dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8sallowedrepos.constraints.gatekeeper.sh/nist-sp-800-190-restrict-repos dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8spspselinuxv2.constraints.gatekeeper.sh/nist-sp-800-190-selinux dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8senforceconfigmanagement.constraints.gatekeeper.sh/nist-sp-800-190-enforce-config-management dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8srestrictrolebindings.constraints.gatekeeper.sh/nist-sp-800-190-restrict-clusteradmin-rolebindings 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 NIST SP 800-190 do GitHub através do kpt:
kpt pkg get https://github.com/GoogleCloudPlatform/gke-policy-library.git/anthos-bundles/nist-sp-800-190
Execute a função
set-enforcement-action
kpt para definir a ação de aplicação das políticas comodryrun
:kpt fn eval nist-sp-800-190 -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 nist-sp-800-190 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
CURRENT
confirma 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
.gitignore
comresourcegroup.yaml
:echo resourcegroup.yaml >> .gitignore
Crie um diretório
policies
dedicado:mkdir -p policies
Transfira o pacote de políticas NIST SP 800-190 do GitHub através do kpt:
kpt pkg get https://github.com/GoogleCloudPlatform/gke-policy-library.git/anthos-bundles/nist-sp-800-190 policies/nist-sp-800-190
Execute a função
set-enforcement-action
kpt para definir a ação de aplicação das políticas comodryrun
:kpt fn eval policies/nist-sp-800-190 -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/nist-sp-800-190 kpt live apply --dry-run policies/nist-sp-800-190
Se o diretório de sincronização do Config Sync usar o Kustomize, adicione
policies/nist-sp-800-190
aokustomization.yaml
raiz. Caso contrário, remova o ficheiropolicies/nist-sp-800-190/kustomization.yaml
:rm SYNC_ROOT_DIR/policies/nist-sp-800-190/kustomization.yaml
Envie as alterações para o repositório do Config Sync:
git add SYNC_ROOT_DIR/policies/nist-sp-800-190 git commit -m 'Adding NIST SP 800-190 policy audit enforcement' git push
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=nist-sp-800-190 -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=nist-sp-800-190 -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 NIST SP 800-190
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
deny
:kubectl get constraints -l policycontroller.gke.io/bundleName=nist-sp-800-190 -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 constraints -l policycontroller.gke.io/bundleName=nist-sp-800-190
kpt
Execute a função
set-enforcement-action
kpt para definir a ação de aplicação das políticas comodeny
:kpt fn eval -i gcr.io/kpt-fn/set-enforcement-action:v0.1 -- enforcementAction=deny
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-action
kpt para definir a ação de aplicação das políticas comodeny
:kpt fn eval policies/nist-sp-800-190 -i gcr.io/kpt-fn/set-enforcement-action:v0.1 -- enforcementAction=deny
Envie as alterações para o repositório do Config Sync:
git add SYNC_ROOT_DIR/policies/nist-sp-800-190 git commit -m 'Adding NIST SP 800-190 policy warn enforcement' git push
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: name: wp-non-compliant spec: containers: ‐ image: wordpress 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: [nist-sp-800-190-cpu-and-memory-limits-required] container <wordpress> does not have <{"cpu", "memory"}> limits defined Warning: [nist-sp-800-190-restrict-repos] container <wordpress> has an invalid image repo <wordpress>, allowed repos are ["gcr.io/gke-release/", "gcr.io/anthos-baremetal-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 NIST SP 800-190
Se necessário, o pacote de políticas NIST SP 800-190 pode ser removido do cluster.
kubectl
Use o kubectl para remover as políticas:
kubectl delete constraint -l policycontroller.gke.io/bundleName=nist-sp-800-190
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 as alterações para o repositório do Config Sync:
git rm -r SYNC_ROOT_DIR/policies/nist-sp-800-190 git commit -m 'Removing NIST SP 800-190 policies' git push
Valide o estado:
nomos status
O cluster deve apresentar o estado
SYNCED
com os recursos removidos.