O Policy Controller vem com uma biblioteca padrão de modelos de restrição que pode ser usada com o pacote NIST SP 800-190 (em inglês), que implementa controles listados em Publicação especial do Instituto Nacional de Padrões e Tecnologia (NIST, na sigla em inglês) 800-190, Guia de Segurança de Contêineres de Aplicativo. O pacote destina-se a ajudar organizações com segurança de contêineres de aplicativos, incluindo segurança de imagens, segurança do ambiente de execução do contêiner, segurança da rede e segurança do sistema host, entre outras.
Restrições do pacote de políticas NIST SP 800-190
Nome da restrição | Descrição da restrição | ID do controle |
---|---|---|
nist-sp-800-190-restrict-rbac-subjects | Restringe o uso de nomes nos assuntos do RBAC a valores permitidos. | Gerenciamento de contas AC-2 |
nist-sp-800-190-restrict-rbac-subjects | Restringe o uso de nomes nos assuntos do RBAC a valores permitidos. | Aplicação de acesso AC-3 |
nist-sp-800-190-block-secrets-of-type-basic-auth | Restringe o uso de secrets do tipo de autenticação básica. | Aplicação do fluxo de informações AC-4 |
nist-sp-800-190-require-binauthz | Requer a autorização binária que valida o webhook de admissão. | |
nist-sp-800-190-require-namespace-network-policies | Requer que cada namespace definido no cluster tenha uma NetworkPolicy. | |
nist-sp-800-190-restrict-hostpath-volumes | Restringe o uso de volumes do HostPath. | |
nist-sp-800-190-require-binauthz | Requer a autorização binária que valida o webhook de admissão. | Privilégio mínimo AC-6 |
nist-sp-800-190-restrict-clusteradmin-rolebindings | Restringe o uso do papel "cluster-admin". | |
nist-sp-800-190-restrict-repos | Restringe imagens de contêiner a uma lista de "repos" permitida. | |
nist-sp-800-190-restrict-role-wildcards | Restringe o uso de caracteres curinga em "Papéis" e "ClusterRoles". | |
nist-sp-800-190-nodes-have-consistent-time | Garante tempo consistente e correto nos nós permitindo apenas o Container-Optimized OS (COS) ou o Ubuntu como a imagem do SO. | Carimbos de hora AU-8 |
nist-sp-800-190-require-namespace-network-policies | Requer que cada namespace definido no cluster tenha uma NetworkPolicy. | Conexões internas do sistema CA-9 |
nist-sp-800-190-enforce-config-management | Exige que o Config Sync esteja em execução e o Drift Prevention ativado com pelo menos um objeto "RootSync" no cluster. | Configuração de valor de referência do CM-2 |
nist-sp-800-190-require-managed-by-label | Requer que todos os apps tenham um rótulo "app.kubernetes.io/managed-by" válido. | |
nist-sp-800-190-apparmor | Restringe os perfis do AppArmor permitidos para pods. | Controle de alterações de configuração do CM-3 |
nist-sp-800-190-block-secrets-of-type-basic-auth | Restringe o uso de secrets do tipo de autenticação básica. | |
nist-sp-800-190-capabilities | Restringe recursos adicionais permitidos para pods. | |
nist-sp-800-190-enforce-config-management | Exige que o Config Sync esteja em execução e o Drift Prevention ativado com pelo menos um objeto "RootSync" no cluster. | |
nist-sp-800-190-host-namespaces | Restringe contêineres com "hostPID" ou "hostIPC" definido como "true". | |
nist-sp-800-190-host-network | Restringe a execução de contêineres com a sinalização "hostNetwork" definida como "true". | |
nist-sp-800-190-privileged-containers | Restringe contêineres com "securityContext.privileged" como "true". | |
nist-sp-800-190-proc-mount-type | Requer as máscaras "default"/"pro" padrão para pods | |
nist-sp-800-190-require-managed-by-label | Requer que todos os apps tenham um rótulo "app.kubernetes.io/managed-by" válido. | |
nist-sp-800-190-restrict-hostpath-volumes | Restringe o uso de volumes do HostPath. | |
nist-sp-800-190-restrict-volume-types | Restringe os tipos de volumes montados à lista de permissões. | |
nist-sp-800-190-seccomp | O perfil Seccomp não pode ser definido explicitamente como "Unconfined". | |
nist-sp-800-190-selinux | Restringe a configuração do SELinux para pods. | |
nist-sp-800-190-sysctls | Restringe o Sysctls permitido para pods. | |
nist-sp-800-190-enforce-config-management | Exige que o Config Sync esteja em execução e o Drift Prevention ativado com pelo menos um objeto "RootSync" no cluster. | Análise do impacto de segurança no CM-4 |
nist-sp-800-190-require-managed-by-label | Requer que todos os apps tenham um rótulo "app.kubernetes.io/managed-by" válido. | |
nist-sp-800-190-restrict-clusteradmin-rolebindings | Restringe o uso do papel "cluster-admin". | |
nist-sp-800-190-enforce-config-management | Exige que o Config Sync esteja em execução e o Drift Prevention ativado com pelo menos um objeto "RootSync" no cluster. | Restrições de acesso do CM-5 para alterações |
nist-sp-800-190-require-managed-by-label | Requer que todos os apps tenham um rótulo "app.kubernetes.io/managed-by" válido. | |
nist-sp-800-190-restrict-clusteradmin-rolebindings | Restringe o uso do papel "cluster-admin". | |
nist-sp-800-190-block-secrets-of-type-basic-auth | Restringe o uso de secrets do tipo de autenticação básica. | Definições da configuração do CM-6 |
nist-sp-800-190-enforce-config-management | Exige que o Config Sync esteja em execução e o Drift Prevention ativado com pelo menos um objeto "RootSync" no cluster. | |
nist-sp-800-190-require-binauthz | Requer a autorização binária que valida o webhook de admissão. | |
nist-sp-800-190-require-managed-by-label | Requer que todos os apps tenham um rótulo "app.kubernetes.io/managed-by" válido. | |
nist-sp-800-190-restrict-hostpath-volumes | Restringe o uso de volumes do HostPath. | |
nist-sp-800-190-restrict-volume-types | Restringe os tipos de volumes montados à lista de permissões. | |
nist-sp-800-190-apparmor | Restringe os perfis do AppArmor permitidos para pods. | Funcionalidade mínima do CM-7 |
nist-sp-800-190-capabilities | Restringe recursos adicionais permitidos para pods. | |
nist-sp-800-190-host-namespaces | Restringe contêineres com "hostPID" ou "hostIPC" definido como "true". | |
nist-sp-800-190-host-network | Restringe a execução de contêineres com a sinalização "hostNetwork" definida como "true". | |
nist-sp-800-190-privileged-containers | Restringe contêineres com "securityContext.privileged" como "true". | |
nist-sp-800-190-proc-mount-type | Requer as máscaras "default"/"pro" padrão para pods | |
nist-sp-800-190-restrict-clusteradmin-rolebindings | Restringe o uso do papel "cluster-admin". | |
nist-sp-800-190-restrict-hostpath-volumes | Restringe o uso de volumes do HostPath. | |
nist-sp-800-190-restrict-volume-types | Restringe os tipos de volumes montados à lista de permissões. | |
nist-sp-800-190-seccomp | O perfil Seccomp não pode ser definido explicitamente como "Unconfined". | |
nist-sp-800-190-selinux | Restringe a configuração do SELinux para pods. | |
nist-sp-800-190-sysctls | Restringe o Sysctls permitido para pods. | |
nist-sp-800-190-enforce-config-management | Exige que o Config Sync esteja em execução e o Drift Prevention ativado com pelo menos um objeto "RootSync" no cluster. | Backup do sistema CP-9 |
nist-sp-800-190-require-managed-by-label | Requer que todos os apps tenham um rótulo "app.kubernetes.io/managed-by" válido. | |
nist-sp-800-190-enforce-config-management | Exige que o Config Sync esteja em execução e o Drift Prevention ativado com pelo menos um objeto "RootSync" no cluster. | Recuperação e reconstituição do sistema de informações CP-10 |
nist-sp-800-190-require-managed-by-label | Requer que todos os apps tenham um rótulo "app.kubernetes.io/managed-by" válido. | |
nist-sp-800-190-restrict-rbac-subjects | Restringe o uso de nomes nos assuntos do RBAC a valores permitidos. | IA-2 Identificação e autenticação (usuários organizacionais) |
nist-sp-800-190-block-creation-with-default-serviceaccount | Restringir a criação de recursos usando uma conta de serviço padrão. | Gerenciamento de identificadores IA-4 |
nist-sp-800-190-restrict-rbac-subjects | Restringe o uso de nomes nos assuntos do RBAC a valores permitidos. | |
nist-sp-800-190-require-binauthz | Requer a autorização binária que valida o webhook de admissão. | Gerenciamento de autenticação IA-5 |
nist-sp-800-190-restrict-rbac-subjects | Restringe o uso de nomes nos assuntos do RBAC a valores permitidos. | |
nist-sp-800-190-restrict-rbac-subjects | Restringe o uso de nomes nos assuntos do RBAC a valores permitidos. | Manutenção não local MA-4 |
nist-sp-800-190-enforce-config-management | Exige que o Config Sync esteja em execução e o Drift Prevention ativado com pelo menos um objeto "RootSync" no cluster. | Gerenciamento de configuração do desenvolvedor do SA-10 |
nist-sp-800-190-require-managed-by-label | Requer que todos os apps tenham um rótulo "app.kubernetes.io/managed-by" válido. | |
nist-sp-800-190-require-namespace-network-policies | Requer que cada namespace definido no cluster tenha uma NetworkPolicy. | Informações sobre recursos compartilhados SC-4 |
nist-sp-800-190-cpu-and-memory-limits-required | Requer que os pods especifiquem limites de CPU e memória. | Disponibilidade de recursos do SC-6 |
nist-sp-800-190-asm-peer-authn-strict-mtls | Garante que o PeerAuthentications não pode substituir o mTLS restrito. | Confidencialidade e integridade da transmissão do SC-8 |
nist-sp-800-190-block-secrets-of-type-basic-auth | Restringe o uso de secrets do tipo de autenticação básica. | Software, firmware e integridade da informação SI-7 |
nist-sp-800-190-enforce-config-management | Exige que o Config Sync esteja em execução e o Drift Prevention ativado com pelo menos um objeto "RootSync" no cluster. | |
nist-sp-800-190-require-binauthz | Requer a autorização binária que valida o webhook de admissão. | |
nist-sp-800-190-require-managed-by-label | Requer que todos os apps tenham um rótulo "app.kubernetes.io/managed-by" válido. | |
nist-sp-800-190-restrict-hostpath-volumes | Restringe o uso de volumes do HostPath. |
Antes de começar
- Instale e inicialize a Google Cloud CLI,
que fornece os
comandos
gcloud
ekubectl
usados nestas instruções. Se você usa o Cloud Shell, a Google Cloud CLI já vem pré-instalada. - Instale o Policy Controller 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 o Policy Controller com restrições referenciais
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: "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
Configurar o cluster e a carga de trabalho
- A ativação e a configuração do Config Sync
, incluindo o webhook de admissão da Prevenção contra
violação, são necessárias em
nist-sp-800-190-enforce-config-management
. - As imagens de contêiner sã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 precisam usar o Container-Optimized OS ou Ubuntu
na 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 em
nist-sp-800-190-require-binauthz
.
Auditar o pacote de políticas do NIST SP 800-190
O Policy Controller permite aplicar políticas ao cluster do Kubernetes. Para ajudar a testar suas cargas de trabalho e a conformidade delas com relação às políticas do NIST descritas na tabela anterior, implante essas restrições no modo de "auditoria" para revelar violações e, mais importante, se permitir corrigir antes de aplicar no cluster do Kubernetes.
É possível aplicar essas políticas com spec.enforcementAction
definido como dryrun
usando
kubectl,
kpt
ou
Config Sync
.
kubectl
(Opcional) Visualize as restrições de política com o kubectl:
kubectl kustomize https://github.com/GoogleCloudPlatform/gke-policy-library.git/anthos-bundles/nist-sp-800-190
Aplique as restrições da política com o kubectl:
kubectl apply -k https://github.com/GoogleCloudPlatform/gke-policy-library.git/anthos-bundles/nist-sp-800-190
A saída é esta:
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
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=nist-sp-800-190
O resultado será assim:
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 implantar recursos do Kubernetes.
Faça o download do pacote de políticas NIST SP 800-190 no GitHub usando o 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
do 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 acompanhar as alterações:
cd nist-sp-800-190 kpt live init
Aplique as restrições da política ao kpt:
kpt live apply
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
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:
Altere para o diretório de sincronização do Config Sync:
cd SYNC_ROOT_DIR
Para criar ou anexar
.gitignore
comresourcegroup.yaml
:echo resourcegroup.yaml >> .gitignore
Crie um diretório
policies
dedicado:mkdir -p policies
Faça o download do pacote de políticas NIST SP 800-190 no GitHub usando o 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
do 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) Visualize as restrições de política 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 Kustomize, adicione
policies/nist-sp-800-190
à raizkustomization.yaml
. Caso contrário, remova o arquivopolicies/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
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=nist-sp-800-190 -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=nist-sp-800-190 -o json | jq -C '.items[]| select(.status.totalViolations>0)| [.metadata.name,.status.violations[]?]'
Alterar ação de aplicação do pacote de políticas do NIST SP 800-190
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
Use o kubectl para definir a ação de cumprimento 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 cumprimento das restrições da política foi atualizada:
kubectl get constraints -l policycontroller.gke.io/bundleName=nist-sp-800-190
kpt
Execute a função
set-enforcement-action
do 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 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:
Altere para o diretório de sincronização do Config Sync:
cd SYNC_ROOT_DIR
Execute a função
set-enforcement-action
do 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
Verifique o status da instalação:
gcloud alpha anthos config sync repo list --project PROJECT_ID
Seu repo que aparece na coluna
SYNCED
confirma a instalação das políticas.
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: name: wp-non-compliant spec: containers: ‐ image: wordpress 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: [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
Remoção do 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 implantar políticas nos 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
Verifique o status:
gcloud alpha anthos config sync repo list --project PROJECT_ID
Seu repo que aparece na coluna
SYNCED
confirma a remoção das políticas.