O Controlador de Políticas inclui uma biblioteca padrão de modelos de restrição que podem ser usados com o pacote de referência dos padrões de segurança de pods. Esse pacote traz as mesmas proteções que a Política de valor de referência dos padrões de segurança de pods (PSS, na sigla em inglês) do Kubernetes, permitindo testar suas políticas antes da aplicação e excluir a cobertura de recursos específicos.
Esta página é destinada a administradores e operadores de TI que querem garantir que todos os recursos executados na plataforma de nuvem atendam a requisitos de conformidade fornecendo e mantendo automação para auditar ou aplicar. Para saber mais sobre papéis comuns e tarefas de exemplo referenciados no conteúdo do Google Cloud, consulte Tarefas e funções de usuário comuns do GKE Enterprise.
Restrições do pacote de políticas de valor de referência dos padrões de segurança de pods
Nome da restrição | Descrição da restrição | Nome do controle |
---|---|---|
pss-baseline-v2022-hostprocess | Uso do HostProcess do Windows | HostProcess |
pss-baseline-v2022-host-namespaces-hostnetwork | Uso da rede do host | Namespaces do host |
pss-baseline-v2022-host-namespaces-host-pid-ipc | Uso de namespaces do host | |
pss-baseline-v2022-privileged-containers | Como executar contêineres privilegiados | Contêineres privilegiados |
pss-baseline-v2022-capabilities | Recursos do Linux | Recursos |
pss-baseline-v2022-hostpath-volumes | Uso do sistema de arquivos do host | Volumes do HostPath |
pss-baseline-v2022-host-ports | Uso de portas do host | Portas do host (configurável) |
pss-baseline-v2022-apparmor | O perfil do AppArmor usado pelos contêineres | AppArmor |
pss-baseline-v2022-selinux | O contexto SELinux do contêiner | SELinux |
pss-baseline-v2022-proc-mount-type | Tipos de montagem de processo permitidos para o contêiner | Tipo de montagem /proc |
pss-baseline-v2022-seccomp | O perfil seccomp usado por contêineres | Seccomp |
pss-baseline-v2022-sysctls | O perfil sysctl usado por contêineres | Sysctls |
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 CLI do Google Cloud já vem pré-instalada. - Instale o Controlador de Políticas v.1.14.1 ou mais recente no cluster com a biblioteca padrão de modelos de restrição.
Pacote de políticas de valor de referência dos padrões de segurança de pods 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 com relação às políticas de CIS 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/bundles/pss-baseline-v2022
Aplique as restrições da política com o kubectl:
kubectl apply -k https://github.com/GoogleCloudPlatform/gke-policy-library.git/bundles/pss-baseline-v2022
A saída é esta:
k8spspapparmor.constraints.gatekeeper.sh/pss-baseline-v2022-apparmor created k8spspcapabilities.constraints.gatekeeper.sh/pss-baseline-v2022-capabilities created k8spsphostfilesystem.constraints.gatekeeper.sh/pss-baseline-v2022-hostpath-volumes created k8spsphostnamespace.constraints.gatekeeper.sh/pss-baseline-v2022-host-namespaces-host-pid-ipc created k8spsphostnetworkingports.constraints.gatekeeper.sh/pss-baseline-v2022-host-namespaces-hostnetwork created k8spsphostnetworkingports.constraints.gatekeeper.sh/pss-baseline-v2022-host-ports created k8spspprivilegedcontainer.constraints.gatekeeper.sh/pss-baseline-v2022-privileged-containers created k8spspprocmount.constraints.gatekeeper.sh/pss-baseline-v2022-proc-mount-type created k8spspselinuxv2.constraints.gatekeeper.sh/pss-baseline-v2022-selinux created k8spspseccomp.constraints.gatekeeper.sh/pss-baseline-v2022-seccomp created k8spspforbiddensysctls.constraints.gatekeeper.sh/pss-baseline-v2022-sysctls created
Verifique se as restrições da política foram instaladas e se existem violações no cluster:
kubectl get -k https://github.com/GoogleCloudPlatform/gke-policy-library.git/bundles/pss-baseline-v2022
O resultado será assim:
NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8spspapparmor.constraints.gatekeeper.sh/pss-baseline-v2022-apparmor 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8spspcapabilities.constraints.gatekeeper.sh/pss-baseline-v2022-capabilities dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8spsphostfilesystem.constraints.gatekeeper.sh/pss-baseline-v2022-hostpath-volumes 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8spsphostnamespace.constraints.gatekeeper.sh/pss-baseline-v2022-host-namespaces-host-pid-ipc dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8spsphostnetworkingports.constraints.gatekeeper.sh/pss-baseline-v2022-host-namespaces-hostnetwork dryrun 0 k8spsphostnetworkingports.constraints.gatekeeper.sh/pss-baseline-v2022-host-ports dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8spspprivilegedcontainer.constraints.gatekeeper.sh/pss-baseline-v2022-privileged-containers dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8spspprocmount.constraints.gatekeeper.sh/pss-baseline-v2022-proc-mount-type 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8spspselinuxv2.constraints.gatekeeper.sh/pss-baseline-v2022-selinux 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8spspseccomp.constraints.gatekeeper.sh/pss-baseline-v2022-seccomp dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8spspforbiddensysctls.constraints.gatekeeper.sh/pss-baseline-v2022-sysctls dryrun 0
(Opcional) Ajuste a restrição
pss-baseline-v2022-host-ports
para incluir uma lista mínima restrita de portas conhecidas do ambiente do cluster:parameters: # A minimum restricted known list can be implemented here. min: 0 max: 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 da Política de valor de referência dos padrões de segurança de pods v2022 no GitHub usando o kpt:
kpt pkg get https://github.com/GoogleCloudPlatform/gke-policy-library.git/bundles/pss-baseline-v2022
Execute a função
set-enforcement-action
do kpt para definir a ação de aplicação das políticas comodryrun
:kpt fn eval pss-baseline-v2022 -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 pss-baseline-v2022 kpt live init
(Opcional) Você também pode ajustar o arquivo de restrição
pss-baseline-v2022-host-ports
para incluir uma lista mínima restrita de portas conhecidas no ambiente do cluster:parameters: # A minimum restricted known list can be implemented here. min: 0 max: 0
Aplique as restrições da política com 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 da Política de valor de referência dos padrões de segurança de pods v2022 no GitHub usando o kpt:
kpt pkg get https://github.com/GoogleCloudPlatform/gke-policy-library.git/bundles/pss-baseline-v2022 policies/pss-baseline-v2022
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/pss-baseline-v2022 -i gcr.io/kpt-fn/set-enforcement-action:v0.1 -- enforcementAction=dryrun
(Opcional) Você também pode ajustar o arquivo de restrição
pss-baseline-v2022-host-ports
para incluir uma lista mínima restrita de portas conhecidas no ambiente do cluster:parameters: # A minimum restricted known list can be implemented here. min: 0 max: 0
(Opcional) Visualize as restrições de política a serem criadas:
kpt live init policies/pss-baseline-v2022 kpt live apply --dry-run policies/pss-baseline-v2022
A saída é esta:
Dry-run strategy: client inventory update started inventory update finished apply phase started k8spspapparmor.constraints.gatekeeper.sh/pss-baseline-v2022-apparmor apply successful k8spspcapabilities.constraints.gatekeeper.sh/pss-baseline-v2022-capabilities apply successful k8spsphostfilesystem.constraints.gatekeeper.sh/pss-baseline-v2022-hostpath-volumes apply successful k8spsphostnamespace.constraints.gatekeeper.sh/pss-baseline-v2022-host-namespaces-host-pid-ipc apply successful k8spsphostnetworkingports.constraints.gatekeeper.sh/pss-baseline-v2022-host-namespaces-hostnetwork apply successful k8spsphostnetworkingports.constraints.gatekeeper.sh/pss-baseline-v2022-host-ports apply successful k8spspprivilegedcontainer.constraints.gatekeeper.sh/pss-baseline-v2022-privileged-containers apply successful k8spspprocmount.constraints.gatekeeper.sh/pss-baseline-v2022-proc-mount-type apply successful k8spspselinuxv2.constraints.gatekeeper.sh/pss-baseline-v2022-selinux apply successful k8spspseccomp.constraints.gatekeeper.sh/pss-baseline-v2022-seccomp apply successful apply phase finished inventory update started inventory update finished apply result: 10 attempted, 10 successful, 0 skipped, 0 failed
Se o diretório de sincronização do Config Sync usar Kustomize, adicione
policies/pss-baseline-v2022
à raizkustomization.yaml
. Caso contrário, remova o arquivopolicies/pss-baseline-v2022/kustomization.yaml
:rm SYNC_ROOT_DIR/policies/pss-baseline-v2022/kustomization.yaml
Envie as alterações para o repositório do Config Sync:
git add SYNC_ROOT_DIR/pss-baseline-v2022 git commit -m 'Adding Pod Security Standards Baseline 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 IU 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=pss-baseline-v2022 -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=pss-baseline-v2022 -o json | jq -C '.items[]| select(.status.totalViolations>0)| [.metadata.name,.status.violations[]?]'
Alterar ação de aplicação do pacote de políticas de referência dos padrões de segurança de pods
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
warn
:kubectl get constraint -l policycontroller.gke.io/bundleName=pss-baseline-v2022 -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 constraint -l policycontroller.gke.io/bundleName=pss-baseline-v2022
kpt
Execute a função
set-enforcement-action
do kpt para definir a ação de aplicação das políticas comowarn
:kpt fn eval -i gcr.io/kpt-fn/set-enforcement-action:v0.1 -- enforcementAction=warn
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 comowarn
:kpt fn eval policies/pss-baseline-v2022 -i gcr.io/kpt-fn/set-enforcement-action:v0.1 -- enforcementAction=warn
Envie as alterações para o repositório do Config Sync:
git add SYNC_ROOT_DIR/policies/pss-baseline-v2022 git commit -m 'Adding Pod Security Standards Baseline policy bundle 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:
namespace: default
name: wp-non-compliant
labels:
app: wordpress
spec:
containers:
- image: wordpress
name: wordpress
ports:
- containerPort: 80
hostPort: 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: [pss-baseline-v2022-host-ports] The specified hostNetwork and hostPort are not allowed, pod: wp-non-compliant. Allowed values: {"max": 0, "min": 0} pod/wp-non-compliant created
Remover o pacote de políticas de referência dos padrões de segurança de pods
Se necessário, o pacote de políticas de referência dos padrões de segurança de pods pode ser removido do cluster.
kubectl
Use o kubectl para remover as políticas:
kubectl delete constraint -l policycontroller.gke.io/bundleName=pss-baseline-v2022
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/pss-baseline-v2022 git commit -m 'Removing Pod Security Standards Baseline 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.