O Policy Controller inclui uma biblioteca predefinida de modelos de restrições que podem ser usados com o pacote de políticas do Center for Internet Security (CIS) GKE v1.5.0 para ajudar a auditar a conformidade do seu cluster do GKE no Google Cloud com os benchmarks do CIS Google Kubernetes Engine (GKE) v1.5.0. Esta referência é um conjunto de controlos de segurança recomendados para configurar o 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.
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 inclui controlos nos seguintes domínios:
- RBAC e contas de serviço
- Políticas de segurança de agrupamentos
- Políticas de rede e CNI
- Gestão de segredos
- Extensible Admission Control
- Políticas gerais
- Serviços geridos
Restrições do pacote de políticas CIS GKE v1.5.0
Nome da restrição | Descrição da restrição | IDs de controlo |
---|---|---|
cis-gke-v1.5.0-apparmor | Restringe o perfil AppArmor para os Pods.
|
4.2.1 |
cis-gke-v1.5.0-restrict-creation-with-default-serviceaccount | Restrinja a criação de recursos através de um ServiceAccount predefinido.
|
4.1.5 |
cis-gke-v1.5.0-restrict-loadbalancer | Não permite todos os serviços com o tipo LoadBalancer .
|
5.6.8 |
cis-gke-v1.5.0-restrict-secrets-of-type-basic-auth | Restringe a utilização de segredos do tipo basic-auth. | 4.4.2 |
cis-gke-v1.5.0-require-binauthz | Requer o webhook de admissão de validação da autorização binária. | 4.5.1, 5.10.4 |
cis-gke-v1.5.0-require-cos-node-image | Requer o SO otimizado para contentores como imagem do SO do nó. | 5.5.1 |
cis-gke-v1.5.0-require-gke-metadata-server-enabled | Requer que o serviço de metadados do GKE esteja ativado em cada nó no cluster. | 5.4.2 |
cis-gke-v1.5.0-require-ingress.class-gce | Requer que todos os objetos Ingress tenham uma anotação kubernetes.io/ingress.class: gce .
|
5.6.8 |
cis-gke-v1.5.0-require-managed-certificates | Requer que todos os objetos Ingress tenham uma anotação networking.gke.io/managed-certificates .
|
5.6.8 |
cis-gke-v1.5.0-require-namespace-networkpolicy | Requer que cada Namespace definido no cluster tenha um NetworkPolicy .
|
4.3.2 |
cis-gke-v1.5.0-require-seccomp-default | Os contentores não podem ser executados com um perfil seccomp que não seja runtime/default .
|
4.6.2 |
cis-gke-v1.5.0-require-securitycontext | Requer que os agrupamentos definam securityContext .
|
4.6.3 |
cis-gke-v1.5.0-capabilities | Não é permitido adicionar capacidades além das indicadas. | 4.2.1 |
cis-gke-v1.5.0-restrict-cluster-admin-role | Restringe a utilização da função cluster-admin .
|
4.1.1 |
cis-gke-v1.5.0-restrict-default-namespace | Impede que os pods usem o Namespace predefinido.
|
4.6.1 e 4.6.4 |
cis-gke-v1.5.0-restrict-env-var-secrets | Restringe a utilização de segredos como variáveis de ambiente em definições de contentores. | 4.4.1 |
cis-gke-v1.5.0-host-namespace | Restringe contentores com hostPID ou hostIPC definidos como verdadeiro.
|
4.2.1 |
cis-gke-v1.5.0-restrict-pods-create | Restringe a criação de pods em Roles e ClusterRoles .
|
4.1.4 |
cis-gke-v1.5.0-restrict-privileged-containers | Restringe contentores com securityContext.privileged definido como verdadeiro.
|
4.2.1 |
cis-gke-v1.5.0-restrict-rbac-subjects | Restringe a utilização de nomes em objetos RBAC a valores permitidos. | 5.8.2 |
cis-gke-v1.5.0-restrict-role-wildcards | Restringe a utilização de carateres universais em Roles e ClusterRoles .
|
4.1.3 |
cis-gke-v1.5.0-restrict-role-secrets | Restringe a utilização de segredos em Roles e ClusterRoles .
|
4.1.2 |
cis-gke-v1.5.0-restrict-automountserviceaccounttoken | Restringe a utilização de tokens de contas de serviço para pods. | 4.1.5, 4.1.6 |
cis-gke-v1.5.0-selinux | Não é possível definir o tipo SELinux nem definir uma opção de utilizador ou função SELinux personalizada. | 4.2.1 |
cis-gke-v1.5.0-host-port | HostPorts deve ser proibido.
|
4.2.1 |
cis-gke-v1.5.0-hostpath-volumes | Os HostPath volumes têm de ser proibidos.
|
4.2.1 |
cis-gke-v1.5.0-hostprocess | Não é possível executar contentores e pods com securityContext.windowsOptions.hostProcess definido como true .
|
4.2.1 |
cis-gke-v1.5.0-proc-mount-type | Os contentores não podem ser executados com um procMount definido para um valor diferente de Default .
|
4.2.1 |
cis-gke-v1.5.0-restrict-bind-escalate-impersonate | Restringe o acesso à associação, à escalada e à representação em funções/funções de cluster em Roles e ClusterRoles .
|
4.1.8 |
cis-gke-v1.5.0-restrict-certificatesigningrequests-approval | A aprovação dos certificados de cliente está restrita. | 4.1.11 |
cis-gke-v1.5.0-restrict-nodes-proxy | Restringe o acesso ao sub-recurso de proxy de nós em Roles e ClusterRoles .
|
4.1.10 |
cis-gke-v1.5.0-restrict-persistent-volume | Restringe a criação de persistentvolumes em Roles e ClusterRoles .
|
4.1.9 |
cis-gke-v1.5.0-restrict-serviceaccounts-token | Restringe a criação de tokens de contas de serviço no Roles e no ClusterRoles .
|
4.1.13 |
cis-gke-v1.5.0-restrict-system-masters-group | Não permite a utilização do grupo system:masters .
|
5.1.7 |
cis-gke-v1.5.0-restrict-system-masters-group | Restringe o acesso a objetos de configuração de webhook em Roles e ClusterRoles .
|
4.1.12 |
cis-gke-v1.5.0-seccomp | O perfil do Seccomp não pode estar definido como Unconfined .
|
4.2.1 |
cis-gke-v1.5.0-sysctls | Os contentores só podem definir sysctls indicados no campo allowedSysctls .
|
4.2.1 |
cis-gke-v1.5.0-host-namespaces-hostnetwork | Os espaços de nomes do anfitrião hostNetwork só podem ser false .
|
4.2.1 |
Antes de começar
- Instale e inicialize a CLI do Google Cloud, que fornece os comandos
gcloud
ekubectl
usados nestas instruções. Se usar a Cloud Shell, a Google Cloud CLI é pré-instalada. - Instale o Policy Controller v1.16.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 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: "admissionregistration.k8s.io" version: "v1" kind: "ValidatingWebhookConfiguration" - group: "networking.k8s.io" version: "v1" kind: "NetworkPolicy"
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 dos
Grupos Google para o RBAC
são necessárias em
cis-gke-v1.5.0-restrict-rbac-subjects
. - A ativação e a configuração da
autorização binária são necessárias no
cis-gke-v1.5.0-require-binauthz
.
Políticas de auditoria
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 CIS GKE v1.5.0 descritas na tabela anterior, pode implementar estas restrições no modo de "auditoria" para revelar e resolver violações.
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/cis-gke-v1.5.0
Aplique as restrições de políticas com o kubectl:
kubectl apply -k https://github.com/GoogleCloudPlatform/gke-policy-library.git/anthos-bundles/cis-gke-v1.5.0
O resultado é o seguinte:
k8savoiduseofsystemmastersgroup.constraints.gatekeeper.sh/cis-gke-v1.5.0-restrict-system-masters-group created k8sblockcreationwithdefaultserviceaccount.constraints.gatekeeper.sh/cis-gke-v1.5.0-restrict-creation-with-default-serviceaccount created k8sblockloadbalancer.constraints.gatekeeper.sh/cis-gke-v1.5.0-restrict-loadbalancer created k8sblockobjectsoftype.constraints.gatekeeper.sh/cis-gke-v1.5.0-restrict-secrets-of-type-basic-auth created k8snoenvvarsecrets.constraints.gatekeeper.sh/cis-gke-v1.5.0-restrict-env-var-secrets created k8spspapparmor.constraints.gatekeeper.sh/cis-gke-v1.5.0-apparmor created k8spspcapabilities.constraints.gatekeeper.sh/cis-gke-v1.5.0-capabilities created k8spspforbiddensysctls.constraints.gatekeeper.sh/cis-gke-v1.5.0-sysctls created k8spsphostfilesystem.constraints.gatekeeper.sh/cis-gke-v1.5.0-hostpath-volumes created k8spsphostnamespace.constraints.gatekeeper.sh/cis-gke-v1.5.0-host-namespace created k8spsphostnetworkingports.constraints.gatekeeper.sh/cis-gke-v1.5.0-host-port created k8spspprivilegedcontainer.constraints.gatekeeper.sh/cis-gke-v1.5.0-privileged-containers created k8spspprocmount.constraints.gatekeeper.sh/cis-gke-v1.5.0-proc-mount-type created k8spspselinuxv2.constraints.gatekeeper.sh/cis-gke-v1.5.0-selinux created k8spspseccomp.constraints.gatekeeper.sh/cis-gke-v1.5.0-require-seccomp-default created k8spspseccomp.constraints.gatekeeper.sh/cis-gke-v1.5.0-seccomp created k8spspwindowshostprocess.constraints.gatekeeper.sh/cis-gke-v1.5.0-hostprocess created k8spodsrequiresecuritycontext.constraints.gatekeeper.sh/cis-gke-v1.5.0-require-securitycontext created k8sprohibitrolewildcardaccess.constraints.gatekeeper.sh/cis-gke-v1.5.0-restrict-role-wildcards created k8srequirebinauthz.constraints.gatekeeper.sh/cis-gke-v1.5.0-require-binauthz created k8srequirecosnodeimage.constraints.gatekeeper.sh/cis-gke-v1.5.0-require-cos-node-image created k8srequirenamespacenetworkpolicies.constraints.gatekeeper.sh/cis-gke-v1.5.0-require-namespace-networkpolicy created k8srequiredannotations.constraints.gatekeeper.sh/cis-gke-v1.5.0-require-ingress.class-gce created k8srequiredannotations.constraints.gatekeeper.sh/cis-gke-v1.5.0-require-managed-certificates created k8srequiredlabels.constraints.gatekeeper.sh/cis-gke-v1.5.0-require-gke-metadata-server-enabled created k8srestrictautomountserviceaccounttokens.constraints.gatekeeper.sh/cis-gke-v1.5.0-restrict-automountserviceaccounttoken created k8srestrictnamespaces.constraints.gatekeeper.sh/cis-gke-v1.5.0-restrict-default-namespace created k8srestrictrbacsubjects.constraints.gatekeeper.sh/cis-gke-v1.5.0-restrict-rbac-subjects created k8srestrictrolebindings.constraints.gatekeeper.sh/cis-gke-v1.5.0-restrict-cluster-admin-role created k8srestrictrolerules.constraints.gatekeeper.sh/cis-gke-v1.5.0-restrict-bind-escalate-impersonate created k8srestrictrolerules.constraints.gatekeeper.sh/cis-gke-v1.5.0-restrict-certificatesigningrequests-approval created k8srestrictrolerules.constraints.gatekeeper.sh/cis-gke-v1.5.0-restrict-nodes-proxy created k8srestrictrolerules.constraints.gatekeeper.sh/cis-gke-v1.5.0-restrict-persistent-volume created k8srestrictrolerules.constraints.gatekeeper.sh/cis-gke-v1.5.0-restrict-pods-create created k8srestrictrolerules.constraints.gatekeeper.sh/cis-gke-v1.5.0-restrict-role-secrets created k8srestrictrolerules.constraints.gatekeeper.sh/cis-gke-v1.5.0-restrict-serviceaccounts-token created k8srestrictrolerules.constraints.gatekeeper.sh/cis-gke-v1.5.0-restrict-webhook-config 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=cis-gke-v1.5.0
O resultado é semelhante ao seguinte:
NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8savoiduseofsystemmastersgroup.constraints.gatekeeper.sh/cis-gke-v1.5.0-restrict-system-masters-group dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8sblockcreationwithdefaultserviceaccount.constraints.gatekeeper.sh/cis-gke-v1.5.0-restrict-creation-with-default-serviceaccount dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8sblockloadbalancer.constraints.gatekeeper.sh/cis-gke-v1.5.0-restrict-loadbalancer dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8sblockobjectsoftype.constraints.gatekeeper.sh/cis-gke-v1.5.0-restrict-secrets-of-type-basic-auth dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8snoenvvarsecrets.constraints.gatekeeper.sh/cis-gke-v1.5.0-restrict-env-var-secrets dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8spodsrequiresecuritycontext.constraints.gatekeeper.sh/cis-gke-v1.5.0-require-securitycontext dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8sprohibitrolewildcardaccess.constraints.gatekeeper.sh/cis-gke-v1.5.0-restrict-role-wildcards dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8spspapparmor.constraints.gatekeeper.sh/cis-gke-v1.5.0-apparmor dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8spspcapabilities.constraints.gatekeeper.sh/cis-gke-v1.5.0-capabilities dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8spspforbiddensysctls.constraints.gatekeeper.sh/cis-gke-v1.5.0-sysctls dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8spsphostfilesystem.constraints.gatekeeper.sh/cis-gke-v1.5.0-hostpath-volumes dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8spsphostnamespace.constraints.gatekeeper.sh/cis-gke-v1.5.0-host-namespace dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8spsphostnetworkingports.constraints.gatekeeper.sh/cis-gke-v1.5.0-host-port dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8spspprivilegedcontainer.constraints.gatekeeper.sh/cis-gke-v1.5.0-privileged-containers dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8spspprocmount.constraints.gatekeeper.sh/cis-gke-v1.5.0-proc-mount-type dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8spspseccomp.constraints.gatekeeper.sh/cis-gke-v1.5.0-require-seccomp-default dryrun 0 k8spspseccomp.constraints.gatekeeper.sh/cis-gke-v1.5.0-seccomp dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8spspselinuxv2.constraints.gatekeeper.sh/cis-gke-v1.5.0-selinux dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8spspwindowshostprocess.constraints.gatekeeper.sh/cis-gke-v1.5.0-hostprocess dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8srequirebinauthz.constraints.gatekeeper.sh/cis-gke-v1.5.0-require-binauthz dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8srequirecosnodeimage.constraints.gatekeeper.sh/cis-gke-v1.5.0-require-cos-node-image dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8srequiredannotations.constraints.gatekeeper.sh/cis-gke-v1.5.0-require-ingress.class-gce dryrun 0 k8srequiredannotations.constraints.gatekeeper.sh/cis-gke-v1.5.0-require-managed-certificates dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8srequiredlabels.constraints.gatekeeper.sh/cis-gke-v1.5.0-require-gke-metadata-server-enabled dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8srequirenamespacenetworkpolicies.constraints.gatekeeper.sh/cis-gke-v1.5.0-require-namespace-networkpolicy dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8srestrictautomountserviceaccounttokens.constraints.gatekeeper.sh/cis-gke-v1.5.0-restrict-automountserviceaccounttoken dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8srestrictnamespaces.constraints.gatekeeper.sh/cis-gke-v1.5.0-restrict-default-namespace dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8srestrictrbacsubjects.constraints.gatekeeper.sh/cis-gke-v1.5.0-restrict-rbac-subjects dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8srestrictrolebindings.constraints.gatekeeper.sh/cis-gke-v1.5.0-restrict-cluster-admin-role dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8srestrictrolerules.constraints.gatekeeper.sh/cis-gke-v1.5.0-restrict-bind-escalate-impersonate dryrun 0 k8srestrictrolerules.constraints.gatekeeper.sh/cis-gke-v1.5.0-restrict-certificatesigningrequests-approval dryrun 0 k8srestrictrolerules.constraints.gatekeeper.sh/cis-gke-v1.5.0-restrict-nodes-proxy dryrun 0 k8srestrictrolerules.constraints.gatekeeper.sh/cis-gke-v1.5.0-restrict-persistent-volume dryrun 0 k8srestrictrolerules.constraints.gatekeeper.sh/cis-gke-v1.5.0-restrict-pods-create dryrun 0 k8srestrictrolerules.constraints.gatekeeper.sh/cis-gke-v1.5.0-restrict-role-secrets dryrun 0 k8srestrictrolerules.constraints.gatekeeper.sh/cis-gke-v1.5.0-restrict-serviceaccounts-token dryrun 0 k8srestrictrolerules.constraints.gatekeeper.sh/cis-gke-v1.5.0-restrict-webhook-config 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 CIS do GitHub através do kpt:
kpt pkg get https://github.com/GoogleCloudPlatform/gke-policy-library.git/anthos-bundles/cis-gke-v1.5.0
Execute a função
set-enforcement-action
kpt para definir a ação de aplicação das políticas comodryrun
:kpt fn eval cis-gke-v1.5.0 -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 cis-gke-v1.5.0 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 CIS GKE v1.5.0 do GitHub através do kpt:
kpt pkg get https://github.com/GoogleCloudPlatform/gke-policy-library.git/anthos-bundles/cis-gke-v1.5.0 policies/cis-gke-v1.5.0
Execute a função
set-enforcement-action
kpt para definir a ação de aplicação das políticas comodryrun
:kpt fn eval policies/cis-gke-v1.5.0 -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/cis-gke-v1.5.0 kpt live apply --dry-run policies/cis-gke-v1.5.0
Se o diretório de sincronização do Config Sync usar o Kustomize, adicione
policies/cis-gke-v1.5.0
aokustomization.yaml
raiz. Caso contrário, remova o ficheiropolicies/cis-gke-v1.5.0/kustomization.yaml
:rm SYNC_ROOT_DIR/policies/cis-gke-v1.5.0/kustomization.yaml
Envie alterações para o repositório do Config Sync:
git add SYNC_ROOT_DIR/policies/cis-gke-v1.5.0 git commit -m 'Adding CIS GKE v1.5.0 policy bundle' 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=cis-gke-v1.5.0 -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=cis-gke-v1.5.0 -o json | jq -C '.items[]| select(.status.totalViolations>0)| [.metadata.name,.status.violations[]?]'
Alteração da ação de aplicação do pacote de políticas CIS GKE v1.5.0
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=cis-gke-v1.5.0 -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=cis-gke-v1.5.0
kpt
Execute a função
set-enforcement-action
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 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 comowarn
:kpt fn eval policies/cis-gke-v1.5.0 -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/cis-gke-v1.5.0 git commit -m 'Adding CIS GKE v1.5.0 policy bundle 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:
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: [cis-gke-v1.5.0-restrict-default-namespace] <default> namespace is restricted Warning: [cis-gke-v1.5.0-require-seccomp-default] Seccomp profile 'not configured' is not allowed for container 'wordpress'. Found at: no explicit profile found. Allowed profiles: {"RuntimeDefault", "runtime/default"} Warning: [cis-gke-v1.5.0-require-securitycontext] securityContext must be defined for all Pod containers pod/wp-non-compliant configured
Remova o pacote de políticas CIS GKE v1.5.0
Se necessário, o pacote de políticas CIS GKE v1.5.0 pode ser removido do cluster.
kubectl
Use o kubectl para remover as políticas:
kubectl delete constraint -l policycontroller.gke.io/bundleName=cis-gke-v1.5.0
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/cis-gke-v1.5.0 git commit -m 'Removing CIS GKE v1.5.0 policy bundle' git push
Valide o estado:
nomos status
O cluster deve apresentar o estado
SYNCED
com os recursos removidos.