CIS 1.11 Guia de Autoavaliação
Visão Geral
Este documento é um complemento ao guia de proteção do RKE2. O guia de proteção fornece orientações prescritivas para a proteção de uma instalação de produção do RKE2, e este guia de referência tem como objetivo ajudá-lo a avaliar o nível de segurança do cluster protegido em relação a cada controle no CIS Kubernetes Benchmark. Deve ser utilizado por operadores de RKE2, equipes de segurança, auditores e tomadores de decisão.
Este guia é específico para a linha de versões v1.29-1.34 do RKE2 e a versão v1.11 do CIS Kubernetes Benchmark.
Para mais informações sobre cada controle, incluindo justificativas detalhadas e descrições de verificações, você pode consultar a seção correspondente do CIS Kubernetes Benchmark v1.8. Você pode baixar o benchmark, após criar uma conta gratuita, no Centro para Segurança da Internet (CIS).
Metodologia de testes de controles
Cada controle no CIS Kubernetes Benchmark foi avaliado em um cluster RKE2 configurado de acordo com o guia de proteção que o acompanha.
Estes são os resultados possíveis para cada controle:
-
APROVADO - O controle é automatizado (pontuação: verdadeiro). O cluster RKE2 em teste passou na auditoria descrita no Benchmark.
-
Não Aplicável - O controle não é aplicável (tipo: pular) ao RKE2 devido à forma como foi projetado para operar. A seção de justificativa explicará por que isso ocorre.
-
AVISO - O controle é manual (pontuação: falso) no benchmark do CIS e depende da intervenção manual do operador. A seção de remediação fornecerá orientações sobre como alcançar um resultado de APROVADO.
1 Configuração de Segurança do Plano de Controle
1.1 Arquivos de Configuração do Nó do Plano de Controle
1.1.1 Assegure-se de que as permissões do arquivo de especificação do pod do servidor API estejam definidas como 600 ou mais restritivas (Automatizado)
Resultado: PASS
Auditoria
stat -c permissions=%a /var/lib/rancher/rke2/agent/pod-manifests/kube-apiserver.yaml
Resultado Esperado: as permissões têm 600, esperado 600 ou mais restritivas
Valor Retornado:
permissions=600
Remediação:
Execute o comando abaixo (com base na localização do arquivo em seu sistema) no nó do plano de controle.
Por exemplo, chmod 600 /var/lib/rancher/rke2/agent/pod-manifests/kube-apiserver.yaml
1.1.2 Assegure-se de que a propriedade do arquivo de especificação do pod do servidor API esteja definida como root:root (Automatizado)
Resultado: PASS
Auditoria
/bin/sh -c 'if test -e /var/lib/rancher/rke2/agent/pod-manifests/kube-apiserver.yaml; then stat -c %U:%G /var/lib/rancher/rke2/agent/pod-manifests/kube-apiserver.yaml; fi'
Resultado Esperado: 'root:root' é igual a 'root:root'
Valor Retornado:
root:root
Remediação:
Execute o comando abaixo (com base na localização do arquivo em seu sistema) no nó do plano de controle.
Por exemplo, chown root:root /var/lib/rancher/rke2/agent/pod-manifests/kube-apiserver.yaml
1.1.3 Assegure-se de que as permissões do arquivo de especificação do pod do gerenciador de controladores estejam definidas como 600 ou mais restritivas (Automatizado)
Resultado: PASS
Auditoria
/bin/sh -c 'if test -e /var/lib/rancher/rke2/agent/pod-manifests/kube-controller-manager.yaml; then stat -c permissions=%a /var/lib/rancher/rke2/agent/pod-manifests/kube-controller-manager.yaml; fi'
Resultado Esperado: as permissões têm 600, esperado 600 ou mais restritivas
Valor Retornado:
permissions=600
Remediação:
Execute o comando abaixo (com base na localização do arquivo em seu sistema) no nó do plano de controle.
Por exemplo, chmod 600 /var/lib/rancher/rke2/agent/pod-manifests/kube-controller-manager.yaml
1.1.4 Assegure-se de que a propriedade do arquivo de especificação do pod do gerenciador de controladores esteja definida como root:root (Automatizado)
Resultado: PASS
Auditoria
/bin/sh -c 'if test -e /var/lib/rancher/rke2/agent/pod-manifests/kube-controller-manager.yaml; then stat -c %U:%G /var/lib/rancher/rke2/agent/pod-manifests/kube-controller-manager.yaml; fi'
Resultado Esperado: 'root:root' é igual a 'root:root'
Valor Retornado:
root:root
Remediação:
Execute o comando abaixo (com base na localização do arquivo em seu sistema) no nó do plano de controle.
Por exemplo, chown root:root /var/lib/rancher/rke2/agent/pod-manifests/kube-controller-manager.yaml
1.1.5 Assegure-se de que as permissões do arquivo de especificação do pod do agendador estejam definidas como 600 ou mais restritivas (Automatizado)
Resultado: PASS
Auditoria
/bin/sh -c 'if test -e /var/lib/rancher/rke2/agent/pod-manifests/kube-scheduler.yaml; then stat -c permissions=%a /var/lib/rancher/rke2/agent/pod-manifests/kube-scheduler.yaml; fi'
Resultado Esperado: as permissões têm 600, esperado 600 ou mais restritivas
Valor Retornado:
permissions=600
Remediação:
Execute o comando abaixo (com base na localização do arquivo em seu sistema) no nó do plano de controle.
Por exemplo, chmod 600 /var/lib/rancher/rke2/agent/pod-manifests/kube-scheduler.yaml
1.1.6 Assegure-se de que a propriedade do arquivo de especificação do pod do agendador esteja definida como root:root (Automatizado)
Resultado: PASS
Auditoria
/bin/sh -c 'if test -e /var/lib/rancher/rke2/agent/pod-manifests/kube-scheduler.yaml; then stat -c %U:%G /var/lib/rancher/rke2/agent/pod-manifests/kube-scheduler.yaml; fi'
Resultado Esperado: 'root:root' está presente
Valor Retornado:
root:root
Remediação:
Execute o comando abaixo (com base na localização do arquivo em seu sistema) no nó do plano de controle.
Por exemplo, chown root:root /var/lib/rancher/rke2/agent/pod-manifests/kube-scheduler.yaml
1.1.7 Assegure-se de que as permissões do arquivo de especificação do pod etcd estejam definidas como 600 ou mais restritivas (Manual)
Resultado: PASS
Auditoria
/bin/sh -c 'if test -e /var/lib/rancher/rke2/agent/pod-manifests/etcd.yaml; then stat -c permissions=%a /var/lib/rancher/rke2/agent/pod-manifests/etcd.yaml; fi'
Resultado Esperado: as permissões têm 600, esperado 600 ou mais restritivas
Valor Retornado:
permissions=600
Remediação:
Se estiver executando apenas o master sem o papel etcd, essa verificação não é aplicável.
Se os papéis de plano de controle e etcd estiverem presentes nos mesmos nós, mas essa verificação for um aviso, então execute o comando abaixo (com base na localização do arquivo em seu sistema) no nó do plano de controle.
Por exemplo,
chmod 600 /var/lib/rancher/rke2/agent/pod-manifests/etcd.yaml
1.1.8 Assegure-se de que a propriedade do arquivo de especificação do pod etcd esteja definida como root:root (Manual)
Resultado: PASS
Auditoria
/bin/sh -c 'if test -e /var/lib/rancher/rke2/agent/pod-manifests/etcd.yaml; then stat -c %U:%G /var/lib/rancher/rke2/agent/pod-manifests/etcd.yaml; fi'
Resultado Esperado: 'root:root' é igual a 'root:root'
Valor Retornado:
root:root
Remediação:
Se estiver executando apenas o master sem o papel etcd, essa verificação não é aplicável.
Se os papéis de plano de controle e etcd estiverem presentes nos mesmos nós, mas essa verificação for um aviso, então execute o comando abaixo (com base na localização do arquivo em seu sistema) no nó do plano de controle.
Por exemplo,
chown root:root /var/lib/rancher/rke2/agent/pod-manifests/etcd.yaml
1.1.9 Certifique-se de que as permissões do arquivo da interface de rede de contêiner estejam definidas como 600 ou mais restritivas (Manual)
Resultado: AVISO
Remediação:
Observe que para muitos CNIs, um arquivo de bloqueio é criado com permissões 750. Isso é esperado e pode ser ignorado.
Execute o comando abaixo (com base na localização do arquivo em seu sistema) no nó do plano de controle.
Por exemplo, chmod 600 /var/lib/cni/networks/<filename> and chmod 600 /etc/cni/net.d/<filename>
1.1.10 Certifique-se de que a propriedade do arquivo da interface de rede de contêiner esteja definida como root:root (Manual)
Resultado: PASS
Auditoria
ps -fC ${kubeletbin:-kubelet} | grep -- --cni-conf-dir || echo "/etc/cni/net.d" | sed 's%.*cni-conf-dir[= ]\([^ ]*\).*%\1%' | xargs -I{} find {} -mindepth 1 | xargs --no-run-if-empty stat -c %U:%G
find /var/lib/cni/networks -type f 2> /dev/null | xargs --no-run-if-empty stat -c %U:%G
Resultado Esperado: 'root:root' está presente
Valor Retornado:
root:root
root:root
root:root
root:root
root:root
root:root
root:root
root:root
root:root
Remediação:
Execute o comando abaixo (com base na localização do arquivo em seu sistema) no nó do plano de controle.
Por exemplo,
chown root:root <path/to/cni/files>
1.1.11 Certifique-se de que as permissões do diretório de dados etcd estejam definidas como 700 ou mais restritivas (Manual)
Resultado: PASS
Auditoria
stat -c permissions=%a /var/lib/rancher/rke2/server/db/etcd
Resultado Esperado: as permissões estão definidas como 700, esperado 700 ou mais restritivas
Valor Retornado:
permissions=700
Remediação:
Se estiver executando apenas o master sem o papel etcd, essa verificação não é aplicável.
Se os papéis de controlplane e etcd estiverem presentes nos mesmos nós, mas essa verificação for um aviso, então
no nó do servidor etcd, obtenha o diretório de dados etcd, passado como um argumento --data-dir,
do comando 'ps -ef | grep etcd'.
Execute o comando abaixo (com base no diretório de dados etcd encontrado acima). Por exemplo,
chmod 700 /var/lib/rancher/rke2/server/db/etcd
1.1.12 Assegure-se de que a propriedade do diretório de dados etcd esteja definida como etcd:etcd (Manual)
Resultado: PASS
Auditoria
stat -c %U:%G /var/lib/rancher/rke2/server/db/etcd
Resultado Esperado: 'etcd:etcd' está presente
Valor retornado:
etcd:etcd
Remediação:
Se estiver executando apenas o master sem o papel etcd, essa verificação não é aplicável.
Se os papéis de controlplane e etcd estiverem presentes nos mesmos nós, mas essa verificação for um aviso, então
no nó do servidor etcd, obtenha o diretório de dados etcd, passado como um argumento --data-dir,
do comando 'ps -ef | grep etcd'.
Execute o comando abaixo (com base no diretório de dados etcd encontrado acima).
Por exemplo, chown etcd:etcd /var/lib/rancher/rke2/server/db/etcd
1.1.13 Certifique-se de que as permissões do arquivo admin.conf estejam definidas como 600 ou mais restritivas (Automatizado)
Resultado: PASS
Auditoria
stat -c permissions=%a /var/lib/rancher/rke2/server/cred/admin.kubeconfig
Resultado Esperado: as permissões têm 600, esperado 600 ou mais restritivas
Valor Retornado:
permissions=600
Remediação:
Execute o comando abaixo (com base na localização do arquivo em seu sistema) no nó do plano de controle.
Por exemplo, chmod 600 /var/lib/rancher/rke2/server/cred/admin.kubeconfig
1.1.14 Certifique-se de que a propriedade do arquivo admin.conf esteja definida como root:root (Automatizado)
Resultado: PASS
Auditoria
stat -c %U:%G /var/lib/rancher/rke2/server/cred/admin.kubeconfig
Resultado Esperado: 'root:root' é igual a 'root:root'
Valor Retornado:
root:root
Remediação:
Execute o comando abaixo (com base na localização do arquivo em seu sistema) no nó do plano de controle.
Por exemplo, chown root:root /var/lib/rancher/rke2/server/cred/admin.kubeconfig
1.1.15 Certifique-se de que as permissões do arquivo scheduler.conf estejam definidas como 600 ou mais restritivas (Automatizado)
Resultado: PASS
Auditoria
/bin/sh -c 'if test -e /var/lib/rancher/rke2/server/cred/scheduler.kubeconfig; then stat -c permissions=%a /var/lib/rancher/rke2/server/cred/scheduler.kubeconfig; fi'
Resultado Esperado: as permissões têm 600, esperado 600 ou mais restritivas
Valor Retornado:
permissions=600
Remediação:
Execute o comando abaixo (com base na localização do arquivo em seu sistema) no nó do plano de controle.
Por exemplo,
chmod 600 /var/lib/rancher/rke2/server/cred/scheduler.kubeconfig
1.1.16 Certifique-se de que a propriedade do arquivo scheduler.conf esteja definida como root:root (Automatizado)
Resultado: PASS
Auditoria
stat -c %U:%G /var/lib/rancher/rke2/server/cred/scheduler.kubeconfig
Resultado Esperado: 'root:root' é igual a 'root:root'
Valor Retornado:
root:root
Remediação:
Execute o comando abaixo (com base na localização do arquivo em seu sistema) no nó do plano de controle.
Por exemplo,
chown root:root /var/lib/rancher/rke2/server/cred/scheduler.kubeconfig
1.1.17 Certifique-se de que as permissões do arquivo controller-manager.conf estejam definidas como 600 ou mais restritivas (Automatizado)
Resultado: PASS
Auditoria
/bin/sh -c 'if test -e /var/lib/rancher/rke2/server/cred/controller.kubeconfig; then stat -c permissions=%a /var/lib/rancher/rke2/server/cred/controller.kubeconfig; fi'
Resultado Esperado: as permissões têm 600, esperado 600 ou mais restritivas
Valor Retornado:
permissions=600
Remediação:
Execute o comando abaixo (com base na localização do arquivo em seu sistema) no nó do plano de controle.
Por exemplo,
chmod 600 /var/lib/rancher/rke2/server/cred/controller.kubeconfig
1.1.18 Certifique-se de que a propriedade do arquivo controller-manager.conf esteja definida como root:root (Automatizado)
Resultado: PASS
Auditoria
stat -c %U:%G /var/lib/rancher/rke2/server/cred/controller.kubeconfig
Resultado Esperado: 'root:root' é igual a 'root:root'
Valor Retornado:
root:root
Remediação:
Execute o comando abaixo (com base na localização do arquivo em seu sistema) no nó do plano de controle.
Por exemplo,
chown root:root /var/lib/rancher/rke2/server/cred/controller.kubeconfig
1.1.19 Certifique-se de que a propriedade do diretório e arquivo PKI do Kubernetes esteja definida como root:root (Automatizado)
Resultado: PASS
Auditoria
stat -c %U:%G /var/lib/rancher/rke2/server/tls
Resultado Esperado: 'root:root' é igual a 'root:root'
Valor Retornado:
root:root
Remediação:
Execute o comando abaixo (com base na localização do arquivo em seu sistema) no nó do plano de controle.
Por exemplo,
chown -R root:root /var/lib/rancher/rke2/server/tls
1.1.20 Certifique-se de que as permissões do arquivo de certificado PKI do Kubernetes estejam definidas como 644 ou mais restritivas (Automatizado)
Resultado: PASS
Auditoria
stat -c permissions=%a /var/lib/rancher/rke2/server/tls/*.crt
Resultado Esperado: as permissões devem estar definidas como 644 ou serem mais restritivas.
Valor Retornado:
permissions=644
permissions=644
permissions=644
permissions=644
permissions=644
permissions=644
permissions=644
permissions=644
permissions=644
permissions=644
permissions=644
permissions=644
permissions=644
Remediação:
Execute o comando abaixo (com base na localização do arquivo em seu sistema) no nó do plano de controle.
Por exemplo,
chmod -R 644 /var/lib/rancher/rke2/server/tls/*.crt
Por padrão, o RKE2 define as permissões do arquivo de certificado PKI como 644, permissões mais restritivas, como 600, são suportadas.
1.1.21 Certifique-se de que as permissões do arquivo de chave PKI do Kubernetes estejam definidas como 600 (Automatizado)
Resultado: PASS
Auditoria
stat -c permissions=%a /var/lib/rancher/rke2/server/tls/*.key
Resultado Esperado: as permissões têm 600, esperado 600 ou mais restritivas
Valor Retornado:
permissions=600
permissions=600
permissions=600
permissions=600
permissions=600
permissions=600
permissions=600
permissions=600
permissions=600
permissions=600
permissions=600
permissions=600
permissions=600
permissions=600
permissions=600
permissions=600
permissions=600
Remediação:
Execute o comando abaixo (com base na localização do arquivo em seu sistema) no nó do plano de controle.
Por exemplo,
chmod -R 600 /var/lib/rancher/rke2/server/tls/*.key
1.2 Servidor API
1.2.1 Certifique-se de que o argumento --anonymous-auth esteja definido como false (Automatizado)
Resultado: PASS
Auditoria
/bin/ps -fC kube-apiserver
Resultado Esperado: '--anonymous-auth' é igual a 'false'
Valor Retornado:
UID PID PPID C STIME TTY TIME CMD
root 18280 17706 5 16:15 ? 00:00:16 kube-apiserver --admission-control-config-file=/etc/rancher/rke2/rke2-pss.yaml --audit-policy-file=/etc/rancher/rke2/audit-policy.yaml --audit-log-maxage=30 --audit-log-maxbackup=10 --audit-log-maxsize=100 --audit-log-path=/var/lib/rancher/rke2/server/logs/audit.log --advertise-address=10.10.10.100 --allow-privileged=true --anonymous-auth=false --api-audiences=https://kubernetes.default.svc.cluster.local,rke2 --authorization-mode=Node,RBAC --bind-address=0.0.0.0 --cert-dir=/var/lib/rancher/rke2/server/tls/temporary-certs --client-ca-file=/var/lib/rancher/rke2/server/tls/client-ca.crt --egress-selector-config-file=/var/lib/rancher/rke2/server/etc/egress-selector-config.yaml --enable-admission-plugins=NodeRestriction --enable-aggregator-routing=true --enable-bootstrap-token-auth=true --encryption-provider-config=/var/lib/rancher/rke2/server/cred/encryption-config.json --encryption-provider-config-automatic-reload=true --etcd-cafile=/var/lib/rancher/rke2/server/tls/etcd/server-ca.crt --etcd-certfile=/var/lib/rancher/rke2/server/tls/etcd/client.crt --etcd-keyfile=/var/lib/rancher/rke2/server/tls/etcd/client.key --etcd-servers=https://127.0.0.1:2379 --kubelet-certificate-authority=/var/lib/rancher/rke2/server/tls/server-ca.crt --kubelet-client-certificate=/var/lib/rancher/rke2/server/tls/client-kube-apiserver.crt --kubelet-client-key=/var/lib/rancher/rke2/server/tls/client-kube-apiserver.key --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --profiling=false --proxy-client-cert-file=/var/lib/rancher/rke2/server/tls/client-auth-proxy.crt --proxy-client-key-file=/var/lib/rancher/rke2/server/tls/client-auth-proxy.key --requestheader-allowed-names=system:auth-proxy --requestheader-client-ca-file=/var/lib/rancher/rke2/server/tls/request-header-ca.crt --requestheader-extra-headers-prefix=X-Remote-Extra- --requestheader-group-headers=X-Remote-Group --requestheader-username-headers=X-Remote-User --secure-port=6443 --service-account-extend-token-expiration=false --service-account-issuer=https://kubernetes.default.svc.cluster.local --service-account-key-file=/var/lib/rancher/rke2/server/tls/service.key --service-account-signing-key-file=/var/lib/rancher/rke2/server/tls/service.current.key --service-cluster-ip-range=10.43.0.0/16 --service-node-port-range=30000-32767 --storage-backend=etcd3 --tls-cert-file=/var/lib/rancher/rke2/server/tls/serving-kube-apiserver.crt --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --tls-private-key-file=/var/lib/rancher/rke2/server/tls/serving-kube-apiserver.key
Remediação:
Por padrão, o RKE2 define o argumento --anonymous-auth como false. Se esta verificação falhar, edite o arquivo de configuração do RKE2 /etc/rancher/rke2/config.yaml e remova qualquer coisa semelhante ao abaixo.
kube-apiserver-arg: - "anonymous-auth=true"
1.2.2 Certifique-se de que o parâmetro --token-auth-file não esteja definido (Automatizado)
Resultado: PASS
Auditoria
/bin/ps -fC kube-apiserver
Resultado Esperado: '--token-auth-file' não está presente
Valor Retornado:
UID PID PPID C STIME TTY TIME CMD
root 18280 17706 5 16:15 ? 00:00:16 kube-apiserver --admission-control-config-file=/etc/rancher/rke2/rke2-pss.yaml --audit-policy-file=/etc/rancher/rke2/audit-policy.yaml --audit-log-maxage=30 --audit-log-maxbackup=10 --audit-log-maxsize=100 --audit-log-path=/var/lib/rancher/rke2/server/logs/audit.log --advertise-address=10.10.10.100 --allow-privileged=true --anonymous-auth=false --api-audiences=https://kubernetes.default.svc.cluster.local,rke2 --authorization-mode=Node,RBAC --bind-address=0.0.0.0 --cert-dir=/var/lib/rancher/rke2/server/tls/temporary-certs --client-ca-file=/var/lib/rancher/rke2/server/tls/client-ca.crt --egress-selector-config-file=/var/lib/rancher/rke2/server/etc/egress-selector-config.yaml --enable-admission-plugins=NodeRestriction --enable-aggregator-routing=true --enable-bootstrap-token-auth=true --encryption-provider-config=/var/lib/rancher/rke2/server/cred/encryption-config.json --encryption-provider-config-automatic-reload=true --etcd-cafile=/var/lib/rancher/rke2/server/tls/etcd/server-ca.crt --etcd-certfile=/var/lib/rancher/rke2/server/tls/etcd/client.crt --etcd-keyfile=/var/lib/rancher/rke2/server/tls/etcd/client.key --etcd-servers=https://127.0.0.1:2379 --kubelet-certificate-authority=/var/lib/rancher/rke2/server/tls/server-ca.crt --kubelet-client-certificate=/var/lib/rancher/rke2/server/tls/client-kube-apiserver.crt --kubelet-client-key=/var/lib/rancher/rke2/server/tls/client-kube-apiserver.key --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --profiling=false --proxy-client-cert-file=/var/lib/rancher/rke2/server/tls/client-auth-proxy.crt --proxy-client-key-file=/var/lib/rancher/rke2/server/tls/client-auth-proxy.key --requestheader-allowed-names=system:auth-proxy --requestheader-client-ca-file=/var/lib/rancher/rke2/server/tls/request-header-ca.crt --requestheader-extra-headers-prefix=X-Remote-Extra- --requestheader-group-headers=X-Remote-Group --requestheader-username-headers=X-Remote-User --secure-port=6443 --service-account-extend-token-expiration=false --service-account-issuer=https://kubernetes.default.svc.cluster.local --service-account-key-file=/var/lib/rancher/rke2/server/tls/service.key --service-account-signing-key-file=/var/lib/rancher/rke2/server/tls/service.current.key --service-cluster-ip-range=10.43.0.0/16 --service-node-port-range=30000-32767 --storage-backend=etcd3 --tls-cert-file=/var/lib/rancher/rke2/server/tls/serving-kube-apiserver.crt --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --tls-private-key-file=/var/lib/rancher/rke2/server/tls/serving-kube-apiserver.key
Remediação:
Siga a documentação e configure mecanismos alternativos para autenticação. Se esta verificação falhar, edite o arquivo de configuração do RKE2 /etc/rancher/rke2/config.yaml e remova qualquer coisa semelhante ao abaixo.
kube-apiserver-arg: - "token-auth-file=<path>"
1.2.3 Certifique-se de que o --DenyServiceExternalIPs esteja definido (Manual)
Resultado: AVISO
Remediação: Por padrão, o RKE2 não define DenyServiceExternalIPs. Para habilitar esta flag, edite o arquivo de configuração do RKE2 /etc/rancher/rke2/config.yaml como abaixo.
kube-apiserver-arg: - "enable-admission-plugins=DenyServiceExternalIPs"
1.2.4 Certifique-se de que os argumentos --kubelet-client-certificate e --kubelet-client-key estão configurados adequadamente (Automatizado)
Resultado: PASS
Auditoria
/bin/ps -fC kube-apiserver
Resultado Esperado: '--kubelet-client-certificate' está presente E '--kubelet-client-key' está presente
Valor Retornado:
UID PID PPID C STIME TTY TIME CMD
root 18280 17706 5 16:15 ? 00:00:16 kube-apiserver --admission-control-config-file=/etc/rancher/rke2/rke2-pss.yaml --audit-policy-file=/etc/rancher/rke2/audit-policy.yaml --audit-log-maxage=30 --audit-log-maxbackup=10 --audit-log-maxsize=100 --audit-log-path=/var/lib/rancher/rke2/server/logs/audit.log --advertise-address=10.10.10.100 --allow-privileged=true --anonymous-auth=false --api-audiences=https://kubernetes.default.svc.cluster.local,rke2 --authorization-mode=Node,RBAC --bind-address=0.0.0.0 --cert-dir=/var/lib/rancher/rke2/server/tls/temporary-certs --client-ca-file=/var/lib/rancher/rke2/server/tls/client-ca.crt --egress-selector-config-file=/var/lib/rancher/rke2/server/etc/egress-selector-config.yaml --enable-admission-plugins=NodeRestriction --enable-aggregator-routing=true --enable-bootstrap-token-auth=true --encryption-provider-config=/var/lib/rancher/rke2/server/cred/encryption-config.json --encryption-provider-config-automatic-reload=true --etcd-cafile=/var/lib/rancher/rke2/server/tls/etcd/server-ca.crt --etcd-certfile=/var/lib/rancher/rke2/server/tls/etcd/client.crt --etcd-keyfile=/var/lib/rancher/rke2/server/tls/etcd/client.key --etcd-servers=https://127.0.0.1:2379 --kubelet-certificate-authority=/var/lib/rancher/rke2/server/tls/server-ca.crt --kubelet-client-certificate=/var/lib/rancher/rke2/server/tls/client-kube-apiserver.crt --kubelet-client-key=/var/lib/rancher/rke2/server/tls/client-kube-apiserver.key --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --profiling=false --proxy-client-cert-file=/var/lib/rancher/rke2/server/tls/client-auth-proxy.crt --proxy-client-key-file=/var/lib/rancher/rke2/server/tls/client-auth-proxy.key --requestheader-allowed-names=system:auth-proxy --requestheader-client-ca-file=/var/lib/rancher/rke2/server/tls/request-header-ca.crt --requestheader-extra-headers-prefix=X-Remote-Extra- --requestheader-group-headers=X-Remote-Group --requestheader-username-headers=X-Remote-User --secure-port=6443 --service-account-extend-token-expiration=false --service-account-issuer=https://kubernetes.default.svc.cluster.local --service-account-key-file=/var/lib/rancher/rke2/server/tls/service.key --service-account-signing-key-file=/var/lib/rancher/rke2/server/tls/service.current.key --service-cluster-ip-range=10.43.0.0/16 --service-node-port-range=30000-32767 --storage-backend=etcd3 --tls-cert-file=/var/lib/rancher/rke2/server/tls/serving-kube-apiserver.crt --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --tls-private-key-file=/var/lib/rancher/rke2/server/tls/serving-kube-apiserver.key
Remediação:
Por padrão, o RKE2 fornece automaticamente o certificado e a chave do cliente kubelet. Eles são gerados e localizados em /var/lib/rancher/rke2/server/tls/client-kube-apiserver.crt e /var/lib/rancher/rke2/server/tls/client-kube-apiserver.key. Se por algum motivo você precisar fornecer seu próprio certificado e chave, pode definir os parâmetros abaixo no arquivo de configuração do RKE2 /etc/rancher/rke2/config.yaml.
kube-apiserver-arg: - "kubelet-client-certificate=<path/to/client-cert-file>" - "kubelet-client-key=<path/to/client-key-file>"
1.2.5 Certifique-se de que o argumento --kubelet-certificate-authority está configurado adequadamente (Automatizado)
Resultado: PASS
Auditoria
/bin/ps -fC kube-apiserver
Resultado Esperado: '--kubelet-certificate-authority' está presente
Valor Retornado:
UID PID PPID C STIME TTY TIME CMD
root 18280 17706 5 16:15 ? 00:00:16 kube-apiserver --admission-control-config-file=/etc/rancher/rke2/rke2-pss.yaml --audit-policy-file=/etc/rancher/rke2/audit-policy.yaml --audit-log-maxage=30 --audit-log-maxbackup=10 --audit-log-maxsize=100 --audit-log-path=/var/lib/rancher/rke2/server/logs/audit.log --advertise-address=10.10.10.100 --allow-privileged=true --anonymous-auth=false --api-audiences=https://kubernetes.default.svc.cluster.local,rke2 --authorization-mode=Node,RBAC --bind-address=0.0.0.0 --cert-dir=/var/lib/rancher/rke2/server/tls/temporary-certs --client-ca-file=/var/lib/rancher/rke2/server/tls/client-ca.crt --egress-selector-config-file=/var/lib/rancher/rke2/server/etc/egress-selector-config.yaml --enable-admission-plugins=NodeRestriction --enable-aggregator-routing=true --enable-bootstrap-token-auth=true --encryption-provider-config=/var/lib/rancher/rke2/server/cred/encryption-config.json --encryption-provider-config-automatic-reload=true --etcd-cafile=/var/lib/rancher/rke2/server/tls/etcd/server-ca.crt --etcd-certfile=/var/lib/rancher/rke2/server/tls/etcd/client.crt --etcd-keyfile=/var/lib/rancher/rke2/server/tls/etcd/client.key --etcd-servers=https://127.0.0.1:2379 --kubelet-certificate-authority=/var/lib/rancher/rke2/server/tls/server-ca.crt --kubelet-client-certificate=/var/lib/rancher/rke2/server/tls/client-kube-apiserver.crt --kubelet-client-key=/var/lib/rancher/rke2/server/tls/client-kube-apiserver.key --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --profiling=false --proxy-client-cert-file=/var/lib/rancher/rke2/server/tls/client-auth-proxy.crt --proxy-client-key-file=/var/lib/rancher/rke2/server/tls/client-auth-proxy.key --requestheader-allowed-names=system:auth-proxy --requestheader-client-ca-file=/var/lib/rancher/rke2/server/tls/request-header-ca.crt --requestheader-extra-headers-prefix=X-Remote-Extra- --requestheader-group-headers=X-Remote-Group --requestheader-username-headers=X-Remote-User --secure-port=6443 --service-account-extend-token-expiration=false --service-account-issuer=https://kubernetes.default.svc.cluster.local --service-account-key-file=/var/lib/rancher/rke2/server/tls/service.key --service-account-signing-key-file=/var/lib/rancher/rke2/server/tls/service.current.key --service-cluster-ip-range=10.43.0.0/16 --service-node-port-range=30000-32767 --storage-backend=etcd3 --tls-cert-file=/var/lib/rancher/rke2/server/tls/serving-kube-apiserver.crt --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --tls-private-key-file=/var/lib/rancher/rke2/server/tls/serving-kube-apiserver.key
Remediação:
Por padrão, o RKE2 fornece automaticamente o arquivo de certificado CA do kubelet, em /var/lib/rancher/rke2/server/tls/server-ca.crt. Se por algum motivo você precisar fornecer seu próprio certificado CA, considere usar a ferramenta de linha de comando de certificado do rke2. Se esta verificação falhar, edite o arquivo de configuração do RKE2 /etc/rancher/rke2/config.yaml e remova quaisquer linhas como as abaixo.
kube-apiserver-arg: - "kubelet-certificate-authority=<path/to/ca-cert-file>"
1.2.6 Certifique-se de que o argumento --authorization-mode não está definido como AlwaysAllow (Automatizado)
Resultado: PASS
Auditoria
/bin/ps -fC kube-apiserver
Resultado Esperado: '--authorization-mode' não possui 'AlwaysAllow'
Valor Retornado:
UID PID PPID C STIME TTY TIME CMD
root 18280 17706 5 16:15 ? 00:00:16 kube-apiserver --admission-control-config-file=/etc/rancher/rke2/rke2-pss.yaml --audit-policy-file=/etc/rancher/rke2/audit-policy.yaml --audit-log-maxage=30 --audit-log-maxbackup=10 --audit-log-maxsize=100 --audit-log-path=/var/lib/rancher/rke2/server/logs/audit.log --advertise-address=10.10.10.100 --allow-privileged=true --anonymous-auth=false --api-audiences=https://kubernetes.default.svc.cluster.local,rke2 --authorization-mode=Node,RBAC --bind-address=0.0.0.0 --cert-dir=/var/lib/rancher/rke2/server/tls/temporary-certs --client-ca-file=/var/lib/rancher/rke2/server/tls/client-ca.crt --egress-selector-config-file=/var/lib/rancher/rke2/server/etc/egress-selector-config.yaml --enable-admission-plugins=NodeRestriction --enable-aggregator-routing=true --enable-bootstrap-token-auth=true --encryption-provider-config=/var/lib/rancher/rke2/server/cred/encryption-config.json --encryption-provider-config-automatic-reload=true --etcd-cafile=/var/lib/rancher/rke2/server/tls/etcd/server-ca.crt --etcd-certfile=/var/lib/rancher/rke2/server/tls/etcd/client.crt --etcd-keyfile=/var/lib/rancher/rke2/server/tls/etcd/client.key --etcd-servers=https://127.0.0.1:2379 --kubelet-certificate-authority=/var/lib/rancher/rke2/server/tls/server-ca.crt --kubelet-client-certificate=/var/lib/rancher/rke2/server/tls/client-kube-apiserver.crt --kubelet-client-key=/var/lib/rancher/rke2/server/tls/client-kube-apiserver.key --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --profiling=false --proxy-client-cert-file=/var/lib/rancher/rke2/server/tls/client-auth-proxy.crt --proxy-client-key-file=/var/lib/rancher/rke2/server/tls/client-auth-proxy.key --requestheader-allowed-names=system:auth-proxy --requestheader-client-ca-file=/var/lib/rancher/rke2/server/tls/request-header-ca.crt --requestheader-extra-headers-prefix=X-Remote-Extra- --requestheader-group-headers=X-Remote-Group --requestheader-username-headers=X-Remote-User --secure-port=6443 --service-account-extend-token-expiration=false --service-account-issuer=https://kubernetes.default.svc.cluster.local --service-account-key-file=/var/lib/rancher/rke2/server/tls/service.key --service-account-signing-key-file=/var/lib/rancher/rke2/server/tls/service.current.key --service-cluster-ip-range=10.43.0.0/16 --service-node-port-range=30000-32767 --storage-backend=etcd3 --tls-cert-file=/var/lib/rancher/rke2/server/tls/serving-kube-apiserver.crt --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --tls-private-key-file=/var/lib/rancher/rke2/server/tls/serving-kube-apiserver.key
Remediação:
Por padrão, o RKE2 não define o --authorization-mode como AlwaysAllow. Se esta verificação falhar, edite o arquivo de configuração do RKE2 /etc/rancher/rke2/config.yaml, remova quaisquer linhas como as abaixo.
kube-apiserver-arg: - "authorization-mode=AlwaysAllow"
1.2.7 Certifique-se de que o argumento --authorization-mode inclui Node (Automatizado)
Resultado: PASS
Auditoria
/bin/ps -fC kube-apiserver
Resultado Esperado: '--authorization-mode' tem 'Node'
Valor Retornado:
UID PID PPID C STIME TTY TIME CMD
root 18280 17706 5 16:15 ? 00:00:16 kube-apiserver --admission-control-config-file=/etc/rancher/rke2/rke2-pss.yaml --audit-policy-file=/etc/rancher/rke2/audit-policy.yaml --audit-log-maxage=30 --audit-log-maxbackup=10 --audit-log-maxsize=100 --audit-log-path=/var/lib/rancher/rke2/server/logs/audit.log --advertise-address=10.10.10.100 --allow-privileged=true --anonymous-auth=false --api-audiences=https://kubernetes.default.svc.cluster.local,rke2 --authorization-mode=Node,RBAC --bind-address=0.0.0.0 --cert-dir=/var/lib/rancher/rke2/server/tls/temporary-certs --client-ca-file=/var/lib/rancher/rke2/server/tls/client-ca.crt --egress-selector-config-file=/var/lib/rancher/rke2/server/etc/egress-selector-config.yaml --enable-admission-plugins=NodeRestriction --enable-aggregator-routing=true --enable-bootstrap-token-auth=true --encryption-provider-config=/var/lib/rancher/rke2/server/cred/encryption-config.json --encryption-provider-config-automatic-reload=true --etcd-cafile=/var/lib/rancher/rke2/server/tls/etcd/server-ca.crt --etcd-certfile=/var/lib/rancher/rke2/server/tls/etcd/client.crt --etcd-keyfile=/var/lib/rancher/rke2/server/tls/etcd/client.key --etcd-servers=https://127.0.0.1:2379 --kubelet-certificate-authority=/var/lib/rancher/rke2/server/tls/server-ca.crt --kubelet-client-certificate=/var/lib/rancher/rke2/server/tls/client-kube-apiserver.crt --kubelet-client-key=/var/lib/rancher/rke2/server/tls/client-kube-apiserver.key --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --profiling=false --proxy-client-cert-file=/var/lib/rancher/rke2/server/tls/client-auth-proxy.crt --proxy-client-key-file=/var/lib/rancher/rke2/server/tls/client-auth-proxy.key --requestheader-allowed-names=system:auth-proxy --requestheader-client-ca-file=/var/lib/rancher/rke2/server/tls/request-header-ca.crt --requestheader-extra-headers-prefix=X-Remote-Extra- --requestheader-group-headers=X-Remote-Group --requestheader-username-headers=X-Remote-User --secure-port=6443 --service-account-extend-token-expiration=false --service-account-issuer=https://kubernetes.default.svc.cluster.local --service-account-key-file=/var/lib/rancher/rke2/server/tls/service.key --service-account-signing-key-file=/var/lib/rancher/rke2/server/tls/service.current.key --service-cluster-ip-range=10.43.0.0/16 --service-node-port-range=30000-32767 --storage-backend=etcd3 --tls-cert-file=/var/lib/rancher/rke2/server/tls/serving-kube-apiserver.crt --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --tls-private-key-file=/var/lib/rancher/rke2/server/tls/serving-kube-apiserver.key
Remediação:
Por padrão, o RKE2 define o --authorization-mode como Node e RBAC. Se esta verificação falhar, edite o arquivo de configuração do RKE2 /etc/rancher/rke2/config.yaml, assegurando que você não está sobrescrevendo o authorization-mode.
1.2.8 Certifique-se de que o argumento --authorization-mode inclui RBAC (Automatizado)
Resultado: PASS
Auditoria
/bin/ps -fC kube-apiserver
Resultado Esperado: '--authorization-mode' tem 'RBAC'
Valor Retornado:
UID PID PPID C STIME TTY TIME CMD
root 18280 17706 5 16:15 ? 00:00:16 kube-apiserver --admission-control-config-file=/etc/rancher/rke2/rke2-pss.yaml --audit-policy-file=/etc/rancher/rke2/audit-policy.yaml --audit-log-maxage=30 --audit-log-maxbackup=10 --audit-log-maxsize=100 --audit-log-path=/var/lib/rancher/rke2/server/logs/audit.log --advertise-address=10.10.10.100 --allow-privileged=true --anonymous-auth=false --api-audiences=https://kubernetes.default.svc.cluster.local,rke2 --authorization-mode=Node,RBAC --bind-address=0.0.0.0 --cert-dir=/var/lib/rancher/rke2/server/tls/temporary-certs --client-ca-file=/var/lib/rancher/rke2/server/tls/client-ca.crt --egress-selector-config-file=/var/lib/rancher/rke2/server/etc/egress-selector-config.yaml --enable-admission-plugins=NodeRestriction --enable-aggregator-routing=true --enable-bootstrap-token-auth=true --encryption-provider-config=/var/lib/rancher/rke2/server/cred/encryption-config.json --encryption-provider-config-automatic-reload=true --etcd-cafile=/var/lib/rancher/rke2/server/tls/etcd/server-ca.crt --etcd-certfile=/var/lib/rancher/rke2/server/tls/etcd/client.crt --etcd-keyfile=/var/lib/rancher/rke2/server/tls/etcd/client.key --etcd-servers=https://127.0.0.1:2379 --kubelet-certificate-authority=/var/lib/rancher/rke2/server/tls/server-ca.crt --kubelet-client-certificate=/var/lib/rancher/rke2/server/tls/client-kube-apiserver.crt --kubelet-client-key=/var/lib/rancher/rke2/server/tls/client-kube-apiserver.key --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --profiling=false --proxy-client-cert-file=/var/lib/rancher/rke2/server/tls/client-auth-proxy.crt --proxy-client-key-file=/var/lib/rancher/rke2/server/tls/client-auth-proxy.key --requestheader-allowed-names=system:auth-proxy --requestheader-client-ca-file=/var/lib/rancher/rke2/server/tls/request-header-ca.crt --requestheader-extra-headers-prefix=X-Remote-Extra- --requestheader-group-headers=X-Remote-Group --requestheader-username-headers=X-Remote-User --secure-port=6443 --service-account-extend-token-expiration=false --service-account-issuer=https://kubernetes.default.svc.cluster.local --service-account-key-file=/var/lib/rancher/rke2/server/tls/service.key --service-account-signing-key-file=/var/lib/rancher/rke2/server/tls/service.current.key --service-cluster-ip-range=10.43.0.0/16 --service-node-port-range=30000-32767 --storage-backend=etcd3 --tls-cert-file=/var/lib/rancher/rke2/server/tls/serving-kube-apiserver.crt --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --tls-private-key-file=/var/lib/rancher/rke2/server/tls/serving-kube-apiserver.key
Remediação:
Por padrão, o RKE2 define o --authorization-mode como Node e RBAC. Se esta verificação falhar, edite o arquivo de configuração do RKE2 /etc/rancher/rke2/config.yaml, assegurando que você não está sobrescrevendo o authorization-mode.
1.2.9 Certifique-se de que o plugin de controle de admissão EventRateLimit esteja configurado (Manual)
Resultado: AVISO
Remediação: Siga a documentação do Kubernetes e defina os limites desejados em um arquivo de configuração. Em seguida, edite o arquivo de configuração do RKE2 /etc/rancher/rke2/config.yaml e defina os parâmetros abaixo.
kube-apiserver-arg: - "enable-admission-plugins=...,EventRateLimit,..." - "admission-control-config-file=<path/to/configuration/file>"
1.2.10 Certifique-se de que o plugin de controle de admissão AlwaysAdmit não esteja configurado (Automatizado)
Resultado: PASS
Auditoria
/bin/ps -fC kube-apiserver
Resultado Esperado: '--enable-admission-plugins' não possui 'AlwaysAdmit' OU '--enable-admission-plugins' não está presente
Valor Retornado:
UID PID PPID C STIME TTY TIME CMD
root 18280 17706 5 16:15 ? 00:00:16 kube-apiserver --admission-control-config-file=/etc/rancher/rke2/rke2-pss.yaml --audit-policy-file=/etc/rancher/rke2/audit-policy.yaml --audit-log-maxage=30 --audit-log-maxbackup=10 --audit-log-maxsize=100 --audit-log-path=/var/lib/rancher/rke2/server/logs/audit.log --advertise-address=10.10.10.100 --allow-privileged=true --anonymous-auth=false --api-audiences=https://kubernetes.default.svc.cluster.local,rke2 --authorization-mode=Node,RBAC --bind-address=0.0.0.0 --cert-dir=/var/lib/rancher/rke2/server/tls/temporary-certs --client-ca-file=/var/lib/rancher/rke2/server/tls/client-ca.crt --egress-selector-config-file=/var/lib/rancher/rke2/server/etc/egress-selector-config.yaml --enable-admission-plugins=NodeRestriction --enable-aggregator-routing=true --enable-bootstrap-token-auth=true --encryption-provider-config=/var/lib/rancher/rke2/server/cred/encryption-config.json --encryption-provider-config-automatic-reload=true --etcd-cafile=/var/lib/rancher/rke2/server/tls/etcd/server-ca.crt --etcd-certfile=/var/lib/rancher/rke2/server/tls/etcd/client.crt --etcd-keyfile=/var/lib/rancher/rke2/server/tls/etcd/client.key --etcd-servers=https://127.0.0.1:2379 --kubelet-certificate-authority=/var/lib/rancher/rke2/server/tls/server-ca.crt --kubelet-client-certificate=/var/lib/rancher/rke2/server/tls/client-kube-apiserver.crt --kubelet-client-key=/var/lib/rancher/rke2/server/tls/client-kube-apiserver.key --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --profiling=false --proxy-client-cert-file=/var/lib/rancher/rke2/server/tls/client-auth-proxy.crt --proxy-client-key-file=/var/lib/rancher/rke2/server/tls/client-auth-proxy.key --requestheader-allowed-names=system:auth-proxy --requestheader-client-ca-file=/var/lib/rancher/rke2/server/tls/request-header-ca.crt --requestheader-extra-headers-prefix=X-Remote-Extra- --requestheader-group-headers=X-Remote-Group --requestheader-username-headers=X-Remote-User --secure-port=6443 --service-account-extend-token-expiration=false --service-account-issuer=https://kubernetes.default.svc.cluster.local --service-account-key-file=/var/lib/rancher/rke2/server/tls/service.key --service-account-signing-key-file=/var/lib/rancher/rke2/server/tls/service.current.key --service-cluster-ip-range=10.43.0.0/16 --service-node-port-range=30000-32767 --storage-backend=etcd3 --tls-cert-file=/var/lib/rancher/rke2/server/tls/serving-kube-apiserver.crt --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --tls-private-key-file=/var/lib/rancher/rke2/server/tls/serving-kube-apiserver.key
Remediação:
Por padrão, o RKE2 não define o --enable-admission-plugins como AlwaysAdmit. Se esta verificação falhar, edite o arquivo de configuração do RKE2 /etc/rancher/rke2/config.yaml, remova quaisquer linhas como abaixo.
kube-apiserver-arg: - "enable-admission-plugins=AlwaysAdmit"
1.2.11 Certifique-se de que o plugin de controle de admissão AlwaysPullImages esteja configurado (Manual)
Resultado: AVISO
Remediação: Permissivo, de acordo com as diretrizes do CIS, "Esta configuração pode impactar clusters offline ou isolados, que têm imagens pré-carregadas e não têm acesso a um registro para puxar imagens em uso." Esta configuração não é apropriada para clusters que utilizam esta configuração." Edite o arquivo de configuração do RKE2 /etc/rancher/rke2/config.yaml no nó de controle e defina o parâmetro --enable-admission-plugins para incluir AlwaysPullImages. --enable-admission-plugins=…,AlwaysPullImages,…
1.2.12 Certifique-se de que o plugin de controle de admissão ServiceAccount esteja configurado (Automatizado)
Resultado: PASS
Auditoria
/bin/ps -fC kube-apiserver
Resultado Esperado: '--disable-admission-plugins' está presente OU '--disable-admission-plugins' não está presente
Valor Retornado:
UID PID PPID C STIME TTY TIME CMD
root 18280 17706 5 16:15 ? 00:00:16 kube-apiserver --admission-control-config-file=/etc/rancher/rke2/rke2-pss.yaml --audit-policy-file=/etc/rancher/rke2/audit-policy.yaml --audit-log-maxage=30 --audit-log-maxbackup=10 --audit-log-maxsize=100 --audit-log-path=/var/lib/rancher/rke2/server/logs/audit.log --advertise-address=10.10.10.100 --allow-privileged=true --anonymous-auth=false --api-audiences=https://kubernetes.default.svc.cluster.local,rke2 --authorization-mode=Node,RBAC --bind-address=0.0.0.0 --cert-dir=/var/lib/rancher/rke2/server/tls/temporary-certs --client-ca-file=/var/lib/rancher/rke2/server/tls/client-ca.crt --egress-selector-config-file=/var/lib/rancher/rke2/server/etc/egress-selector-config.yaml --enable-admission-plugins=NodeRestriction --enable-aggregator-routing=true --enable-bootstrap-token-auth=true --encryption-provider-config=/var/lib/rancher/rke2/server/cred/encryption-config.json --encryption-provider-config-automatic-reload=true --etcd-cafile=/var/lib/rancher/rke2/server/tls/etcd/server-ca.crt --etcd-certfile=/var/lib/rancher/rke2/server/tls/etcd/client.crt --etcd-keyfile=/var/lib/rancher/rke2/server/tls/etcd/client.key --etcd-servers=https://127.0.0.1:2379 --kubelet-certificate-authority=/var/lib/rancher/rke2/server/tls/server-ca.crt --kubelet-client-certificate=/var/lib/rancher/rke2/server/tls/client-kube-apiserver.crt --kubelet-client-key=/var/lib/rancher/rke2/server/tls/client-kube-apiserver.key --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --profiling=false --proxy-client-cert-file=/var/lib/rancher/rke2/server/tls/client-auth-proxy.crt --proxy-client-key-file=/var/lib/rancher/rke2/server/tls/client-auth-proxy.key --requestheader-allowed-names=system:auth-proxy --requestheader-client-ca-file=/var/lib/rancher/rke2/server/tls/request-header-ca.crt --requestheader-extra-headers-prefix=X-Remote-Extra- --requestheader-group-headers=X-Remote-Group --requestheader-username-headers=X-Remote-User --secure-port=6443 --service-account-extend-token-expiration=false --service-account-issuer=https://kubernetes.default.svc.cluster.local --service-account-key-file=/var/lib/rancher/rke2/server/tls/service.key --service-account-signing-key-file=/var/lib/rancher/rke2/server/tls/service.current.key --service-cluster-ip-range=10.43.0.0/16 --service-node-port-range=30000-32767 --storage-backend=etcd3 --tls-cert-file=/var/lib/rancher/rke2/server/tls/serving-kube-apiserver.crt --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --tls-private-key-file=/var/lib/rancher/rke2/server/tls/serving-kube-apiserver.key
Remediação:
Por padrão, o RKE2 não define o --disable-admission-plugins para nada. Siga a documentação e crie objetos ServiceAccount conforme seu ambiente. Se esta verificação falhar, edite o arquivo de configuração do RKE2 /etc/rancher/rke2/config.yaml e remova quaisquer linhas como abaixo.
kube-apiserver-arg: - "disable-admission-plugins=ServiceAccount"
1.2.13 Certifique-se de que o plugin de controle de admissão NamespaceLifecycle esteja configurado (Automatizado)
Resultado: PASS
Auditoria
/bin/ps -fC kube-apiserver
Resultado Esperado: '--disable-admission-plugins' está presente OU '--disable-admission-plugins' não está presente
Valor Retornado:
UID PID PPID C STIME TTY TIME CMD
root 18280 17706 5 16:15 ? 00:00:16 kube-apiserver --admission-control-config-file=/etc/rancher/rke2/rke2-pss.yaml --audit-policy-file=/etc/rancher/rke2/audit-policy.yaml --audit-log-maxage=30 --audit-log-maxbackup=10 --audit-log-maxsize=100 --audit-log-path=/var/lib/rancher/rke2/server/logs/audit.log --advertise-address=10.10.10.100 --allow-privileged=true --anonymous-auth=false --api-audiences=https://kubernetes.default.svc.cluster.local,rke2 --authorization-mode=Node,RBAC --bind-address=0.0.0.0 --cert-dir=/var/lib/rancher/rke2/server/tls/temporary-certs --client-ca-file=/var/lib/rancher/rke2/server/tls/client-ca.crt --egress-selector-config-file=/var/lib/rancher/rke2/server/etc/egress-selector-config.yaml --enable-admission-plugins=NodeRestriction --enable-aggregator-routing=true --enable-bootstrap-token-auth=true --encryption-provider-config=/var/lib/rancher/rke2/server/cred/encryption-config.json --encryption-provider-config-automatic-reload=true --etcd-cafile=/var/lib/rancher/rke2/server/tls/etcd/server-ca.crt --etcd-certfile=/var/lib/rancher/rke2/server/tls/etcd/client.crt --etcd-keyfile=/var/lib/rancher/rke2/server/tls/etcd/client.key --etcd-servers=https://127.0.0.1:2379 --kubelet-certificate-authority=/var/lib/rancher/rke2/server/tls/server-ca.crt --kubelet-client-certificate=/var/lib/rancher/rke2/server/tls/client-kube-apiserver.crt --kubelet-client-key=/var/lib/rancher/rke2/server/tls/client-kube-apiserver.key --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --profiling=false --proxy-client-cert-file=/var/lib/rancher/rke2/server/tls/client-auth-proxy.crt --proxy-client-key-file=/var/lib/rancher/rke2/server/tls/client-auth-proxy.key --requestheader-allowed-names=system:auth-proxy --requestheader-client-ca-file=/var/lib/rancher/rke2/server/tls/request-header-ca.crt --requestheader-extra-headers-prefix=X-Remote-Extra- --requestheader-group-headers=X-Remote-Group --requestheader-username-headers=X-Remote-User --secure-port=6443 --service-account-extend-token-expiration=false --service-account-issuer=https://kubernetes.default.svc.cluster.local --service-account-key-file=/var/lib/rancher/rke2/server/tls/service.key --service-account-signing-key-file=/var/lib/rancher/rke2/server/tls/service.current.key --service-cluster-ip-range=10.43.0.0/16 --service-node-port-range=30000-32767 --storage-backend=etcd3 --tls-cert-file=/var/lib/rancher/rke2/server/tls/serving-kube-apiserver.crt --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --tls-private-key-file=/var/lib/rancher/rke2/server/tls/serving-kube-apiserver.key
Remediação:
Por padrão, o RKE2 não define o --disable-admission-plugins para nada. Se esta verificação falhar, edite o arquivo de configuração do RKE2 /etc/rancher/rke2/config.yaml e remova quaisquer linhas como abaixo.
kube-apiserver-arg: - "disable-admission-plugins=...,NamespaceLifecycle,..."
1.2.14 Certifique-se de que o plugin de controle de admissão NodeRestriction esteja configurado (Automatizado)
Resultado: PASS
Auditoria
/bin/ps -fC kube-apiserver
Resultado Esperado: '--enable-admission-plugins' possui 'NodeRestriction'
Valor Retornado:
UID PID PPID C STIME TTY TIME CMD
root 18280 17706 5 16:15 ? 00:00:16 kube-apiserver --admission-control-config-file=/etc/rancher/rke2/rke2-pss.yaml --audit-policy-file=/etc/rancher/rke2/audit-policy.yaml --audit-log-maxage=30 --audit-log-maxbackup=10 --audit-log-maxsize=100 --audit-log-path=/var/lib/rancher/rke2/server/logs/audit.log --advertise-address=10.10.10.100 --allow-privileged=true --anonymous-auth=false --api-audiences=https://kubernetes.default.svc.cluster.local,rke2 --authorization-mode=Node,RBAC --bind-address=0.0.0.0 --cert-dir=/var/lib/rancher/rke2/server/tls/temporary-certs --client-ca-file=/var/lib/rancher/rke2/server/tls/client-ca.crt --egress-selector-config-file=/var/lib/rancher/rke2/server/etc/egress-selector-config.yaml --enable-admission-plugins=NodeRestriction --enable-aggregator-routing=true --enable-bootstrap-token-auth=true --encryption-provider-config=/var/lib/rancher/rke2/server/cred/encryption-config.json --encryption-provider-config-automatic-reload=true --etcd-cafile=/var/lib/rancher/rke2/server/tls/etcd/server-ca.crt --etcd-certfile=/var/lib/rancher/rke2/server/tls/etcd/client.crt --etcd-keyfile=/var/lib/rancher/rke2/server/tls/etcd/client.key --etcd-servers=https://127.0.0.1:2379 --kubelet-certificate-authority=/var/lib/rancher/rke2/server/tls/server-ca.crt --kubelet-client-certificate=/var/lib/rancher/rke2/server/tls/client-kube-apiserver.crt --kubelet-client-key=/var/lib/rancher/rke2/server/tls/client-kube-apiserver.key --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --profiling=false --proxy-client-cert-file=/var/lib/rancher/rke2/server/tls/client-auth-proxy.crt --proxy-client-key-file=/var/lib/rancher/rke2/server/tls/client-auth-proxy.key --requestheader-allowed-names=system:auth-proxy --requestheader-client-ca-file=/var/lib/rancher/rke2/server/tls/request-header-ca.crt --requestheader-extra-headers-prefix=X-Remote-Extra- --requestheader-group-headers=X-Remote-Group --requestheader-username-headers=X-Remote-User --secure-port=6443 --service-account-extend-token-expiration=false --service-account-issuer=https://kubernetes.default.svc.cluster.local --service-account-key-file=/var/lib/rancher/rke2/server/tls/service.key --service-account-signing-key-file=/var/lib/rancher/rke2/server/tls/service.current.key --service-cluster-ip-range=10.43.0.0/16 --service-node-port-range=30000-32767 --storage-backend=etcd3 --tls-cert-file=/var/lib/rancher/rke2/server/tls/serving-kube-apiserver.crt --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --tls-private-key-file=/var/lib/rancher/rke2/server/tls/serving-kube-apiserver.key
Remediação:
Por padrão, o RKE2 configura o --enable-admission-plugins para NodeRestriction. Verifique o arquivo de configuração do RKE2 /etc/rancher/rke2/config.yaml e assegure-se de que você não está sobrescrevendo os plugins de admissão. Se estiver, inclua NodeRestriction na lista.
kube-apiserver-arg: - "enable-admission-plugins=...,NodeRestriction,..."
1.2.15 Certifique-se de que o --argumento 'profiling' esteja definido como falso (Automatizado)
Resultado: PASS
Auditoria
/bin/ps -fC kube-apiserver
Resultado Esperado: '--profiling' é igual a 'false'
Valor Retornado:
UID PID PPID C STIME TTY TIME CMD
root 18280 17706 5 16:15 ? 00:00:16 kube-apiserver --admission-control-config-file=/etc/rancher/rke2/rke2-pss.yaml --audit-policy-file=/etc/rancher/rke2/audit-policy.yaml --audit-log-maxage=30 --audit-log-maxbackup=10 --audit-log-maxsize=100 --audit-log-path=/var/lib/rancher/rke2/server/logs/audit.log --advertise-address=10.10.10.100 --allow-privileged=true --anonymous-auth=false --api-audiences=https://kubernetes.default.svc.cluster.local,rke2 --authorization-mode=Node,RBAC --bind-address=0.0.0.0 --cert-dir=/var/lib/rancher/rke2/server/tls/temporary-certs --client-ca-file=/var/lib/rancher/rke2/server/tls/client-ca.crt --egress-selector-config-file=/var/lib/rancher/rke2/server/etc/egress-selector-config.yaml --enable-admission-plugins=NodeRestriction --enable-aggregator-routing=true --enable-bootstrap-token-auth=true --encryption-provider-config=/var/lib/rancher/rke2/server/cred/encryption-config.json --encryption-provider-config-automatic-reload=true --etcd-cafile=/var/lib/rancher/rke2/server/tls/etcd/server-ca.crt --etcd-certfile=/var/lib/rancher/rke2/server/tls/etcd/client.crt --etcd-keyfile=/var/lib/rancher/rke2/server/tls/etcd/client.key --etcd-servers=https://127.0.0.1:2379 --kubelet-certificate-authority=/var/lib/rancher/rke2/server/tls/server-ca.crt --kubelet-client-certificate=/var/lib/rancher/rke2/server/tls/client-kube-apiserver.crt --kubelet-client-key=/var/lib/rancher/rke2/server/tls/client-kube-apiserver.key --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --profiling=false --proxy-client-cert-file=/var/lib/rancher/rke2/server/tls/client-auth-proxy.crt --proxy-client-key-file=/var/lib/rancher/rke2/server/tls/client-auth-proxy.key --requestheader-allowed-names=system:auth-proxy --requestheader-client-ca-file=/var/lib/rancher/rke2/server/tls/request-header-ca.crt --requestheader-extra-headers-prefix=X-Remote-Extra- --requestheader-group-headers=X-Remote-Group --requestheader-username-headers=X-Remote-User --secure-port=6443 --service-account-extend-token-expiration=false --service-account-issuer=https://kubernetes.default.svc.cluster.local --service-account-key-file=/var/lib/rancher/rke2/server/tls/service.key --service-account-signing-key-file=/var/lib/rancher/rke2/server/tls/service.current.key --service-cluster-ip-range=10.43.0.0/16 --service-node-port-range=30000-32767 --storage-backend=etcd3 --tls-cert-file=/var/lib/rancher/rke2/server/tls/serving-kube-apiserver.crt --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --tls-private-key-file=/var/lib/rancher/rke2/server/tls/serving-kube-apiserver.key
Remediação:
Por padrão, o RKE2 define o argumento --profiling como false. Se esta verificação falhar, edite o arquivo de configuração do RKE2 /etc/rancher/rke2/config.yaml e remova quaisquer linhas como abaixo.
kube-apiserver-arg: - "profiling=true"
1.2.16 Certifique-se de que o argumento --audit-log-path esteja definido (Automatizado)
Resultado: PASS
Auditoria
/bin/ps -fC kube-apiserver
Resultado Esperado: '--audit-log-path' está presente
Valor Retornado:
UID PID PPID C STIME TTY TIME CMD
root 18280 17706 5 16:15 ? 00:00:16 kube-apiserver --admission-control-config-file=/etc/rancher/rke2/rke2-pss.yaml --audit-policy-file=/etc/rancher/rke2/audit-policy.yaml --audit-log-maxage=30 --audit-log-maxbackup=10 --audit-log-maxsize=100 --audit-log-path=/var/lib/rancher/rke2/server/logs/audit.log --advertise-address=10.10.10.100 --allow-privileged=true --anonymous-auth=false --api-audiences=https://kubernetes.default.svc.cluster.local,rke2 --authorization-mode=Node,RBAC --bind-address=0.0.0.0 --cert-dir=/var/lib/rancher/rke2/server/tls/temporary-certs --client-ca-file=/var/lib/rancher/rke2/server/tls/client-ca.crt --egress-selector-config-file=/var/lib/rancher/rke2/server/etc/egress-selector-config.yaml --enable-admission-plugins=NodeRestriction --enable-aggregator-routing=true --enable-bootstrap-token-auth=true --encryption-provider-config=/var/lib/rancher/rke2/server/cred/encryption-config.json --encryption-provider-config-automatic-reload=true --etcd-cafile=/var/lib/rancher/rke2/server/tls/etcd/server-ca.crt --etcd-certfile=/var/lib/rancher/rke2/server/tls/etcd/client.crt --etcd-keyfile=/var/lib/rancher/rke2/server/tls/etcd/client.key --etcd-servers=https://127.0.0.1:2379 --kubelet-certificate-authority=/var/lib/rancher/rke2/server/tls/server-ca.crt --kubelet-client-certificate=/var/lib/rancher/rke2/server/tls/client-kube-apiserver.crt --kubelet-client-key=/var/lib/rancher/rke2/server/tls/client-kube-apiserver.key --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --profiling=false --proxy-client-cert-file=/var/lib/rancher/rke2/server/tls/client-auth-proxy.crt --proxy-client-key-file=/var/lib/rancher/rke2/server/tls/client-auth-proxy.key --requestheader-allowed-names=system:auth-proxy --requestheader-client-ca-file=/var/lib/rancher/rke2/server/tls/request-header-ca.crt --requestheader-extra-headers-prefix=X-Remote-Extra- --requestheader-group-headers=X-Remote-Group --requestheader-username-headers=X-Remote-User --secure-port=6443 --service-account-extend-token-expiration=false --service-account-issuer=https://kubernetes.default.svc.cluster.local --service-account-key-file=/var/lib/rancher/rke2/server/tls/service.key --service-account-signing-key-file=/var/lib/rancher/rke2/server/tls/service.current.key --service-cluster-ip-range=10.43.0.0/16 --service-node-port-range=30000-32767 --storage-backend=etcd3 --tls-cert-file=/var/lib/rancher/rke2/server/tls/serving-kube-apiserver.crt --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --tls-private-key-file=/var/lib/rancher/rke2/server/tls/serving-kube-apiserver.key
Remediação:
Por padrão, o RKE2 define o argumento --audit-log-path como /var/lib/rancher/rke2/server/logs/audit.log. Se você quiser mudar isso, edite o arquivo de configuração do RKE2 /etc/rancher/rke2/config.yaml no nó de controle e defina o parâmetro --audit-log-path para um caminho e arquivo adequados onde você gostaria que os logs de auditoria fossem gravados, por exemplo,
kube-apiserver-arg: - "audit-log-path=/var/log/rke2/audit.log"
1.2.17 Certifique-se de que o argumento --audit-log-maxage esteja definido como 30 ou conforme apropriado (Automatizado)
Resultado: PASS
Auditoria
/bin/ps -fC kube-apiserver
Resultado Esperado: '--audit-log-maxage' é maior ou igual a 30
Valor Retornado:
UID PID PPID C STIME TTY TIME CMD
root 18280 17706 5 16:15 ? 00:00:16 kube-apiserver --admission-control-config-file=/etc/rancher/rke2/rke2-pss.yaml --audit-policy-file=/etc/rancher/rke2/audit-policy.yaml --audit-log-maxage=30 --audit-log-maxbackup=10 --audit-log-maxsize=100 --audit-log-path=/var/lib/rancher/rke2/server/logs/audit.log --advertise-address=10.10.10.100 --allow-privileged=true --anonymous-auth=false --api-audiences=https://kubernetes.default.svc.cluster.local,rke2 --authorization-mode=Node,RBAC --bind-address=0.0.0.0 --cert-dir=/var/lib/rancher/rke2/server/tls/temporary-certs --client-ca-file=/var/lib/rancher/rke2/server/tls/client-ca.crt --egress-selector-config-file=/var/lib/rancher/rke2/server/etc/egress-selector-config.yaml --enable-admission-plugins=NodeRestriction --enable-aggregator-routing=true --enable-bootstrap-token-auth=true --encryption-provider-config=/var/lib/rancher/rke2/server/cred/encryption-config.json --encryption-provider-config-automatic-reload=true --etcd-cafile=/var/lib/rancher/rke2/server/tls/etcd/server-ca.crt --etcd-certfile=/var/lib/rancher/rke2/server/tls/etcd/client.crt --etcd-keyfile=/var/lib/rancher/rke2/server/tls/etcd/client.key --etcd-servers=https://127.0.0.1:2379 --kubelet-certificate-authority=/var/lib/rancher/rke2/server/tls/server-ca.crt --kubelet-client-certificate=/var/lib/rancher/rke2/server/tls/client-kube-apiserver.crt --kubelet-client-key=/var/lib/rancher/rke2/server/tls/client-kube-apiserver.key --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --profiling=false --proxy-client-cert-file=/var/lib/rancher/rke2/server/tls/client-auth-proxy.crt --proxy-client-key-file=/var/lib/rancher/rke2/server/tls/client-auth-proxy.key --requestheader-allowed-names=system:auth-proxy --requestheader-client-ca-file=/var/lib/rancher/rke2/server/tls/request-header-ca.crt --requestheader-extra-headers-prefix=X-Remote-Extra- --requestheader-group-headers=X-Remote-Group --requestheader-username-headers=X-Remote-User --secure-port=6443 --service-account-extend-token-expiration=false --service-account-issuer=https://kubernetes.default.svc.cluster.local --service-account-key-file=/var/lib/rancher/rke2/server/tls/service.key --service-account-signing-key-file=/var/lib/rancher/rke2/server/tls/service.current.key --service-cluster-ip-range=10.43.0.0/16 --service-node-port-range=30000-32767 --storage-backend=etcd3 --tls-cert-file=/var/lib/rancher/rke2/server/tls/serving-kube-apiserver.crt --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --tls-private-key-file=/var/lib/rancher/rke2/server/tls/serving-kube-apiserver.key
Remediação:
Por padrão, o RKE2 define o argumento --audit-log-maxage como 30 dias. Se você quiser mudar isso, edite o arquivo de configuração do RKE2 /etc/rancher/rke2/config.yaml no nó de controle e defina o parâmetro --audit-log-maxage para um número apropriado de dias, por exemplo,
kube-apiserver-arg: - "audit-log-maxage=40"
1.2.18 Certifique-se de que o argumento --audit-log-maxbackup esteja definido como 10 ou conforme apropriado (Automatizado)
Resultado: PASS
Auditoria
/bin/ps -fC kube-apiserver
Resultado Esperado: '--audit-log-maxbackup' é maior ou igual a 10
Valor Retornado:
UID PID PPID C STIME TTY TIME CMD
root 18280 17706 5 16:15 ? 00:00:16 kube-apiserver --admission-control-config-file=/etc/rancher/rke2/rke2-pss.yaml --audit-policy-file=/etc/rancher/rke2/audit-policy.yaml --audit-log-maxage=30 --audit-log-maxbackup=10 --audit-log-maxsize=100 --audit-log-path=/var/lib/rancher/rke2/server/logs/audit.log --advertise-address=10.10.10.100 --allow-privileged=true --anonymous-auth=false --api-audiences=https://kubernetes.default.svc.cluster.local,rke2 --authorization-mode=Node,RBAC --bind-address=0.0.0.0 --cert-dir=/var/lib/rancher/rke2/server/tls/temporary-certs --client-ca-file=/var/lib/rancher/rke2/server/tls/client-ca.crt --egress-selector-config-file=/var/lib/rancher/rke2/server/etc/egress-selector-config.yaml --enable-admission-plugins=NodeRestriction --enable-aggregator-routing=true --enable-bootstrap-token-auth=true --encryption-provider-config=/var/lib/rancher/rke2/server/cred/encryption-config.json --encryption-provider-config-automatic-reload=true --etcd-cafile=/var/lib/rancher/rke2/server/tls/etcd/server-ca.crt --etcd-certfile=/var/lib/rancher/rke2/server/tls/etcd/client.crt --etcd-keyfile=/var/lib/rancher/rke2/server/tls/etcd/client.key --etcd-servers=https://127.0.0.1:2379 --kubelet-certificate-authority=/var/lib/rancher/rke2/server/tls/server-ca.crt --kubelet-client-certificate=/var/lib/rancher/rke2/server/tls/client-kube-apiserver.crt --kubelet-client-key=/var/lib/rancher/rke2/server/tls/client-kube-apiserver.key --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --profiling=false --proxy-client-cert-file=/var/lib/rancher/rke2/server/tls/client-auth-proxy.crt --proxy-client-key-file=/var/lib/rancher/rke2/server/tls/client-auth-proxy.key --requestheader-allowed-names=system:auth-proxy --requestheader-client-ca-file=/var/lib/rancher/rke2/server/tls/request-header-ca.crt --requestheader-extra-headers-prefix=X-Remote-Extra- --requestheader-group-headers=X-Remote-Group --requestheader-username-headers=X-Remote-User --secure-port=6443 --service-account-extend-token-expiration=false --service-account-issuer=https://kubernetes.default.svc.cluster.local --service-account-key-file=/var/lib/rancher/rke2/server/tls/service.key --service-account-signing-key-file=/var/lib/rancher/rke2/server/tls/service.current.key --service-cluster-ip-range=10.43.0.0/16 --service-node-port-range=30000-32767 --storage-backend=etcd3 --tls-cert-file=/var/lib/rancher/rke2/server/tls/serving-kube-apiserver.crt --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --tls-private-key-file=/var/lib/rancher/rke2/server/tls/serving-kube-apiserver.key
Remediação:
Por padrão, o RKE2 define o argumento --audit-log-maxbackup como 10. Se você quiser mudar isso, edite o arquivo de configuração do RKE2 /etc/rancher/rke2/config.yaml no nó de controle e defina o parâmetro --audit-log-maxbackup para um valor apropriado. Por exemplo,
kube-apiserver-arg: - "audit-log-maxbackup=15"
1.2.19 Certifique-se de que o argumento --audit-log-maxsize esteja definido como 100 ou conforme apropriado (Automatizado)
Resultado: PASS
Auditoria
/bin/ps -fC kube-apiserver
Resultado Esperado: '--audit-log-maxsize' é maior ou igual a 100
Valor Retornado:
UID PID PPID C STIME TTY TIME CMD
root 18280 17706 5 16:15 ? 00:00:16 kube-apiserver --admission-control-config-file=/etc/rancher/rke2/rke2-pss.yaml --audit-policy-file=/etc/rancher/rke2/audit-policy.yaml --audit-log-maxage=30 --audit-log-maxbackup=10 --audit-log-maxsize=100 --audit-log-path=/var/lib/rancher/rke2/server/logs/audit.log --advertise-address=10.10.10.100 --allow-privileged=true --anonymous-auth=false --api-audiences=https://kubernetes.default.svc.cluster.local,rke2 --authorization-mode=Node,RBAC --bind-address=0.0.0.0 --cert-dir=/var/lib/rancher/rke2/server/tls/temporary-certs --client-ca-file=/var/lib/rancher/rke2/server/tls/client-ca.crt --egress-selector-config-file=/var/lib/rancher/rke2/server/etc/egress-selector-config.yaml --enable-admission-plugins=NodeRestriction --enable-aggregator-routing=true --enable-bootstrap-token-auth=true --encryption-provider-config=/var/lib/rancher/rke2/server/cred/encryption-config.json --encryption-provider-config-automatic-reload=true --etcd-cafile=/var/lib/rancher/rke2/server/tls/etcd/server-ca.crt --etcd-certfile=/var/lib/rancher/rke2/server/tls/etcd/client.crt --etcd-keyfile=/var/lib/rancher/rke2/server/tls/etcd/client.key --etcd-servers=https://127.0.0.1:2379 --kubelet-certificate-authority=/var/lib/rancher/rke2/server/tls/server-ca.crt --kubelet-client-certificate=/var/lib/rancher/rke2/server/tls/client-kube-apiserver.crt --kubelet-client-key=/var/lib/rancher/rke2/server/tls/client-kube-apiserver.key --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --profiling=false --proxy-client-cert-file=/var/lib/rancher/rke2/server/tls/client-auth-proxy.crt --proxy-client-key-file=/var/lib/rancher/rke2/server/tls/client-auth-proxy.key --requestheader-allowed-names=system:auth-proxy --requestheader-client-ca-file=/var/lib/rancher/rke2/server/tls/request-header-ca.crt --requestheader-extra-headers-prefix=X-Remote-Extra- --requestheader-group-headers=X-Remote-Group --requestheader-username-headers=X-Remote-User --secure-port=6443 --service-account-extend-token-expiration=false --service-account-issuer=https://kubernetes.default.svc.cluster.local --service-account-key-file=/var/lib/rancher/rke2/server/tls/service.key --service-account-signing-key-file=/var/lib/rancher/rke2/server/tls/service.current.key --service-cluster-ip-range=10.43.0.0/16 --service-node-port-range=30000-32767 --storage-backend=etcd3 --tls-cert-file=/var/lib/rancher/rke2/server/tls/serving-kube-apiserver.crt --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --tls-private-key-file=/var/lib/rancher/rke2/server/tls/serving-kube-apiserver.key
Remediação:
Por padrão, o RKE2 define o argumento --audit-log-maxsize como 100 MB. Se você quiser mudar isso, edite o arquivo de configuração do RKE2 /etc/rancher/rke2/config.yaml no nó de controle e defina o parâmetro --audit-log-maxsize para um tamanho apropriado em MB. Por exemplo,
kube-apiserver-arg: - "audit-log-maxsize=150"
1.2.20 Certifique-se de que o argumento --request-timeout esteja definido conforme apropriado (Automatizado)
Resultado: PASS
Auditoria
/bin/ps -fC kube-apiserver
Resultado esperado: '--request-timeout' não está presente OU '--request-timeout' está presente
Valor retornado:
UID PID PPID C STIME TTY TIME CMD
root 18280 17706 5 16:15 ? 00:00:16 kube-apiserver --admission-control-config-file=/etc/rancher/rke2/rke2-pss.yaml --audit-policy-file=/etc/rancher/rke2/audit-policy.yaml --audit-log-maxage=30 --audit-log-maxbackup=10 --audit-log-maxsize=100 --audit-log-path=/var/lib/rancher/rke2/server/logs/audit.log --advertise-address=10.10.10.100 --allow-privileged=true --anonymous-auth=false --api-audiences=https://kubernetes.default.svc.cluster.local,rke2 --authorization-mode=Node,RBAC --bind-address=0.0.0.0 --cert-dir=/var/lib/rancher/rke2/server/tls/temporary-certs --client-ca-file=/var/lib/rancher/rke2/server/tls/client-ca.crt --egress-selector-config-file=/var/lib/rancher/rke2/server/etc/egress-selector-config.yaml --enable-admission-plugins=NodeRestriction --enable-aggregator-routing=true --enable-bootstrap-token-auth=true --encryption-provider-config=/var/lib/rancher/rke2/server/cred/encryption-config.json --encryption-provider-config-automatic-reload=true --etcd-cafile=/var/lib/rancher/rke2/server/tls/etcd/server-ca.crt --etcd-certfile=/var/lib/rancher/rke2/server/tls/etcd/client.crt --etcd-keyfile=/var/lib/rancher/rke2/server/tls/etcd/client.key --etcd-servers=https://127.0.0.1:2379 --kubelet-certificate-authority=/var/lib/rancher/rke2/server/tls/server-ca.crt --kubelet-client-certificate=/var/lib/rancher/rke2/server/tls/client-kube-apiserver.crt --kubelet-client-key=/var/lib/rancher/rke2/server/tls/client-kube-apiserver.key --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --profiling=false --proxy-client-cert-file=/var/lib/rancher/rke2/server/tls/client-auth-proxy.crt --proxy-client-key-file=/var/lib/rancher/rke2/server/tls/client-auth-proxy.key --requestheader-allowed-names=system:auth-proxy --requestheader-client-ca-file=/var/lib/rancher/rke2/server/tls/request-header-ca.crt --requestheader-extra-headers-prefix=X-Remote-Extra- --requestheader-group-headers=X-Remote-Group --requestheader-username-headers=X-Remote-User --secure-port=6443 --service-account-extend-token-expiration=false --service-account-issuer=https://kubernetes.default.svc.cluster.local --service-account-key-file=/var/lib/rancher/rke2/server/tls/service.key --service-account-signing-key-file=/var/lib/rancher/rke2/server/tls/service.current.key --service-cluster-ip-range=10.43.0.0/16 --service-node-port-range=30000-32767 --storage-backend=etcd3 --tls-cert-file=/var/lib/rancher/rke2/server/tls/serving-kube-apiserver.crt --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --tls-private-key-file=/var/lib/rancher/rke2/server/tls/serving-kube-apiserver.key
Remediação:
Permissivo, de acordo com as diretrizes do CIS, "recomenda-se definir esse limite conforme apropriado e alterar o limite padrão de 60 segundos apenas se necessário". Edite o arquivo de configuração do RKE2 /etc/rancher/rke2/config.yaml e defina o parâmetro abaixo, se necessário. Por exemplo,
kube-apiserver-arg: - "request-timeout=300s"
1.2.21 Certifique-se de que o --argumento service-account-lookup esteja definido como verdadeiro (Automatizado)
Resultado: PASS
Auditoria
/bin/ps -fC kube-apiserver
Resultado Esperado: '--service-account-lookup' não está presente OU '--service-account-lookup' está presente
Valor Retornado:
UID PID PPID C STIME TTY TIME CMD
root 18280 17706 5 16:15 ? 00:00:16 kube-apiserver --admission-control-config-file=/etc/rancher/rke2/rke2-pss.yaml --audit-policy-file=/etc/rancher/rke2/audit-policy.yaml --audit-log-maxage=30 --audit-log-maxbackup=10 --audit-log-maxsize=100 --audit-log-path=/var/lib/rancher/rke2/server/logs/audit.log --advertise-address=10.10.10.100 --allow-privileged=true --anonymous-auth=false --api-audiences=https://kubernetes.default.svc.cluster.local,rke2 --authorization-mode=Node,RBAC --bind-address=0.0.0.0 --cert-dir=/var/lib/rancher/rke2/server/tls/temporary-certs --client-ca-file=/var/lib/rancher/rke2/server/tls/client-ca.crt --egress-selector-config-file=/var/lib/rancher/rke2/server/etc/egress-selector-config.yaml --enable-admission-plugins=NodeRestriction --enable-aggregator-routing=true --enable-bootstrap-token-auth=true --encryption-provider-config=/var/lib/rancher/rke2/server/cred/encryption-config.json --encryption-provider-config-automatic-reload=true --etcd-cafile=/var/lib/rancher/rke2/server/tls/etcd/server-ca.crt --etcd-certfile=/var/lib/rancher/rke2/server/tls/etcd/client.crt --etcd-keyfile=/var/lib/rancher/rke2/server/tls/etcd/client.key --etcd-servers=https://127.0.0.1:2379 --kubelet-certificate-authority=/var/lib/rancher/rke2/server/tls/server-ca.crt --kubelet-client-certificate=/var/lib/rancher/rke2/server/tls/client-kube-apiserver.crt --kubelet-client-key=/var/lib/rancher/rke2/server/tls/client-kube-apiserver.key --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --profiling=false --proxy-client-cert-file=/var/lib/rancher/rke2/server/tls/client-auth-proxy.crt --proxy-client-key-file=/var/lib/rancher/rke2/server/tls/client-auth-proxy.key --requestheader-allowed-names=system:auth-proxy --requestheader-client-ca-file=/var/lib/rancher/rke2/server/tls/request-header-ca.crt --requestheader-extra-headers-prefix=X-Remote-Extra- --requestheader-group-headers=X-Remote-Group --requestheader-username-headers=X-Remote-User --secure-port=6443 --service-account-extend-token-expiration=false --service-account-issuer=https://kubernetes.default.svc.cluster.local --service-account-key-file=/var/lib/rancher/rke2/server/tls/service.key --service-account-signing-key-file=/var/lib/rancher/rke2/server/tls/service.current.key --service-cluster-ip-range=10.43.0.0/16 --service-node-port-range=30000-32767 --storage-backend=etcd3 --tls-cert-file=/var/lib/rancher/rke2/server/tls/serving-kube-apiserver.crt --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --tls-private-key-file=/var/lib/rancher/rke2/server/tls/serving-kube-apiserver.key
Remediação:
Por padrão, o RKE2 não define o argumento --service-account-lookup. Edite o arquivo de configuração do RKE2 /etc/rancher/rke2/config.yaml e defina o service-account-lookup. Por exemplo,
kube-apiserver-arg: - "service-account-lookup=true"
Alternativamente, você pode excluir o parâmetro service-account-lookup deste arquivo para que o padrão entre em vigor.
1.2.22 Certifique-se de que o argumento --service-account-key-file esteja definido de forma apropriada (Automatizado)
Resultado: PASS
Auditoria
/bin/ps -fC kube-apiserver
Resultado Esperado: '--service-account-key-file' está presente
Valor Retornado:
UID PID PPID C STIME TTY TIME CMD
root 18280 17706 5 16:15 ? 00:00:16 kube-apiserver --admission-control-config-file=/etc/rancher/rke2/rke2-pss.yaml --audit-policy-file=/etc/rancher/rke2/audit-policy.yaml --audit-log-maxage=30 --audit-log-maxbackup=10 --audit-log-maxsize=100 --audit-log-path=/var/lib/rancher/rke2/server/logs/audit.log --advertise-address=10.10.10.100 --allow-privileged=true --anonymous-auth=false --api-audiences=https://kubernetes.default.svc.cluster.local,rke2 --authorization-mode=Node,RBAC --bind-address=0.0.0.0 --cert-dir=/var/lib/rancher/rke2/server/tls/temporary-certs --client-ca-file=/var/lib/rancher/rke2/server/tls/client-ca.crt --egress-selector-config-file=/var/lib/rancher/rke2/server/etc/egress-selector-config.yaml --enable-admission-plugins=NodeRestriction --enable-aggregator-routing=true --enable-bootstrap-token-auth=true --encryption-provider-config=/var/lib/rancher/rke2/server/cred/encryption-config.json --encryption-provider-config-automatic-reload=true --etcd-cafile=/var/lib/rancher/rke2/server/tls/etcd/server-ca.crt --etcd-certfile=/var/lib/rancher/rke2/server/tls/etcd/client.crt --etcd-keyfile=/var/lib/rancher/rke2/server/tls/etcd/client.key --etcd-servers=https://127.0.0.1:2379 --kubelet-certificate-authority=/var/lib/rancher/rke2/server/tls/server-ca.crt --kubelet-client-certificate=/var/lib/rancher/rke2/server/tls/client-kube-apiserver.crt --kubelet-client-key=/var/lib/rancher/rke2/server/tls/client-kube-apiserver.key --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --profiling=false --proxy-client-cert-file=/var/lib/rancher/rke2/server/tls/client-auth-proxy.crt --proxy-client-key-file=/var/lib/rancher/rke2/server/tls/client-auth-proxy.key --requestheader-allowed-names=system:auth-proxy --requestheader-client-ca-file=/var/lib/rancher/rke2/server/tls/request-header-ca.crt --requestheader-extra-headers-prefix=X-Remote-Extra- --requestheader-group-headers=X-Remote-Group --requestheader-username-headers=X-Remote-User --secure-port=6443 --service-account-extend-token-expiration=false --service-account-issuer=https://kubernetes.default.svc.cluster.local --service-account-key-file=/var/lib/rancher/rke2/server/tls/service.key --service-account-signing-key-file=/var/lib/rancher/rke2/server/tls/service.current.key --service-cluster-ip-range=10.43.0.0/16 --service-node-port-range=30000-32767 --storage-backend=etcd3 --tls-cert-file=/var/lib/rancher/rke2/server/tls/serving-kube-apiserver.crt --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --tls-private-key-file=/var/lib/rancher/rke2/server/tls/serving-kube-apiserver.key
Remediação:
O RKE2 gera e define automaticamente o arquivo de chave da conta de serviço. Ele está localizado em /var/lib/rancher/rke2/server/tls/service.key. Se esta verificação falhar, edite o arquivo de configuração do RKE2 /etc/rancher/rke2/config.yaml e remova quaisquer linhas como abaixo.
kube-apiserver-arg: - "service-account-key-file=<path>"
1.2.23 Assegure-se de que os argumentos --etcd-certfile e --etcd-keyfile estejam definidos conforme apropriado (Automatizado)
Resultado: PASS
Auditoria
/bin/ps -fC kube-apiserver
Resultado Esperado: '--etcd-certfile' está presente E '--etcd-keyfile' está presente
Valor Retornado:
UID PID PPID C STIME TTY TIME CMD
root 18280 17706 5 16:15 ? 00:00:16 kube-apiserver --admission-control-config-file=/etc/rancher/rke2/rke2-pss.yaml --audit-policy-file=/etc/rancher/rke2/audit-policy.yaml --audit-log-maxage=30 --audit-log-maxbackup=10 --audit-log-maxsize=100 --audit-log-path=/var/lib/rancher/rke2/server/logs/audit.log --advertise-address=10.10.10.100 --allow-privileged=true --anonymous-auth=false --api-audiences=https://kubernetes.default.svc.cluster.local,rke2 --authorization-mode=Node,RBAC --bind-address=0.0.0.0 --cert-dir=/var/lib/rancher/rke2/server/tls/temporary-certs --client-ca-file=/var/lib/rancher/rke2/server/tls/client-ca.crt --egress-selector-config-file=/var/lib/rancher/rke2/server/etc/egress-selector-config.yaml --enable-admission-plugins=NodeRestriction --enable-aggregator-routing=true --enable-bootstrap-token-auth=true --encryption-provider-config=/var/lib/rancher/rke2/server/cred/encryption-config.json --encryption-provider-config-automatic-reload=true --etcd-cafile=/var/lib/rancher/rke2/server/tls/etcd/server-ca.crt --etcd-certfile=/var/lib/rancher/rke2/server/tls/etcd/client.crt --etcd-keyfile=/var/lib/rancher/rke2/server/tls/etcd/client.key --etcd-servers=https://127.0.0.1:2379 --kubelet-certificate-authority=/var/lib/rancher/rke2/server/tls/server-ca.crt --kubelet-client-certificate=/var/lib/rancher/rke2/server/tls/client-kube-apiserver.crt --kubelet-client-key=/var/lib/rancher/rke2/server/tls/client-kube-apiserver.key --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --profiling=false --proxy-client-cert-file=/var/lib/rancher/rke2/server/tls/client-auth-proxy.crt --proxy-client-key-file=/var/lib/rancher/rke2/server/tls/client-auth-proxy.key --requestheader-allowed-names=system:auth-proxy --requestheader-client-ca-file=/var/lib/rancher/rke2/server/tls/request-header-ca.crt --requestheader-extra-headers-prefix=X-Remote-Extra- --requestheader-group-headers=X-Remote-Group --requestheader-username-headers=X-Remote-User --secure-port=6443 --service-account-extend-token-expiration=false --service-account-issuer=https://kubernetes.default.svc.cluster.local --service-account-key-file=/var/lib/rancher/rke2/server/tls/service.key --service-account-signing-key-file=/var/lib/rancher/rke2/server/tls/service.current.key --service-cluster-ip-range=10.43.0.0/16 --service-node-port-range=30000-32767 --storage-backend=etcd3 --tls-cert-file=/var/lib/rancher/rke2/server/tls/serving-kube-apiserver.crt --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --tls-private-key-file=/var/lib/rancher/rke2/server/tls/serving-kube-apiserver.key
Remediação:
O RKE2 gera e define automaticamente os arquivos de certificado e chave etcd. Eles estão localizados em /var/lib/rancher/rke2/server/tls/etcd/client.crt e /var/lib/rancher/rke2/server/tls/etcd/client.key. Se esta verificação falhar, edite o arquivo de configuração do RKE2 /etc/rancher/rke2/config.yaml e remova quaisquer linhas como abaixo.
kube-apiserver-arg: - "etcd-certfile=<path>" - "etcd-keyfile=<path>"
1.2.24 Assegure-se de que os argumentos --tls-cert-file e --tls-private-key-file estejam definidos conforme apropriado (Automatizado)
Resultado: PASS
Auditoria
/bin/ps -fC kube-apiserver
Resultado esperado: '--tls-cert-file' está presente E '--tls-private-key-file' está presente
Valor retornado:
UID PID PPID C STIME TTY TIME CMD
root 18280 17706 5 16:15 ? 00:00:16 kube-apiserver --admission-control-config-file=/etc/rancher/rke2/rke2-pss.yaml --audit-policy-file=/etc/rancher/rke2/audit-policy.yaml --audit-log-maxage=30 --audit-log-maxbackup=10 --audit-log-maxsize=100 --audit-log-path=/var/lib/rancher/rke2/server/logs/audit.log --advertise-address=10.10.10.100 --allow-privileged=true --anonymous-auth=false --api-audiences=https://kubernetes.default.svc.cluster.local,rke2 --authorization-mode=Node,RBAC --bind-address=0.0.0.0 --cert-dir=/var/lib/rancher/rke2/server/tls/temporary-certs --client-ca-file=/var/lib/rancher/rke2/server/tls/client-ca.crt --egress-selector-config-file=/var/lib/rancher/rke2/server/etc/egress-selector-config.yaml --enable-admission-plugins=NodeRestriction --enable-aggregator-routing=true --enable-bootstrap-token-auth=true --encryption-provider-config=/var/lib/rancher/rke2/server/cred/encryption-config.json --encryption-provider-config-automatic-reload=true --etcd-cafile=/var/lib/rancher/rke2/server/tls/etcd/server-ca.crt --etcd-certfile=/var/lib/rancher/rke2/server/tls/etcd/client.crt --etcd-keyfile=/var/lib/rancher/rke2/server/tls/etcd/client.key --etcd-servers=https://127.0.0.1:2379 --kubelet-certificate-authority=/var/lib/rancher/rke2/server/tls/server-ca.crt --kubelet-client-certificate=/var/lib/rancher/rke2/server/tls/client-kube-apiserver.crt --kubelet-client-key=/var/lib/rancher/rke2/server/tls/client-kube-apiserver.key --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --profiling=false --proxy-client-cert-file=/var/lib/rancher/rke2/server/tls/client-auth-proxy.crt --proxy-client-key-file=/var/lib/rancher/rke2/server/tls/client-auth-proxy.key --requestheader-allowed-names=system:auth-proxy --requestheader-client-ca-file=/var/lib/rancher/rke2/server/tls/request-header-ca.crt --requestheader-extra-headers-prefix=X-Remote-Extra- --requestheader-group-headers=X-Remote-Group --requestheader-username-headers=X-Remote-User --secure-port=6443 --service-account-extend-token-expiration=false --service-account-issuer=https://kubernetes.default.svc.cluster.local --service-account-key-file=/var/lib/rancher/rke2/server/tls/service.key --service-account-signing-key-file=/var/lib/rancher/rke2/server/tls/service.current.key --service-cluster-ip-range=10.43.0.0/16 --service-node-port-range=30000-32767 --storage-backend=etcd3 --tls-cert-file=/var/lib/rancher/rke2/server/tls/serving-kube-apiserver.crt --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --tls-private-key-file=/var/lib/rancher/rke2/server/tls/serving-kube-apiserver.key
Remediação:
Por padrão, o RKE2 gera e fornece automaticamente o certificado TLS e a chave privada para o apiserver. Eles são gerados e localizados em /var/lib/rancher/rke2/server/tls/serving-kube-apiserver.crt e /var/lib/rancher/rke2/server/tls/serving-kube-apiserver.key. Se esta verificação falhar, edite o arquivo de configuração do RKE2 /etc/rancher/rke2/config.yaml e remova quaisquer linhas como abaixo.
kube-apiserver-arg: - "tls-cert-file=<path>" - "tls-private-key-file=<path>"
1.2.25 Assegure-se de que o argumento --client-ca-file esteja definido conforme apropriado (Automatizado)
Resultado: PASS
Auditoria
/bin/ps -fC kube-apiserver
Resultado Esperado: '--client-ca-file' está presente
Valor Retornado:
UID PID PPID C STIME TTY TIME CMD
root 18280 17706 5 16:15 ? 00:00:16 kube-apiserver --admission-control-config-file=/etc/rancher/rke2/rke2-pss.yaml --audit-policy-file=/etc/rancher/rke2/audit-policy.yaml --audit-log-maxage=30 --audit-log-maxbackup=10 --audit-log-maxsize=100 --audit-log-path=/var/lib/rancher/rke2/server/logs/audit.log --advertise-address=10.10.10.100 --allow-privileged=true --anonymous-auth=false --api-audiences=https://kubernetes.default.svc.cluster.local,rke2 --authorization-mode=Node,RBAC --bind-address=0.0.0.0 --cert-dir=/var/lib/rancher/rke2/server/tls/temporary-certs --client-ca-file=/var/lib/rancher/rke2/server/tls/client-ca.crt --egress-selector-config-file=/var/lib/rancher/rke2/server/etc/egress-selector-config.yaml --enable-admission-plugins=NodeRestriction --enable-aggregator-routing=true --enable-bootstrap-token-auth=true --encryption-provider-config=/var/lib/rancher/rke2/server/cred/encryption-config.json --encryption-provider-config-automatic-reload=true --etcd-cafile=/var/lib/rancher/rke2/server/tls/etcd/server-ca.crt --etcd-certfile=/var/lib/rancher/rke2/server/tls/etcd/client.crt --etcd-keyfile=/var/lib/rancher/rke2/server/tls/etcd/client.key --etcd-servers=https://127.0.0.1:2379 --kubelet-certificate-authority=/var/lib/rancher/rke2/server/tls/server-ca.crt --kubelet-client-certificate=/var/lib/rancher/rke2/server/tls/client-kube-apiserver.crt --kubelet-client-key=/var/lib/rancher/rke2/server/tls/client-kube-apiserver.key --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --profiling=false --proxy-client-cert-file=/var/lib/rancher/rke2/server/tls/client-auth-proxy.crt --proxy-client-key-file=/var/lib/rancher/rke2/server/tls/client-auth-proxy.key --requestheader-allowed-names=system:auth-proxy --requestheader-client-ca-file=/var/lib/rancher/rke2/server/tls/request-header-ca.crt --requestheader-extra-headers-prefix=X-Remote-Extra- --requestheader-group-headers=X-Remote-Group --requestheader-username-headers=X-Remote-User --secure-port=6443 --service-account-extend-token-expiration=false --service-account-issuer=https://kubernetes.default.svc.cluster.local --service-account-key-file=/var/lib/rancher/rke2/server/tls/service.key --service-account-signing-key-file=/var/lib/rancher/rke2/server/tls/service.current.key --service-cluster-ip-range=10.43.0.0/16 --service-node-port-range=30000-32767 --storage-backend=etcd3 --tls-cert-file=/var/lib/rancher/rke2/server/tls/serving-kube-apiserver.crt --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --tls-private-key-file=/var/lib/rancher/rke2/server/tls/serving-kube-apiserver.key
Remediação:
Por padrão, o RKE2 fornece automaticamente o arquivo da autoridade certificadora do cliente. Ele é gerado e localizado em /var/lib/rancher/rke2/server/tls/client-ca.crt. Se por algum motivo você precisar fornecer seu próprio certificado CA, considere usar a ferramenta de linha de comando rke2 certificate. Se esta verificação falhar, edite o arquivo de configuração do RKE2 /etc/rancher/rke2/config.yaml e remova quaisquer linhas como abaixo.
kube-apiserver-arg: - "client-ca-file=<path>"
1.2.26 Certifique-se de que o argumento --etcd-cafile esteja definido conforme apropriado (Automatizado)
Resultado: PASS
Auditoria
/bin/ps -fC kube-apiserver
Resultado Esperado: '--etcd-cafile' está presente
Valor Retornado:
UID PID PPID C STIME TTY TIME CMD
root 18280 17706 5 16:15 ? 00:00:16 kube-apiserver --admission-control-config-file=/etc/rancher/rke2/rke2-pss.yaml --audit-policy-file=/etc/rancher/rke2/audit-policy.yaml --audit-log-maxage=30 --audit-log-maxbackup=10 --audit-log-maxsize=100 --audit-log-path=/var/lib/rancher/rke2/server/logs/audit.log --advertise-address=10.10.10.100 --allow-privileged=true --anonymous-auth=false --api-audiences=https://kubernetes.default.svc.cluster.local,rke2 --authorization-mode=Node,RBAC --bind-address=0.0.0.0 --cert-dir=/var/lib/rancher/rke2/server/tls/temporary-certs --client-ca-file=/var/lib/rancher/rke2/server/tls/client-ca.crt --egress-selector-config-file=/var/lib/rancher/rke2/server/etc/egress-selector-config.yaml --enable-admission-plugins=NodeRestriction --enable-aggregator-routing=true --enable-bootstrap-token-auth=true --encryption-provider-config=/var/lib/rancher/rke2/server/cred/encryption-config.json --encryption-provider-config-automatic-reload=true --etcd-cafile=/var/lib/rancher/rke2/server/tls/etcd/server-ca.crt --etcd-certfile=/var/lib/rancher/rke2/server/tls/etcd/client.crt --etcd-keyfile=/var/lib/rancher/rke2/server/tls/etcd/client.key --etcd-servers=https://127.0.0.1:2379 --kubelet-certificate-authority=/var/lib/rancher/rke2/server/tls/server-ca.crt --kubelet-client-certificate=/var/lib/rancher/rke2/server/tls/client-kube-apiserver.crt --kubelet-client-key=/var/lib/rancher/rke2/server/tls/client-kube-apiserver.key --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --profiling=false --proxy-client-cert-file=/var/lib/rancher/rke2/server/tls/client-auth-proxy.crt --proxy-client-key-file=/var/lib/rancher/rke2/server/tls/client-auth-proxy.key --requestheader-allowed-names=system:auth-proxy --requestheader-client-ca-file=/var/lib/rancher/rke2/server/tls/request-header-ca.crt --requestheader-extra-headers-prefix=X-Remote-Extra- --requestheader-group-headers=X-Remote-Group --requestheader-username-headers=X-Remote-User --secure-port=6443 --service-account-extend-token-expiration=false --service-account-issuer=https://kubernetes.default.svc.cluster.local --service-account-key-file=/var/lib/rancher/rke2/server/tls/service.key --service-account-signing-key-file=/var/lib/rancher/rke2/server/tls/service.current.key --service-cluster-ip-range=10.43.0.0/16 --service-node-port-range=30000-32767 --storage-backend=etcd3 --tls-cert-file=/var/lib/rancher/rke2/server/tls/serving-kube-apiserver.crt --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --tls-private-key-file=/var/lib/rancher/rke2/server/tls/serving-kube-apiserver.key
Remediação:
Por padrão, o RKE2 fornece automaticamente o arquivo da autoridade certificadora do etcd. Ele é gerado e localizado em /var/lib/rancher/rke2/server/tls/client-ca.crt. Se por algum motivo você precisar fornecer seu próprio certificado CA, considere usar a ferramenta de linha de comando rke2 certificate. Se esta verificação falhar, edite o arquivo de configuração do RKE2 /etc/rancher/rke2/config.yaml e remova quaisquer linhas como abaixo.
kube-apiserver-arg: - "etcd-cafile=<path>"
1.2.27 Certifique-se de que o argumento --encryption-provider-config esteja definido conforme apropriado (Automatizado)
Resultado: PASS
Auditoria
/bin/ps -fC kube-apiserver
Resultado Esperado: '--encryption-provider-config' está presente
Valor Retornado:
UID PID PPID C STIME TTY TIME CMD
root 18280 17706 5 16:15 ? 00:00:16 kube-apiserver --admission-control-config-file=/etc/rancher/rke2/rke2-pss.yaml --audit-policy-file=/etc/rancher/rke2/audit-policy.yaml --audit-log-maxage=30 --audit-log-maxbackup=10 --audit-log-maxsize=100 --audit-log-path=/var/lib/rancher/rke2/server/logs/audit.log --advertise-address=10.10.10.100 --allow-privileged=true --anonymous-auth=false --api-audiences=https://kubernetes.default.svc.cluster.local,rke2 --authorization-mode=Node,RBAC --bind-address=0.0.0.0 --cert-dir=/var/lib/rancher/rke2/server/tls/temporary-certs --client-ca-file=/var/lib/rancher/rke2/server/tls/client-ca.crt --egress-selector-config-file=/var/lib/rancher/rke2/server/etc/egress-selector-config.yaml --enable-admission-plugins=NodeRestriction --enable-aggregator-routing=true --enable-bootstrap-token-auth=true --encryption-provider-config=/var/lib/rancher/rke2/server/cred/encryption-config.json --encryption-provider-config-automatic-reload=true --etcd-cafile=/var/lib/rancher/rke2/server/tls/etcd/server-ca.crt --etcd-certfile=/var/lib/rancher/rke2/server/tls/etcd/client.crt --etcd-keyfile=/var/lib/rancher/rke2/server/tls/etcd/client.key --etcd-servers=https://127.0.0.1:2379 --kubelet-certificate-authority=/var/lib/rancher/rke2/server/tls/server-ca.crt --kubelet-client-certificate=/var/lib/rancher/rke2/server/tls/client-kube-apiserver.crt --kubelet-client-key=/var/lib/rancher/rke2/server/tls/client-kube-apiserver.key --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --profiling=false --proxy-client-cert-file=/var/lib/rancher/rke2/server/tls/client-auth-proxy.crt --proxy-client-key-file=/var/lib/rancher/rke2/server/tls/client-auth-proxy.key --requestheader-allowed-names=system:auth-proxy --requestheader-client-ca-file=/var/lib/rancher/rke2/server/tls/request-header-ca.crt --requestheader-extra-headers-prefix=X-Remote-Extra- --requestheader-group-headers=X-Remote-Group --requestheader-username-headers=X-Remote-User --secure-port=6443 --service-account-extend-token-expiration=false --service-account-issuer=https://kubernetes.default.svc.cluster.local --service-account-key-file=/var/lib/rancher/rke2/server/tls/service.key --service-account-signing-key-file=/var/lib/rancher/rke2/server/tls/service.current.key --service-cluster-ip-range=10.43.0.0/16 --service-node-port-range=30000-32767 --storage-backend=etcd3 --tls-cert-file=/var/lib/rancher/rke2/server/tls/serving-kube-apiserver.crt --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --tls-private-key-file=/var/lib/rancher/rke2/server/tls/serving-kube-apiserver.key
Remediação:
O RKE2 está sempre configurado para criptografar segredos. A criptografia de segredos é gerenciada com a ferramenta de linha de comando rke2 secrets-encrypt. Se necessário, você pode encontrar a configuração de criptografia gerada em /var/lib/rancher/rke2/server/cred/encryption-config.json.
1.2.28 Certifique-se de que os provedores de criptografia estejam configurados adequadamente (Automatizado)
Resultado: PASS
Auditoria
ENCRYPTION_PROVIDER_CONFIG=$(ps -ef | grep kube-apiserver | grep -- --encryption-provider-config | sed 's%.*encryption-provider-config[= ]\([^ ]*\).*%\1%')
if test -e $ENCRYPTION_PROVIDER_CONFIG; then grep -o 'providers\"\:\[.*\]' $ENCRYPTION_PROVIDER_CONFIG | grep -o "[A-Za-z]*" | head -2 | tail -1 | sed 's/^/provider=/'; fi
Resultado Esperado: 'provider' contém elementos válidos de 'aescbc,kms,secretbox'
Valor Retornado:
provider=aescbc
Remediação:
O RKE2 está sempre configurado para usar o provedor de criptografia aescbc para criptografar segredos. A criptografia de segredos é gerenciada com a ferramenta de linha de comando rke2 secrets-encrypt. Se necessário, você pode encontrar a configuração de criptografia gerada em /var/lib/rancher/rke2/server/cred/encryption-config.json.
1.2.29 Certifique-se de que o servidor API utilize apenas cifras criptográficas fortes (Automatizado)
Resultado: PASS
Auditoria
/bin/ps -fC kube-apiserver
Resultado Esperado: '--tls-cipher-suites' contém elementos válidos de 'TLS_AES_128_GCM_SHA256,TLS_AES_256_GCM_SHA384,TLS_CHACHA20_POLY1305_SHA256,TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256,TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256,TLS_RSA_WITH_AES_128_GCM_SHA256,TLS_RSA_WITH_AES_256_GCM_SHA384'
Valor Retornado:
UID PID PPID C STIME TTY TIME CMD
root 18280 17706 5 16:15 ? 00:00:16 kube-apiserver --admission-control-config-file=/etc/rancher/rke2/rke2-pss.yaml --audit-policy-file=/etc/rancher/rke2/audit-policy.yaml --audit-log-maxage=30 --audit-log-maxbackup=10 --audit-log-maxsize=100 --audit-log-path=/var/lib/rancher/rke2/server/logs/audit.log --advertise-address=10.10.10.100 --allow-privileged=true --anonymous-auth=false --api-audiences=https://kubernetes.default.svc.cluster.local,rke2 --authorization-mode=Node,RBAC --bind-address=0.0.0.0 --cert-dir=/var/lib/rancher/rke2/server/tls/temporary-certs --client-ca-file=/var/lib/rancher/rke2/server/tls/client-ca.crt --egress-selector-config-file=/var/lib/rancher/rke2/server/etc/egress-selector-config.yaml --enable-admission-plugins=NodeRestriction --enable-aggregator-routing=true --enable-bootstrap-token-auth=true --encryption-provider-config=/var/lib/rancher/rke2/server/cred/encryption-config.json --encryption-provider-config-automatic-reload=true --etcd-cafile=/var/lib/rancher/rke2/server/tls/etcd/server-ca.crt --etcd-certfile=/var/lib/rancher/rke2/server/tls/etcd/client.crt --etcd-keyfile=/var/lib/rancher/rke2/server/tls/etcd/client.key --etcd-servers=https://127.0.0.1:2379 --kubelet-certificate-authority=/var/lib/rancher/rke2/server/tls/server-ca.crt --kubelet-client-certificate=/var/lib/rancher/rke2/server/tls/client-kube-apiserver.crt --kubelet-client-key=/var/lib/rancher/rke2/server/tls/client-kube-apiserver.key --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --profiling=false --proxy-client-cert-file=/var/lib/rancher/rke2/server/tls/client-auth-proxy.crt --proxy-client-key-file=/var/lib/rancher/rke2/server/tls/client-auth-proxy.key --requestheader-allowed-names=system:auth-proxy --requestheader-client-ca-file=/var/lib/rancher/rke2/server/tls/request-header-ca.crt --requestheader-extra-headers-prefix=X-Remote-Extra- --requestheader-group-headers=X-Remote-Group --requestheader-username-headers=X-Remote-User --secure-port=6443 --service-account-extend-token-expiration=false --service-account-issuer=https://kubernetes.default.svc.cluster.local --service-account-key-file=/var/lib/rancher/rke2/server/tls/service.key --service-account-signing-key-file=/var/lib/rancher/rke2/server/tls/service.current.key --service-cluster-ip-range=10.43.0.0/16 --service-node-port-range=30000-32767 --storage-backend=etcd3 --tls-cert-file=/var/lib/rancher/rke2/server/tls/serving-kube-apiserver.crt --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --tls-private-key-file=/var/lib/rancher/rke2/server/tls/serving-kube-apiserver.key
Remediação:
Por padrão, o kube-apiserver do RKE2 está em conformidade com este teste. Alterações a esses valores podem causar regressões, portanto, certifique-se de que todos os clientes do apiserver suportem a nova configuração TLS antes de aplicá-la em implantações de produção.
Se uma configuração TLS personalizada for necessária, considere também criar uma versão personalizada desta regra que se alinhe com seus requisitos.
Se esta verificação falhar, remova qualquer configuração personalizada em torno de tls-cipher-suites ou atualize o arquivo /etc/rancher/rke2/config.yaml para corresponder ao padrão, adicionando o seguinte:
kube-apiserver-arg:
-
"tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305"
1.2.30 Certifique-se de que o parâmetro --service-account-extend-token-expiration esteja definido como false (Automatizado)
Resultado: PASS
Auditoria
/bin/ps -fC kube-apiserver
Resultado Esperado: '--service-account-extend-token-expiration' é igual a 'false'
Valor Retornado:
UID PID PPID C STIME TTY TIME CMD
root 18280 17706 5 16:15 ? 00:00:16 kube-apiserver --admission-control-config-file=/etc/rancher/rke2/rke2-pss.yaml --audit-policy-file=/etc/rancher/rke2/audit-policy.yaml --audit-log-maxage=30 --audit-log-maxbackup=10 --audit-log-maxsize=100 --audit-log-path=/var/lib/rancher/rke2/server/logs/audit.log --advertise-address=10.10.10.100 --allow-privileged=true --anonymous-auth=false --api-audiences=https://kubernetes.default.svc.cluster.local,rke2 --authorization-mode=Node,RBAC --bind-address=0.0.0.0 --cert-dir=/var/lib/rancher/rke2/server/tls/temporary-certs --client-ca-file=/var/lib/rancher/rke2/server/tls/client-ca.crt --egress-selector-config-file=/var/lib/rancher/rke2/server/etc/egress-selector-config.yaml --enable-admission-plugins=NodeRestriction --enable-aggregator-routing=true --enable-bootstrap-token-auth=true --encryption-provider-config=/var/lib/rancher/rke2/server/cred/encryption-config.json --encryption-provider-config-automatic-reload=true --etcd-cafile=/var/lib/rancher/rke2/server/tls/etcd/server-ca.crt --etcd-certfile=/var/lib/rancher/rke2/server/tls/etcd/client.crt --etcd-keyfile=/var/lib/rancher/rke2/server/tls/etcd/client.key --etcd-servers=https://127.0.0.1:2379 --kubelet-certificate-authority=/var/lib/rancher/rke2/server/tls/server-ca.crt --kubelet-client-certificate=/var/lib/rancher/rke2/server/tls/client-kube-apiserver.crt --kubelet-client-key=/var/lib/rancher/rke2/server/tls/client-kube-apiserver.key --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --profiling=false --proxy-client-cert-file=/var/lib/rancher/rke2/server/tls/client-auth-proxy.crt --proxy-client-key-file=/var/lib/rancher/rke2/server/tls/client-auth-proxy.key --requestheader-allowed-names=system:auth-proxy --requestheader-client-ca-file=/var/lib/rancher/rke2/server/tls/request-header-ca.crt --requestheader-extra-headers-prefix=X-Remote-Extra- --requestheader-group-headers=X-Remote-Group --requestheader-username-headers=X-Remote-User --secure-port=6443 --service-account-extend-token-expiration=false --service-account-issuer=https://kubernetes.default.svc.cluster.local --service-account-key-file=/var/lib/rancher/rke2/server/tls/service.key --service-account-signing-key-file=/var/lib/rancher/rke2/server/tls/service.current.key --service-cluster-ip-range=10.43.0.0/16 --service-node-port-range=30000-32767 --storage-backend=etcd3 --tls-cert-file=/var/lib/rancher/rke2/server/tls/serving-kube-apiserver.crt --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --tls-private-key-file=/var/lib/rancher/rke2/server/tls/serving-kube-apiserver.key
Remediação:
Edite o arquivo de configuração do RKE2 /etc/rancher/rke2/config.yaml e defina o parâmetro --service-account-extend-token-expiration como false antes de recarregar o rke2, conforme abaixo: kube-apiserver-arg:
-
"service-account-extend-token-expiration=false" Por padrão, este parâmetro é definido como true.
1.3 Gerenciador de Controladores
1.3.1 Certifique-se de que o argumento --terminated-pod-gc-threshold esteja configurado adequadamente (Manual)
Resultado: PASS
Auditoria
/bin/ps -fC kube-controller-manager
Resultado Esperado: '--terminated-pod-gc-threshold' está presente
Valor Retornado:
UID PID PPID C STIME TTY TIME CMD
root 18380 2666 1 16:15 ? 00:00:04 kube-controller-manager --permit-port-sharing=true --flex-volume-plugin-dir=/var/lib/kubelet/volumeplugins --terminated-pod-gc-threshold=1000 --allocate-node-cidrs=true --authentication-kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --authorization-kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --bind-address=127.0.0.1 --cluster-cidr=10.42.0.0/16 --cluster-signing-kube-apiserver-client-cert-file=/var/lib/rancher/rke2/server/tls/client-ca.nochain.crt --cluster-signing-kube-apiserver-client-key-file=/var/lib/rancher/rke2/server/tls/client-ca.key --cluster-signing-kubelet-client-cert-file=/var/lib/rancher/rke2/server/tls/client-ca.nochain.crt --cluster-signing-kubelet-client-key-file=/var/lib/rancher/rke2/server/tls/client-ca.key --cluster-signing-kubelet-serving-cert-file=/var/lib/rancher/rke2/server/tls/server-ca.nochain.crt --cluster-signing-kubelet-serving-key-file=/var/lib/rancher/rke2/server/tls/server-ca.key --cluster-signing-legacy-unknown-cert-file=/var/lib/rancher/rke2/server/tls/server-ca.nochain.crt --cluster-signing-legacy-unknown-key-file=/var/lib/rancher/rke2/server/tls/server-ca.key --configure-cloud-routes=false --controllers=*,tokencleaner,-service,-route,-cloud-node-lifecycle --kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --profiling=false --root-ca-file=/var/lib/rancher/rke2/server/tls/server-ca.crt --secure-port=10257 --service-account-private-key-file=/var/lib/rancher/rke2/server/tls/service.current.key --service-cluster-ip-range=10.43.0.0/16 --tls-cert-file=/var/lib/rancher/rke2/server/tls/kube-controller-manager/kube-controller-manager.crt --tls-private-key-file=/var/lib/rancher/rke2/server/tls/kube-controller-manager/kube-controller-manager.key --use-service-account-credentials=true
Remediação:
Por padrão, o RKE2 define um terminated-pod-gc-threshold de 1000. Se você precisar alterar esse valor, edite o arquivo de configuração do RKE2 /etc/rancher/rke2/config.yaml no nó do plano de controle e defina o --terminated-pod-gc-threshold para um limite apropriado,
kube-controller-manager-arg: - "terminated-pod-gc-threshold=10"
1.3.2 Certifique-se de que o argumento --profiling esteja definido como falso (Automatizado)
Resultado: PASS
Auditoria
/bin/ps -fC kube-controller-manager
Resultado Esperado: '--profiling' é igual a 'false'
Valor Retornado:
UID PID PPID C STIME TTY TIME CMD
root 18380 2666 1 16:15 ? 00:00:04 kube-controller-manager --permit-port-sharing=true --flex-volume-plugin-dir=/var/lib/kubelet/volumeplugins --terminated-pod-gc-threshold=1000 --allocate-node-cidrs=true --authentication-kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --authorization-kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --bind-address=127.0.0.1 --cluster-cidr=10.42.0.0/16 --cluster-signing-kube-apiserver-client-cert-file=/var/lib/rancher/rke2/server/tls/client-ca.nochain.crt --cluster-signing-kube-apiserver-client-key-file=/var/lib/rancher/rke2/server/tls/client-ca.key --cluster-signing-kubelet-client-cert-file=/var/lib/rancher/rke2/server/tls/client-ca.nochain.crt --cluster-signing-kubelet-client-key-file=/var/lib/rancher/rke2/server/tls/client-ca.key --cluster-signing-kubelet-serving-cert-file=/var/lib/rancher/rke2/server/tls/server-ca.nochain.crt --cluster-signing-kubelet-serving-key-file=/var/lib/rancher/rke2/server/tls/server-ca.key --cluster-signing-legacy-unknown-cert-file=/var/lib/rancher/rke2/server/tls/server-ca.nochain.crt --cluster-signing-legacy-unknown-key-file=/var/lib/rancher/rke2/server/tls/server-ca.key --configure-cloud-routes=false --controllers=*,tokencleaner,-service,-route,-cloud-node-lifecycle --kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --profiling=false --root-ca-file=/var/lib/rancher/rke2/server/tls/server-ca.crt --secure-port=10257 --service-account-private-key-file=/var/lib/rancher/rke2/server/tls/service.current.key --service-cluster-ip-range=10.43.0.0/16 --tls-cert-file=/var/lib/rancher/rke2/server/tls/kube-controller-manager/kube-controller-manager.crt --tls-private-key-file=/var/lib/rancher/rke2/server/tls/kube-controller-manager/kube-controller-manager.key --use-service-account-credentials=true
Remediação:
Por padrão, o RKE2 define o argumento --profiling como falso. Se essa verificação falhar, edite o arquivo de configuração do RKE2 /etc/rancher/rke2/config.yaml e remova quaisquer linhas como abaixo.
kube-controller-manager-arg: - "profiling=true"
1.3.3 Certifique-se de que o argumento --use-service-account-credentials esteja definido como verdadeiro (Automatizado)
Resultado: PASS
Auditoria
/bin/ps -fC kube-controller-manager
Resultado Esperado: '--use-service-account-credentials' não é igual a 'falso'
Valor Retornado:
UID PID PPID C STIME TTY TIME CMD
root 18380 2666 1 16:15 ? 00:00:04 kube-controller-manager --permit-port-sharing=true --flex-volume-plugin-dir=/var/lib/kubelet/volumeplugins --terminated-pod-gc-threshold=1000 --allocate-node-cidrs=true --authentication-kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --authorization-kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --bind-address=127.0.0.1 --cluster-cidr=10.42.0.0/16 --cluster-signing-kube-apiserver-client-cert-file=/var/lib/rancher/rke2/server/tls/client-ca.nochain.crt --cluster-signing-kube-apiserver-client-key-file=/var/lib/rancher/rke2/server/tls/client-ca.key --cluster-signing-kubelet-client-cert-file=/var/lib/rancher/rke2/server/tls/client-ca.nochain.crt --cluster-signing-kubelet-client-key-file=/var/lib/rancher/rke2/server/tls/client-ca.key --cluster-signing-kubelet-serving-cert-file=/var/lib/rancher/rke2/server/tls/server-ca.nochain.crt --cluster-signing-kubelet-serving-key-file=/var/lib/rancher/rke2/server/tls/server-ca.key --cluster-signing-legacy-unknown-cert-file=/var/lib/rancher/rke2/server/tls/server-ca.nochain.crt --cluster-signing-legacy-unknown-key-file=/var/lib/rancher/rke2/server/tls/server-ca.key --configure-cloud-routes=false --controllers=*,tokencleaner,-service,-route,-cloud-node-lifecycle --kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --profiling=false --root-ca-file=/var/lib/rancher/rke2/server/tls/server-ca.crt --secure-port=10257 --service-account-private-key-file=/var/lib/rancher/rke2/server/tls/service.current.key --service-cluster-ip-range=10.43.0.0/16 --tls-cert-file=/var/lib/rancher/rke2/server/tls/kube-controller-manager/kube-controller-manager.crt --tls-private-key-file=/var/lib/rancher/rke2/server/tls/kube-controller-manager/kube-controller-manager.key --use-service-account-credentials=true
Remediação:
Por padrão, o RKE2 define o argumento --use-service-account-credentials como verdadeiro. Se essa verificação falhar, edite o arquivo de configuração do RKE2 /etc/rancher/rke2/config.yaml e remova quaisquer linhas como abaixo.
kube-controller-manager-arg: - "use-service-account-credentials=false"
1.3.4 Certifique-se de que o argumento --service-account-private-key-file esteja definido de forma apropriada (Automatizado)
Resultado: PASS
Auditoria
/bin/ps -fC kube-controller-manager
Resultado Esperado: '--service-account-private-key-file' está presente
Valor Retornado:
UID PID PPID C STIME TTY TIME CMD
root 18380 2666 1 16:15 ? 00:00:04 kube-controller-manager --permit-port-sharing=true --flex-volume-plugin-dir=/var/lib/kubelet/volumeplugins --terminated-pod-gc-threshold=1000 --allocate-node-cidrs=true --authentication-kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --authorization-kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --bind-address=127.0.0.1 --cluster-cidr=10.42.0.0/16 --cluster-signing-kube-apiserver-client-cert-file=/var/lib/rancher/rke2/server/tls/client-ca.nochain.crt --cluster-signing-kube-apiserver-client-key-file=/var/lib/rancher/rke2/server/tls/client-ca.key --cluster-signing-kubelet-client-cert-file=/var/lib/rancher/rke2/server/tls/client-ca.nochain.crt --cluster-signing-kubelet-client-key-file=/var/lib/rancher/rke2/server/tls/client-ca.key --cluster-signing-kubelet-serving-cert-file=/var/lib/rancher/rke2/server/tls/server-ca.nochain.crt --cluster-signing-kubelet-serving-key-file=/var/lib/rancher/rke2/server/tls/server-ca.key --cluster-signing-legacy-unknown-cert-file=/var/lib/rancher/rke2/server/tls/server-ca.nochain.crt --cluster-signing-legacy-unknown-key-file=/var/lib/rancher/rke2/server/tls/server-ca.key --configure-cloud-routes=false --controllers=*,tokencleaner,-service,-route,-cloud-node-lifecycle --kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --profiling=false --root-ca-file=/var/lib/rancher/rke2/server/tls/server-ca.crt --secure-port=10257 --service-account-private-key-file=/var/lib/rancher/rke2/server/tls/service.current.key --service-cluster-ip-range=10.43.0.0/16 --tls-cert-file=/var/lib/rancher/rke2/server/tls/kube-controller-manager/kube-controller-manager.crt --tls-private-key-file=/var/lib/rancher/rke2/server/tls/kube-controller-manager/kube-controller-manager.key --use-service-account-credentials=true
Remediação:
Por padrão, o RKE2 fornece automaticamente o arquivo da chave privada da conta de serviço. Ele é gerado e localizado em /var/lib/rancher/rke2/server/tls/service.current.key. Se essa verificação falhar, edite o arquivo de configuração do RKE2 /etc/rancher/rke2/config.yaml e remova quaisquer linhas como abaixo.
kube-controller-manager-arg: - "service-account-private-key-file=<path>"
1.3.5 Certifique-se de que o argumento --root-ca-file esteja definido de forma apropriada (Automatizado)
Resultado: PASS
Auditoria
/bin/ps -fC kube-controller-manager
Resultado Esperado: '--root-ca-file' está presente
Valor Retornado:
UID PID PPID C STIME TTY TIME CMD
root 18380 2666 1 16:15 ? 00:00:04 kube-controller-manager --permit-port-sharing=true --flex-volume-plugin-dir=/var/lib/kubelet/volumeplugins --terminated-pod-gc-threshold=1000 --allocate-node-cidrs=true --authentication-kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --authorization-kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --bind-address=127.0.0.1 --cluster-cidr=10.42.0.0/16 --cluster-signing-kube-apiserver-client-cert-file=/var/lib/rancher/rke2/server/tls/client-ca.nochain.crt --cluster-signing-kube-apiserver-client-key-file=/var/lib/rancher/rke2/server/tls/client-ca.key --cluster-signing-kubelet-client-cert-file=/var/lib/rancher/rke2/server/tls/client-ca.nochain.crt --cluster-signing-kubelet-client-key-file=/var/lib/rancher/rke2/server/tls/client-ca.key --cluster-signing-kubelet-serving-cert-file=/var/lib/rancher/rke2/server/tls/server-ca.nochain.crt --cluster-signing-kubelet-serving-key-file=/var/lib/rancher/rke2/server/tls/server-ca.key --cluster-signing-legacy-unknown-cert-file=/var/lib/rancher/rke2/server/tls/server-ca.nochain.crt --cluster-signing-legacy-unknown-key-file=/var/lib/rancher/rke2/server/tls/server-ca.key --configure-cloud-routes=false --controllers=*,tokencleaner,-service,-route,-cloud-node-lifecycle --kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --profiling=false --root-ca-file=/var/lib/rancher/rke2/server/tls/server-ca.crt --secure-port=10257 --service-account-private-key-file=/var/lib/rancher/rke2/server/tls/service.current.key --service-cluster-ip-range=10.43.0.0/16 --tls-cert-file=/var/lib/rancher/rke2/server/tls/kube-controller-manager/kube-controller-manager.crt --tls-private-key-file=/var/lib/rancher/rke2/server/tls/kube-controller-manager/kube-controller-manager.key --use-service-account-credentials=true
Remediação:
Por padrão, o RKE2 fornece automaticamente o arquivo root CA. Ele é gerado e localizado em /var/lib/rancher/rke2/server/tls/server-ca.crt. Se por algum motivo você precisar fornecer seu próprio CA, considere usar a ferramenta de linha de comando de certificado do rke2. Se essa verificação falhar, edite o arquivo de configuração do RKE2 /etc/rancher/rke2/config.yaml e remova quaisquer linhas como abaixo.
kube-controller-manager-arg: - "root-ca-file=<path>"
1.3.6 Certifique-se de que o argumento RotateKubeletServerCertificate esteja definido como true (Automatizado)
Resultado: PASS
Auditoria
/bin/ps -fC kube-controller-manager
Resultado Esperado: '--feature-gates' está presente OU '--feature-gates' não está presente
Valor Retornado:
UID PID PPID C STIME TTY TIME CMD
root 18380 2666 1 16:15 ? 00:00:04 kube-controller-manager --permit-port-sharing=true --flex-volume-plugin-dir=/var/lib/kubelet/volumeplugins --terminated-pod-gc-threshold=1000 --allocate-node-cidrs=true --authentication-kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --authorization-kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --bind-address=127.0.0.1 --cluster-cidr=10.42.0.0/16 --cluster-signing-kube-apiserver-client-cert-file=/var/lib/rancher/rke2/server/tls/client-ca.nochain.crt --cluster-signing-kube-apiserver-client-key-file=/var/lib/rancher/rke2/server/tls/client-ca.key --cluster-signing-kubelet-client-cert-file=/var/lib/rancher/rke2/server/tls/client-ca.nochain.crt --cluster-signing-kubelet-client-key-file=/var/lib/rancher/rke2/server/tls/client-ca.key --cluster-signing-kubelet-serving-cert-file=/var/lib/rancher/rke2/server/tls/server-ca.nochain.crt --cluster-signing-kubelet-serving-key-file=/var/lib/rancher/rke2/server/tls/server-ca.key --cluster-signing-legacy-unknown-cert-file=/var/lib/rancher/rke2/server/tls/server-ca.nochain.crt --cluster-signing-legacy-unknown-key-file=/var/lib/rancher/rke2/server/tls/server-ca.key --configure-cloud-routes=false --controllers=*,tokencleaner,-service,-route,-cloud-node-lifecycle --kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --profiling=false --root-ca-file=/var/lib/rancher/rke2/server/tls/server-ca.crt --secure-port=10257 --service-account-private-key-file=/var/lib/rancher/rke2/server/tls/service.current.key --service-cluster-ip-range=10.43.0.0/16 --tls-cert-file=/var/lib/rancher/rke2/server/tls/kube-controller-manager/kube-controller-manager.crt --tls-private-key-file=/var/lib/rancher/rke2/server/tls/kube-controller-manager/kube-controller-manager.key --use-service-account-credentials=true
Remediação:
Por padrão, o RKE2 não define o recurso RotateKubeletServerCertificate. Se você ativou esse recurso, deve removê-lo. Se essa verificação falhar, edite o arquivo de configuração do RKE2 /etc/rancher/rke2/config.yaml, remova quaisquer linhas como abaixo.
kube-controller-manager-arg: - "feature-gate=RotateKubeletServerCertificate"
1.3.7 Certifique-se de que o argumento --bind-address esteja definido como 127.0.0.1 (Automatizado)
Resultado: PASS
Auditoria
/bin/ps -fC kube-controller-manager
Resultado Esperado: '--bind-address' é igual a '127.0.0.1' OU '--bind-address' não está presente
Valor Retornado:
UID PID PPID C STIME TTY TIME CMD
root 18380 2666 1 16:15 ? 00:00:04 kube-controller-manager --permit-port-sharing=true --flex-volume-plugin-dir=/var/lib/kubelet/volumeplugins --terminated-pod-gc-threshold=1000 --allocate-node-cidrs=true --authentication-kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --authorization-kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --bind-address=127.0.0.1 --cluster-cidr=10.42.0.0/16 --cluster-signing-kube-apiserver-client-cert-file=/var/lib/rancher/rke2/server/tls/client-ca.nochain.crt --cluster-signing-kube-apiserver-client-key-file=/var/lib/rancher/rke2/server/tls/client-ca.key --cluster-signing-kubelet-client-cert-file=/var/lib/rancher/rke2/server/tls/client-ca.nochain.crt --cluster-signing-kubelet-client-key-file=/var/lib/rancher/rke2/server/tls/client-ca.key --cluster-signing-kubelet-serving-cert-file=/var/lib/rancher/rke2/server/tls/server-ca.nochain.crt --cluster-signing-kubelet-serving-key-file=/var/lib/rancher/rke2/server/tls/server-ca.key --cluster-signing-legacy-unknown-cert-file=/var/lib/rancher/rke2/server/tls/server-ca.nochain.crt --cluster-signing-legacy-unknown-key-file=/var/lib/rancher/rke2/server/tls/server-ca.key --configure-cloud-routes=false --controllers=*,tokencleaner,-service,-route,-cloud-node-lifecycle --kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --profiling=false --root-ca-file=/var/lib/rancher/rke2/server/tls/server-ca.crt --secure-port=10257 --service-account-private-key-file=/var/lib/rancher/rke2/server/tls/service.current.key --service-cluster-ip-range=10.43.0.0/16 --tls-cert-file=/var/lib/rancher/rke2/server/tls/kube-controller-manager/kube-controller-manager.crt --tls-private-key-file=/var/lib/rancher/rke2/server/tls/kube-controller-manager/kube-controller-manager.key --use-service-account-credentials=true
Remediação:
Por padrão, o RKE2 define o argumento --bind-address como 127.0.0.1. Se essa verificação falhar, edite o arquivo de configuração do RKE2 /etc/rancher/rke2/config.yaml e remova quaisquer linhas como abaixo.
kube-controller-manager-arg: - "bind-address=<IP>"
1.4 Agendador
1.4.1 Certifique-se de que o argumento --profiling esteja definido como false (Automatizado)
Resultado: PASS
Auditoria
/bin/ps -fC kube-scheduler
Resultado Esperado: '--profiling' é igual a 'false'
Valor Retornado:
UID PID PPID C STIME TTY TIME CMD
root 18054 2705 0 16:15 ? 00:00:01 kube-scheduler --permit-port-sharing=true --authentication-kubeconfig=/var/lib/rancher/rke2/server/cred/scheduler.kubeconfig --authorization-kubeconfig=/var/lib/rancher/rke2/server/cred/scheduler.kubeconfig --bind-address=127.0.0.1 --kubeconfig=/var/lib/rancher/rke2/server/cred/scheduler.kubeconfig --profiling=false --secure-port=10259 --tls-cert-file=/var/lib/rancher/rke2/server/tls/kube-scheduler/kube-scheduler.crt --tls-private-key-file=/var/lib/rancher/rke2/server/tls/kube-scheduler/kube-scheduler.key
Remediação:
Por padrão, o RKE2 define o argumento --profiling como falso. Se essa verificação falhar, edite o arquivo de configuração do RKE2 /etc/rancher/rke2/config.yaml e remova quaisquer linhas como abaixo.
kube-scheduler-arg: - "profiling=true"
1.4.2 Certifique-se de que o argumento --bind-address esteja definido como 127.0.0.1 (Automatizado)
Resultado: PASS
Auditoria
/bin/ps -fC kube-scheduler
Resultado Esperado: '--bind-address' é igual a '127.0.0.1' OU '--bind-address' não está presente
Valor Retornado:
UID PID PPID C STIME TTY TIME CMD
root 18054 2705 0 16:15 ? 00:00:01 kube-scheduler --permit-port-sharing=true --authentication-kubeconfig=/var/lib/rancher/rke2/server/cred/scheduler.kubeconfig --authorization-kubeconfig=/var/lib/rancher/rke2/server/cred/scheduler.kubeconfig --bind-address=127.0.0.1 --kubeconfig=/var/lib/rancher/rke2/server/cred/scheduler.kubeconfig --profiling=false --secure-port=10259 --tls-cert-file=/var/lib/rancher/rke2/server/tls/kube-scheduler/kube-scheduler.crt --tls-private-key-file=/var/lib/rancher/rke2/server/tls/kube-scheduler/kube-scheduler.key
Remediação:
Por padrão, o RKE2 define o argumento --bind-address como 127.0.0.1. Se essa verificação falhar, edite o arquivo de configuração do RKE2 /etc/rancher/rke2/config.yaml e remova quaisquer linhas como abaixo.
kube-scheduler-arg: - "bind-address=<IP>"
2 Configuração do Nó Etcd
2 Configuração do Nó Etcd
2.1 Certifique-se de que os argumentos --cert-file e --key-file estejam configurados adequadamente (Automatizado)
Resultado: PASS
Auditoria
cat /var/lib/rancher/rke2/server/db/etcd/config
Resultado Esperado: '.client-transport-security.cert-file' é igual a '/var/lib/rancher/rke2/server/tls/etcd/server-client.crt' E '.client-transport-security.key-file' é igual a '/var/lib/rancher/rke2/server/tls/etcd/server-client.key'
Valor retornado:
advertise-client-urls: https://10.10.10.100:2379
client-transport-security:
cert-file: /var/lib/rancher/rke2/server/tls/etcd/server-client.crt
client-cert-auth: true
key-file: /var/lib/rancher/rke2/server/tls/etcd/server-client.key
trusted-ca-file: /var/lib/rancher/rke2/server/tls/etcd/server-ca.crt
data-dir: /var/lib/rancher/rke2/server/db/etcd
election-timeout: 5000
experimental-initial-corrupt-check: true
experimental-watch-progress-notify-interval: 5000000000
heartbeat-interval: 500
initial-advertise-peer-urls: https://10.10.10.100:2380
initial-cluster: server-0-d66375b4=https://10.10.10.100:2380
initial-cluster-state: new
listen-client-http-urls: https://127.0.0.1:2382
listen-client-urls: https://127.0.0.1:2379,https://10.10.10.100:2379
listen-metrics-urls: http://127.0.0.1:2381
listen-peer-urls: https://127.0.0.1:2380,https://10.10.10.100:2380
log-outputs:
- stderr
logger: zap
name: server-0-d66375b4
peer-transport-security:
cert-file: /var/lib/rancher/rke2/server/tls/etcd/peer-server-client.crt
client-cert-auth: true
key-file: /var/lib/rancher/rke2/server/tls/etcd/peer-server-client.key
trusted-ca-file: /var/lib/rancher/rke2/server/tls/etcd/peer-ca.crt
snapshot-count: 10000
socket-options:
reuse-address: true
reuse-port: true
Remediação:
Por padrão, o RKE2 gera arquivos de certificado e chave para o etcd. Estes estão localizados em /var/lib/rancher/rke2/server/tls/etcd/. Se essa verificação falhar, certifique-se de que o arquivo de configuração /var/lib/rancher/rke2/server/db/etcd/config não foi modificado para usar arquivos de certificado e chave personalizados.
2.2 Certifique-se de que o argumento --client-cert-auth esteja definido como verdadeiro (Automatizado)
Resultado: PASS
Auditoria
cat /var/lib/rancher/rke2/server/db/etcd/config
Resultado esperado: 'ETCD_CLIENT_CERT_AUTH' está presente OU '.client-transport-security.client-cert-auth' é igual a 'verdadeiro'
Valor retornado:
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
HOSTNAME=server-0
ETCD_UNSUPPORTED_ARCH=
FILE_HASH=e37e99a1db555b43d54d98f8bd294bd808aed0b4791c9d1d94b05bcc783e66d6
NO_PROXY=.svc,.cluster.local,10.42.0.0/16,10.43.0.0/16
HOME=/
Remediação:
Por padrão, o RKE2 define o parâmetro --client-cert-auth como verdadeiro. Se essa verificação falhar, certifique-se de que o arquivo de configuração /var/lib/rancher/rke2/server/db/etcd/config não foi modificado para desabilitar a autenticação de certificado de cliente.
2.3 Certifique-se de que o argumento --auto-tls não esteja definido como verdadeiro (Automatizado)
Resultado: PASS
Auditoria
cat /var/lib/rancher/rke2/server/db/etcd/config
Resultado esperado: 'ETCD_AUTO_TLS' não está presente OU 'ETCD_AUTO_TLS' está presente OU '.client-transport-security.auto-tls' está presente
Valor retornado:
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
HOSTNAME=server-0
ETCD_UNSUPPORTED_ARCH=
FILE_HASH=e37e99a1db555b43d54d98f8bd294bd808aed0b4791c9d1d94b05bcc783e66d6
NO_PROXY=.svc,.cluster.local,10.42.0.0/16,10.43.0.0/16
HOME=/
Remediação:
Por padrão, o RKE2 não define o parâmetro --auto-tls. Se esta verificação falhar, edite o arquivo de especificação do pod etcd /var/lib/rancher/rke2/server/db/etcd/config no nó mestre e remova o parâmetro --auto-tls ou defina-o como falso. client-transport-security: auto-tls: falso
2.4 Certifique-se de que os argumentos --peer-cert-file e --peer-key-file estejam configurados adequadamente (Automatizado)
Resultado: PASS
Auditoria
cat /var/lib/rancher/rke2/server/db/etcd/config
Resultado Esperado: '.peer-transport-security.cert-file' é igual a '/var/lib/rancher/rke2/server/tls/etcd/peer-server-client.crt' E '.peer-transport-security.key-file' é igual a '/var/lib/rancher/rke2/server/tls/etcd/peer-server-client.key'
Valor retornado:
advertise-client-urls: https://10.10.10.100:2379
client-transport-security:
cert-file: /var/lib/rancher/rke2/server/tls/etcd/server-client.crt
client-cert-auth: true
key-file: /var/lib/rancher/rke2/server/tls/etcd/server-client.key
trusted-ca-file: /var/lib/rancher/rke2/server/tls/etcd/server-ca.crt
data-dir: /var/lib/rancher/rke2/server/db/etcd
election-timeout: 5000
experimental-initial-corrupt-check: true
experimental-watch-progress-notify-interval: 5000000000
heartbeat-interval: 500
initial-advertise-peer-urls: https://10.10.10.100:2380
initial-cluster: server-0-d66375b4=https://10.10.10.100:2380
initial-cluster-state: new
listen-client-http-urls: https://127.0.0.1:2382
listen-client-urls: https://127.0.0.1:2379,https://10.10.10.100:2379
listen-metrics-urls: http://127.0.0.1:2381
listen-peer-urls: https://127.0.0.1:2380,https://10.10.10.100:2380
log-outputs:
- stderr
logger: zap
name: server-0-d66375b4
peer-transport-security:
cert-file: /var/lib/rancher/rke2/server/tls/etcd/peer-server-client.crt
client-cert-auth: true
key-file: /var/lib/rancher/rke2/server/tls/etcd/peer-server-client.key
trusted-ca-file: /var/lib/rancher/rke2/server/tls/etcd/peer-ca.crt
snapshot-count: 10000
socket-options:
reuse-address: true
reuse-port: true
Remediação:
Por padrão, o RKE2 gera arquivos de certificado e chave de par para o etcd. Estes estão localizados em /var/lib/rancher/rke2/server/tls/etcd/. Se esta verificação falhar, certifique-se de que o arquivo de configuração /var/lib/rancher/rke2/server/db/etcd/config não foi modificado para usar arquivos de certificado e chave de par personalizados.
2.5 Certifique-se de que o argumento --peer-client-cert-auth esteja definido como verdadeiro (Automatizado)
Resultado: PASS
Auditoria
cat /var/lib/rancher/rke2/server/db/etcd/config
Resultado esperado: 'ETCD_PEER_CLIENT_CERT_AUTH' está presente OU '.peer-transport-security.client-cert-auth' é igual a 'verdadeiro'
Valor retornado:
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
HOSTNAME=server-0
ETCD_UNSUPPORTED_ARCH=
FILE_HASH=e37e99a1db555b43d54d98f8bd294bd808aed0b4791c9d1d94b05bcc783e66d6
NO_PROXY=.svc,.cluster.local,10.42.0.0/16,10.43.0.0/16
HOME=/
Remediação:
Por padrão, o RKE2 define o parâmetro --peer-cert-auth como verdadeiro. Se esta verificação falhar, certifique-se de que o arquivo de configuração /var/lib/rancher/rke2/server/db/etcd/config não foi modificado para desabilitar a autenticação de certificado de cliente de par.
2.6 Certifique-se de que o argumento --peer-auto-tls não esteja definido como verdadeiro (Automatizado)
Resultado: PASS
Auditoria
cat /var/lib/rancher/rke2/server/db/etcd/config
Resultado esperado: 'ETCD_PEER_AUTO_TLS' não está presente OU 'ETCD_PEER_AUTO_TLS' está presente OU '.peer-transport-security.auto-tls' está presente
Valor retornado:
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
HOSTNAME=server-0
ETCD_UNSUPPORTED_ARCH=
FILE_HASH=e37e99a1db555b43d54d98f8bd294bd808aed0b4791c9d1d94b05bcc783e66d6
NO_PROXY=.svc,.cluster.local,10.42.0.0/16,10.43.0.0/16
HOME=/
Remediação:
Por padrão, o RKE2 não define o parâmetro --peer-auto-tls. Se esta verificação falhar, edite o arquivo de especificação do pod etcd /var/lib/rancher/rke2/server/db/etcd/config no nó mestre e remova o parâmetro --peer-auto-tls ou defina-o como falso. peer-transport-security: auto-tls: falso
2.7 Certifique-se de que uma Autoridade Certificadora única seja usada para etcd (Automatizado)
Resultado: PASS
Auditoria
cat /var/lib/rancher/rke2/server/db/etcd/config
Resultado esperado: 'ETCD_TRUSTED_CA_FILE' está presente OU '.peer-transport-security.trusted-ca-file' é igual a '/var/lib/rancher/rke2/server/tls/etcd/peer-ca.crt'
Valor retornado:
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
HOSTNAME=server-0
ETCD_UNSUPPORTED_ARCH=
FILE_HASH=e37e99a1db555b43d54d98f8bd294bd808aed0b4791c9d1d94b05bcc783e66d6
NO_PROXY=.svc,.cluster.local,10.42.0.0/16,10.43.0.0/16
HOME=/
Remediação:
Por padrão, o RKE2 gera uma autoridade certificadora única para etcd. Isso está localizado em /var/lib/rancher/rke2/server/tls/etcd/peer-ca.crt. Se esta verificação falhar, certifique-se de que o arquivo de configuração /var/lib/rancher/rke2/server/db/etcd/config não foi modificado para usar uma autoridade certificadora compartilhada.
3 Configuração do Plano de Controle
3.1 Autenticação e Autorização
3.1.1 A autenticação de certificado de cliente não deve ser usada para usuários (Manual)
Resultado: AVISO
Remediação: Mecanismos alternativos fornecidos pelo Kubernetes, como o uso de OIDC, devem ser implementados em vez de certificados de cliente.
3.2 Configuração de Log
3.2.1 Certifique-se de que uma política de auditoria mínima seja criada (Automatizado)
Resultado: PASS
Auditoria
/bin/ps -ef | grep kube-apiserver | grep -v grep
Resultado Esperado: '--arquivo-de-política-de-auditoria' está presente
Valor retornado:
root 18280 17706 5 16:15 ? 00:00:16 kube-apiserver --admission-control-config-file=/etc/rancher/rke2/rke2-pss.yaml --audit-policy-file=/etc/rancher/rke2/audit-policy.yaml --audit-log-maxage=30 --audit-log-maxbackup=10 --audit-log-maxsize=100 --audit-log-path=/var/lib/rancher/rke2/server/logs/audit.log --advertise-address=10.10.10.100 --allow-privileged=true --anonymous-auth=false --api-audiences=https://kubernetes.default.svc.cluster.local,rke2 --authorization-mode=Node,RBAC --bind-address=0.0.0.0 --cert-dir=/var/lib/rancher/rke2/server/tls/temporary-certs --client-ca-file=/var/lib/rancher/rke2/server/tls/client-ca.crt --egress-selector-config-file=/var/lib/rancher/rke2/server/etc/egress-selector-config.yaml --enable-admission-plugins=NodeRestriction --enable-aggregator-routing=true --enable-bootstrap-token-auth=true --encryption-provider-config=/var/lib/rancher/rke2/server/cred/encryption-config.json --encryption-provider-config-automatic-reload=true --etcd-cafile=/var/lib/rancher/rke2/server/tls/etcd/server-ca.crt --etcd-certfile=/var/lib/rancher/rke2/server/tls/etcd/client.crt --etcd-keyfile=/var/lib/rancher/rke2/server/tls/etcd/client.key --etcd-servers=https://127.0.0.1:2379 --kubelet-certificate-authority=/var/lib/rancher/rke2/server/tls/server-ca.crt --kubelet-client-certificate=/var/lib/rancher/rke2/server/tls/client-kube-apiserver.crt --kubelet-client-key=/var/lib/rancher/rke2/server/tls/client-kube-apiserver.key --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --profiling=false --proxy-client-cert-file=/var/lib/rancher/rke2/server/tls/client-auth-proxy.crt --proxy-client-key-file=/var/lib/rancher/rke2/server/tls/client-auth-proxy.key --requestheader-allowed-names=system:auth-proxy --requestheader-client-ca-file=/var/lib/rancher/rke2/server/tls/request-header-ca.crt --requestheader-extra-headers-prefix=X-Remote-Extra- --requestheader-group-headers=X-Remote-Group --requestheader-username-headers=X-Remote-User --secure-port=6443 --service-account-extend-token-expiration=false --service-account-issuer=https://kubernetes.default.svc.cluster.local --service-account-key-file=/var/lib/rancher/rke2/server/tls/service.key --service-account-signing-key-file=/var/lib/rancher/rke2/server/tls/service.current.key --service-cluster-ip-range=10.43.0.0/16 --service-node-port-range=30000-32767 --storage-backend=etcd3 --tls-cert-file=/var/lib/rancher/rke2/server/tls/serving-kube-apiserver.crt --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --tls-private-key-file=/var/lib/rancher/rke2/server/tls/serving-kube-apiserver.key
root 18380 2666 1 16:15 ? 00:00:04 kube-controller-manager --permit-port-sharing=true --flex-volume-plugin-dir=/var/lib/kubelet/volumeplugins --terminated-pod-gc-threshold=1000 --allocate-node-cidrs=true --authentication-kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --authorization-kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --bind-address=127.0.0.1 --cluster-cidr=10.42.0.0/16 --cluster-signing-kube-apiserver-client-cert-file=/var/lib/rancher/rke2/server/tls/client-ca.nochain.crt --cluster-signing-kube-apiserver-client-key-file=/var/lib/rancher/rke2/server/tls/client-ca.key --cluster-signing-kubelet-client-cert-file=/var/lib/rancher/rke2/server/tls/client-ca.nochain.crt --cluster-signing-kubelet-client-key-file=/var/lib/rancher/rke2/server/tls/client-ca.key --cluster-signing-kubelet-serving-cert-file=/var/lib/rancher/rke2/server/tls/server-ca.nochain.crt --cluster-signing-kubelet-serving-key-file=/var/lib/rancher/rke2/server/tls/server-ca.key --cluster-signing-legacy-unknown-cert-file=/var/lib/rancher/rke2/server/tls/server-ca.nochain.crt --cluster-signing-legacy-unknown-key-file=/var/lib/rancher/rke2/server/tls/server-ca.key --configure-cloud-routes=false --controllers=*,tokencleaner,-service,-route,-cloud-node-lifecycle --kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --profiling=false --root-ca-file=/var/lib/rancher/rke2/server/tls/server-ca.crt --secure-port=10257 --service-account-private-key-file=/var/lib/rancher/rke2/server/tls/service.current.key --service-cluster-ip-range=10.43.0.0/16 --tls-cert-file=/var/lib/rancher/rke2/server/tls/kube-controller-manager/kube-controller-manager.crt --tls-private-key-file=/var/lib/rancher/rke2/server/tls/kube-controller-manager/kube-controller-manager.key --use-service-account-credentials=true
Remediação:
Crie um arquivo de política de auditoria para seu cluster.
3.2.2 Certifique-se de que a política de auditoria abranja preocupações de segurança chave (Manual)
Resultado: AVISO
Remediação: Revise a política de auditoria fornecida para o cluster e certifique-se de que ela abranja pelo menos as seguintes áreas,
-
Acesso a Segredos gerenciados pelo cluster. Deve-se ter cuidado para registrar apenas Metadados para solicitações a Segredos, ConfigMaps e TokenReviews, a fim de evitar o risco de registrar dados sensíveis.
-
Modificação de objetos Pod e Deployment.
-
Uso de
pods/exec,pods/portforward,pods/proxyeservices/proxy. Para a maioria das solicitações, é recomendado registrar minimamente no nível de Metadados (o nível mais básico de registro).
4 Configuração de Segurança do Nó Worker
4.1 Arquivos de Configuração do Nó de Trabalho
4.1.1 Certifique-se de que as permissões do arquivo de serviço kubelet estejam definidas como 600 ou mais restritivas (Automatizado)
Resultado: Não Aplicável
Racional:
O kubelet é gerenciado pelo processo RKE2. Não há arquivo de serviço kubelet, toda a configuração é passada como argumentos no runtime.
4.1.2 Certifique-se de que a propriedade do arquivo de serviço kubelet esteja definida como root:root (Automatizado)
Resultado: Não Aplicável
Racional:
O kubelet é gerenciado pelo processo RKE2. Não há arquivo de serviço kubelet, toda a configuração é passada como argumentos no runtime.
4.1.3 Se o arquivo kubeconfig do proxy existir, certifique-se de que as permissões estejam definidas como 600 ou mais restritivas (Automatizado)
Resultado: PASS
Auditoria
/bin/sh -c 'if test -e /var/lib/rancher/rke2/agent/kubeproxy.kubeconfig; then stat -c permissions=%a /var/lib/rancher/rke2/agent/kubeproxy.kubeconfig; fi'
Resultado Esperado: as permissões têm 600, esperado 600 ou mais restritivas
Valor Retornado:
permissions=600
Remediação:
Execute o comando abaixo (com base na localização do arquivo em seu sistema) em cada nó trabalhador.
Por exemplo,
chmod 600 /var/lib/rancher/rke2/agent/kubeproxy.kubeconfig
4.1.4 Se o arquivo kubeconfig do proxy existir, certifique-se de que a propriedade esteja definida como root:root (Automatizado)
Resultado: PASS
Auditoria
/bin/sh -c 'if test -e /var/lib/rancher/rke2/agent/kubeproxy.kubeconfig; then stat -c %U:%G /var/lib/rancher/rke2/agent/kubeproxy.kubeconfig; fi'
Resultado Esperado: 'root:root' está presente
Valor Retornado:
root:root
Remediação:
Execute o comando abaixo (com base na localização do arquivo em seu sistema) em cada nó de trabalho.
Por exemplo, chown root:root /var/lib/rancher/rke2/agent/kubeproxy.kubeconfig
4.1.5 Certifique-se de que as permissões do arquivo --kubeconfig kubelet.conf estejam definidas como 600 ou mais restritivas (Automatizado)
Resultado: PASS
Auditoria
/bin/sh -c 'if test -e /var/lib/rancher/rke2/agent/kubelet.kubeconfig; then stat -c permissions=%a /var/lib/rancher/rke2/agent/kubelet.kubeconfig; fi'
Resultado Esperado: as permissões têm 600, esperado 600 ou mais restritivas
Valor Retornado:
permissions=600
Remediação:
Execute o comando abaixo (com base na localização do arquivo em seu sistema) em cada nó trabalhador.
Por exemplo,
chmod 600 /var/lib/rancher/rke2/agent/kubelet.kubeconfig
4.1.6 Certifique-se de que a propriedade do arquivo --kubeconfig kubelet.conf esteja definida como root:root (Automatizado)
Resultado: PASS
Auditoria
/bin/sh -c 'if test -e /var/lib/rancher/rke2/agent/kubelet.kubeconfig; then stat -c %U:%G /var/lib/rancher/rke2/agent/kubelet.kubeconfig; fi'
Resultado Esperado: 'root:root' é igual a 'root:root'
Valor Retornado:
root:root
Remediação:
Execute o comando abaixo (com base na localização do arquivo em seu sistema) em cada nó trabalhador.
Por exemplo,
chown root:root /var/lib/rancher/rke2/agent/kubelet.kubeconfig
4.1.7 Certifique-se de que as permissões do arquivo de CA estejam definidas como 600 ou mais restritivas (Automatizado)
Resultado: PASS
Auditoria
/bin/sh -c 'if test -e /var/lib/rancher/rke2/agent/client-ca.crt; then stat -c permissions=%a /var/lib/rancher/rke2/agent/client-ca.crt; fi'
Resultado Esperado: as permissões têm 600, esperado 600 ou mais restritivas
Valor Retornado:
permissions=600
Remediação:
Execute o comando abaixo (com base na localização do arquivo em seu sistema) em cada nó trabalhador.
Por exemplo,
chmod 600 /var/lib/rancher/rke2/agent/client-ca.crt
4.1.8 Certifique-se de que a propriedade do arquivo de autoridades certificadoras do cliente esteja definida como root:root (Automatizado)
Resultado: PASS
Auditoria
/bin/sh -c 'if test -e /var/lib/rancher/rke2/agent/client-ca.crt; then stat -c %U:%G /var/lib/rancher/rke2/agent/client-ca.crt; fi'
Resultado Esperado: 'root:root' é igual a 'root:root'
Valor Retornado:
root:root
Remediação:
Execute o seguinte comando para modificar a propriedade do arquivo --client-ca-file.
chown root:root /var/lib/rancher/rke2/agent/client-ca.crt
4.1.9 Se o arquivo de configuração kubelet config.yaml estiver sendo usado, valide as permissões definidas como 600 ou mais restritivas (Automatizado)
Resultado: Não Aplicável
Racional:
O kubelet é gerenciado pelo processo RKE2. Não há arquivo de configuração do kubelet, toda a configuração é passada como argumentos em tempo de execução.
4.1.10 Se o arquivo de configuração kubelet config.yaml estiver sendo usado, valide se a propriedade do arquivo está definida como root:root (Automatizado)
Resultado: Não Aplicável
Racional:
O kubelet é gerenciado pelo processo RKE2. Não há arquivo de configuração do kubelet, toda a configuração é passada como argumentos em tempo de execução.
4.2 Kubelet
4.2.1 Certifique-se de que o argumento --anonymous-auth esteja definido como false (Automatizado)
Resultado: PASS
Auditoria
/bin/cat /var/lib/rancher/rke2/agent/etc/kubelet.conf.d/00-rke2-defaults.conf
Resultado Esperado: '.authentication.anonymous.enabled' é igual a 'falso'
Valor retornado:
address: 0.0.0.0
apiVersion: kubelet.config.k8s.io/v1beta1
authentication:
anonymous:
enabled: false
webhook:
cacheTTL: 2m0s
enabled: true
x509:
clientCAFile: /var/lib/rancher/rke2/agent/client-ca.crt
authorization:
mode: Webhook
webhook:
cacheAuthorizedTTL: 5m0s
cacheUnauthorizedTTL: 30s
cgroupDriver: systemd
clusterDNS:
- 10.43.0.10
clusterDomain: cluster.local
containerRuntimeEndpoint: unix:///run/k3s/containerd/containerd.sock
cpuManagerReconcilePeriod: 10s
crashLoopBackOff: {}
evictionHard:
imagefs.available: 5%
nodefs.available: 5%
evictionMinimumReclaim:
imagefs.available: 10%
nodefs.available: 10%
evictionPressureTransitionPeriod: 5m0s
failSwapOn: false
fileCheckFrequency: 20s
healthzBindAddress: 127.0.0.1
httpCheckFrequency: 20s
imageMaximumGCAge: 0s
imageMinimumGCAge: 2m0s
kind: KubeletConfiguration
logging:
flushFrequency: 5s
format: text
options:
json:
infoBufferSize: "0"
text:
infoBufferSize: "0"
verbosity: 0
memorySwap: {}
nodeStatusReportFrequency: 5m0s
nodeStatusUpdateFrequency: 10s
protectKernelDefaults: true
resolvConf: /run/systemd/resolve/resolv.conf
runtimeRequestTimeout: 2m0s
serializeImagePulls: false
shutdownGracePeriod: 0s
shutdownGracePeriodCriticalPods: 0s
staticPodPath: /var/lib/rancher/rke2/agent/pod-manifests
streamingConnectionIdleTimeout: 4h0m0s
syncFrequency: 1m0s
tlsCertFile: /var/lib/rancher/rke2/agent/serving-kubelet.crt
tlsPrivateKeyFile: /var/lib/rancher/rke2/agent/serving-kubelet.key
volumeStatsAggPeriod: 1m0s
Remediação:
Por padrão, o RKE2 define o --anonymous-auth como false. Se essa verificação falhar, edite o arquivo de configuração do RKE2 /etc/rancher/rke2/config.yaml, remova quaisquer linhas semelhantes às abaixo.
kubelet-arg: - "anonymous-auth=true"
Com base no seu sistema, reinicie o serviço RKE2. Por exemplo, systemctl restart rke2-server.service.
4.2.2 Certifique-se de que o argumento --authorization-mode não esteja definido como AlwaysAllow (Automatizado)
Resultado: PASS
Auditoria
/bin/cat /var/lib/rancher/rke2/agent/etc/kubelet.conf.d/00-rke2-defaults.conf
Resultado Esperado: '.authorization.mode' não possui 'AlwaysAllow'
Valor retornado:
address: 0.0.0.0
apiVersion: kubelet.config.k8s.io/v1beta1
authentication:
anonymous:
enabled: false
webhook:
cacheTTL: 2m0s
enabled: true
x509:
clientCAFile: /var/lib/rancher/rke2/agent/client-ca.crt
authorization:
mode: Webhook
webhook:
cacheAuthorizedTTL: 5m0s
cacheUnauthorizedTTL: 30s
cgroupDriver: systemd
clusterDNS:
- 10.43.0.10
clusterDomain: cluster.local
containerRuntimeEndpoint: unix:///run/k3s/containerd/containerd.sock
cpuManagerReconcilePeriod: 10s
crashLoopBackOff: {}
evictionHard:
imagefs.available: 5%
nodefs.available: 5%
evictionMinimumReclaim:
imagefs.available: 10%
nodefs.available: 10%
evictionPressureTransitionPeriod: 5m0s
failSwapOn: false
fileCheckFrequency: 20s
healthzBindAddress: 127.0.0.1
httpCheckFrequency: 20s
imageMaximumGCAge: 0s
imageMinimumGCAge: 2m0s
kind: KubeletConfiguration
logging:
flushFrequency: 5s
format: text
options:
json:
infoBufferSize: "0"
text:
infoBufferSize: "0"
verbosity: 0
memorySwap: {}
nodeStatusReportFrequency: 5m0s
nodeStatusUpdateFrequency: 10s
protectKernelDefaults: true
resolvConf: /run/systemd/resolve/resolv.conf
runtimeRequestTimeout: 2m0s
serializeImagePulls: false
shutdownGracePeriod: 0s
shutdownGracePeriodCriticalPods: 0s
staticPodPath: /var/lib/rancher/rke2/agent/pod-manifests
streamingConnectionIdleTimeout: 4h0m0s
syncFrequency: 1m0s
tlsCertFile: /var/lib/rancher/rke2/agent/serving-kubelet.crt
tlsPrivateKeyFile: /var/lib/rancher/rke2/agent/serving-kubelet.key
volumeStatsAggPeriod: 1m0s
Remediação:
Por padrão, o RKE2 não define o --authorization-mode como AlwaysAllow. Se essa verificação falhar, edite o arquivo de configuração do RKE2 /etc/rancher/rke2/config.yaml, remova quaisquer linhas semelhantes às abaixo.
kubelet-arg: - "authorization-mode=AlwaysAllow"
Com base no seu sistema, reinicie o serviço RKE2. Por exemplo, systemctl restart rke2-server.service.
4.2.3 Certifique-se de que o argumento --client-ca-file esteja configurado de forma adequada (Automatizado)
Resultado: PASS
Auditoria
/bin/cat /var/lib/rancher/rke2/agent/etc/kubelet.conf.d/00-rke2-defaults.conf
Resultado Esperado: '.authentication.x509.clientCAFile' está presente
Valor retornado:
address: 0.0.0.0
apiVersion: kubelet.config.k8s.io/v1beta1
authentication:
anonymous:
enabled: false
webhook:
cacheTTL: 2m0s
enabled: true
x509:
clientCAFile: /var/lib/rancher/rke2/agent/client-ca.crt
authorization:
mode: Webhook
webhook:
cacheAuthorizedTTL: 5m0s
cacheUnauthorizedTTL: 30s
cgroupDriver: systemd
clusterDNS:
- 10.43.0.10
clusterDomain: cluster.local
containerRuntimeEndpoint: unix:///run/k3s/containerd/containerd.sock
cpuManagerReconcilePeriod: 10s
crashLoopBackOff: {}
evictionHard:
imagefs.available: 5%
nodefs.available: 5%
evictionMinimumReclaim:
imagefs.available: 10%
nodefs.available: 10%
evictionPressureTransitionPeriod: 5m0s
failSwapOn: false
fileCheckFrequency: 20s
healthzBindAddress: 127.0.0.1
httpCheckFrequency: 20s
imageMaximumGCAge: 0s
imageMinimumGCAge: 2m0s
kind: KubeletConfiguration
logging:
flushFrequency: 5s
format: text
options:
json:
infoBufferSize: "0"
text:
infoBufferSize: "0"
verbosity: 0
memorySwap: {}
nodeStatusReportFrequency: 5m0s
nodeStatusUpdateFrequency: 10s
protectKernelDefaults: true
resolvConf: /run/systemd/resolve/resolv.conf
runtimeRequestTimeout: 2m0s
serializeImagePulls: false
shutdownGracePeriod: 0s
shutdownGracePeriodCriticalPods: 0s
staticPodPath: /var/lib/rancher/rke2/agent/pod-manifests
streamingConnectionIdleTimeout: 4h0m0s
syncFrequency: 1m0s
tlsCertFile: /var/lib/rancher/rke2/agent/serving-kubelet.crt
tlsPrivateKeyFile: /var/lib/rancher/rke2/agent/serving-kubelet.key
volumeStatsAggPeriod: 1m0s
Remediação:
Por padrão, o RKE2 fornece automaticamente o certificado CA do cliente para o Kubelet. Ele é gerado e localizado em /var/lib/rancher/rke2/agent/client-ca.crt
4.2.4 Verifique se, se definido, o argumento --read-only-port está definido como 0 (Automatizado)
Resultado: PASS
Auditoria
/bin/cat /var/lib/rancher/rke2/agent/etc/kubelet.conf.d/00-rke2-defaults.conf
Resultado Esperado: '--read-only-port' é igual a '0' OU '--read-only-port' não está presente
Valor Retornado:
UID PID PPID C STIME TTY TIME CMD
root 17649 17422 2 16:15 ? 00:00:08 kubelet --volume-plugin-dir=/var/lib/kubelet/volumeplugins --file-check-frequency=5s --sync-frequency=30s --cloud-provider=external --config-dir=/var/lib/rancher/rke2/agent/etc/kubelet.conf.d --containerd=/run/k3s/containerd/containerd.sock --hostname-override=server-0 --kubeconfig=/var/lib/rancher/rke2/agent/kubelet.kubeconfig --node-ip=10.10.10.100 --node-labels= --read-only-port=0
Remediação:
Por padrão, o RKE2 define o --read-only-port como 0. Se você definiu isso para um valor diferente, deve configurá-lo de volta para 0. Edite o arquivo de configuração do RKE2 /etc/rancher/rke2/config.yaml, remova quaisquer linhas semelhantes às abaixo.
kubelet-arg: - "read-only-port=XXXX"
Com base no seu sistema, reinicie o serviço RKE2. Por exemplo, systemctl restart rke2-server.service.
4.2.5 Assegure-se de que o argumento --streaming-connection-idle-timeout não esteja definido como 0 (Manual)
Resultado: PASS
Auditoria
/bin/cat /var/lib/rancher/rke2/agent/etc/kubelet.conf.d/00-rke2-defaults.conf
Resultado Esperado: '.streamingConnectionIdleTimeout' não é igual a '0' OU '.streamingConnectionIdleTimeout' não está presente
Valor retornado:
address: 0.0.0.0
apiVersion: kubelet.config.k8s.io/v1beta1
authentication:
anonymous:
enabled: false
webhook:
cacheTTL: 2m0s
enabled: true
x509:
clientCAFile: /var/lib/rancher/rke2/agent/client-ca.crt
authorization:
mode: Webhook
webhook:
cacheAuthorizedTTL: 5m0s
cacheUnauthorizedTTL: 30s
cgroupDriver: systemd
clusterDNS:
- 10.43.0.10
clusterDomain: cluster.local
containerRuntimeEndpoint: unix:///run/k3s/containerd/containerd.sock
cpuManagerReconcilePeriod: 10s
crashLoopBackOff: {}
evictionHard:
imagefs.available: 5%
nodefs.available: 5%
evictionMinimumReclaim:
imagefs.available: 10%
nodefs.available: 10%
evictionPressureTransitionPeriod: 5m0s
failSwapOn: false
fileCheckFrequency: 20s
healthzBindAddress: 127.0.0.1
httpCheckFrequency: 20s
imageMaximumGCAge: 0s
imageMinimumGCAge: 2m0s
kind: KubeletConfiguration
logging:
flushFrequency: 5s
format: text
options:
json:
infoBufferSize: "0"
text:
infoBufferSize: "0"
verbosity: 0
memorySwap: {}
nodeStatusReportFrequency: 5m0s
nodeStatusUpdateFrequency: 10s
protectKernelDefaults: true
resolvConf: /run/systemd/resolve/resolv.conf
runtimeRequestTimeout: 2m0s
serializeImagePulls: false
shutdownGracePeriod: 0s
shutdownGracePeriodCriticalPods: 0s
staticPodPath: /var/lib/rancher/rke2/agent/pod-manifests
streamingConnectionIdleTimeout: 4h0m0s
syncFrequency: 1m0s
tlsCertFile: /var/lib/rancher/rke2/agent/serving-kubelet.crt
tlsPrivateKeyFile: /var/lib/rancher/rke2/agent/serving-kubelet.key
volumeStatsAggPeriod: 1m0s
Remediação:
Edite o arquivo de configuração do RKE2 /etc/rancher/rke2/config.yaml, defina o seguinte parâmetro para um valor apropriado.
kubelet-arg: - "streaming-connection-idle-timeout=5m"
Com base no seu sistema, reinicie o serviço RKE2. Por exemplo, systemctl restart rke2-server.service.
4.2.6 Assegure-se de que o argumento --make-iptables-util-chains esteja definido como true (Automatizado)
Resultado: PASS
Auditoria
/bin/cat /var/lib/rancher/rke2/agent/etc/kubelet.conf.d/00-rke2-defaults.conf
Resultado Esperado: '.makeIPTablesUtilChains' está presente OU '.makeIPTablesUtilChains' não está presente
Valor retornado:
address: 0.0.0.0
apiVersion: kubelet.config.k8s.io/v1beta1
authentication:
anonymous:
enabled: false
webhook:
cacheTTL: 2m0s
enabled: true
x509:
clientCAFile: /var/lib/rancher/rke2/agent/client-ca.crt
authorization:
mode: Webhook
webhook:
cacheAuthorizedTTL: 5m0s
cacheUnauthorizedTTL: 30s
cgroupDriver: systemd
clusterDNS:
- 10.43.0.10
clusterDomain: cluster.local
containerRuntimeEndpoint: unix:///run/k3s/containerd/containerd.sock
cpuManagerReconcilePeriod: 10s
crashLoopBackOff: {}
evictionHard:
imagefs.available: 5%
nodefs.available: 5%
evictionMinimumReclaim:
imagefs.available: 10%
nodefs.available: 10%
evictionPressureTransitionPeriod: 5m0s
failSwapOn: false
fileCheckFrequency: 20s
healthzBindAddress: 127.0.0.1
httpCheckFrequency: 20s
imageMaximumGCAge: 0s
imageMinimumGCAge: 2m0s
kind: KubeletConfiguration
logging:
flushFrequency: 5s
format: text
options:
json:
infoBufferSize: "0"
text:
infoBufferSize: "0"
verbosity: 0
memorySwap: {}
nodeStatusReportFrequency: 5m0s
nodeStatusUpdateFrequency: 10s
protectKernelDefaults: true
resolvConf: /run/systemd/resolve/resolv.conf
runtimeRequestTimeout: 2m0s
serializeImagePulls: false
shutdownGracePeriod: 0s
shutdownGracePeriodCriticalPods: 0s
staticPodPath: /var/lib/rancher/rke2/agent/pod-manifests
streamingConnectionIdleTimeout: 4h0m0s
syncFrequency: 1m0s
tlsCertFile: /var/lib/rancher/rke2/agent/serving-kubelet.crt
tlsPrivateKeyFile: /var/lib/rancher/rke2/agent/serving-kubelet.key
volumeStatsAggPeriod: 1m0s
Remediação:
Edite o arquivo de configuração do RKE2 /etc/rancher/rke2/config.yaml, defina o seguinte parâmetro.
kubelet-arg: - "make-iptables-util-chains=true"
Ou, remova o argumento --make-iptables-util-chains para permitir que o RKE2 use o valor padrão. Com base no seu sistema, reinicie o serviço RKE2. Por exemplo, systemctl restart rke2-server.service.
4.2.7 Certifique-se de que o argumento --hostname-override não esteja definido (Automatizado)
Resultado: Não Aplicável
Racional:
Por padrão, o RKE2 define o argumento --hostname-override. De acordo com as diretrizes do CIS, isso é para cumprir com provedores de nuvem que exigem essa flag para garantir que o hostname corresponda aos nomes dos nós.
4.2.8 Certifique-se de que o argumento eventRecordQPS esteja definido em um nível que garanta a captura adequada de eventos (Manual)
Resultado: PASS
Auditoria
/bin/cat /var/lib/rancher/rke2/agent/etc/kubelet.conf.d/00-rke2-defaults.conf
Resultado Esperado: '.eventRecordQPS' está presente OU '.eventRecordQPS' não está presente
Valor retornado:
address: 0.0.0.0
apiVersion: kubelet.config.k8s.io/v1beta1
authentication:
anonymous:
enabled: false
webhook:
cacheTTL: 2m0s
enabled: true
x509:
clientCAFile: /var/lib/rancher/rke2/agent/client-ca.crt
authorization:
mode: Webhook
webhook:
cacheAuthorizedTTL: 5m0s
cacheUnauthorizedTTL: 30s
cgroupDriver: systemd
clusterDNS:
- 10.43.0.10
clusterDomain: cluster.local
containerRuntimeEndpoint: unix:///run/k3s/containerd/containerd.sock
cpuManagerReconcilePeriod: 10s
crashLoopBackOff: {}
evictionHard:
imagefs.available: 5%
nodefs.available: 5%
evictionMinimumReclaim:
imagefs.available: 10%
nodefs.available: 10%
evictionPressureTransitionPeriod: 5m0s
failSwapOn: false
fileCheckFrequency: 20s
healthzBindAddress: 127.0.0.1
httpCheckFrequency: 20s
imageMaximumGCAge: 0s
imageMinimumGCAge: 2m0s
kind: KubeletConfiguration
logging:
flushFrequency: 5s
format: text
options:
json:
infoBufferSize: "0"
text:
infoBufferSize: "0"
verbosity: 0
memorySwap: {}
nodeStatusReportFrequency: 5m0s
nodeStatusUpdateFrequency: 10s
protectKernelDefaults: true
resolvConf: /run/systemd/resolve/resolv.conf
runtimeRequestTimeout: 2m0s
serializeImagePulls: false
shutdownGracePeriod: 0s
shutdownGracePeriodCriticalPods: 0s
staticPodPath: /var/lib/rancher/rke2/agent/pod-manifests
streamingConnectionIdleTimeout: 4h0m0s
syncFrequency: 1m0s
tlsCertFile: /var/lib/rancher/rke2/agent/serving-kubelet.crt
tlsPrivateKeyFile: /var/lib/rancher/rke2/agent/serving-kubelet.key
volumeStatsAggPeriod: 1m0s
Remediação:
Edite o arquivo de configuração do RKE2 /etc/rancher/rke2/config.yaml, defina o seguinte parâmetro para um valor apropriado.
kubelet-arg: - "event-qps=<value>"
Com base no seu sistema, reinicie o serviço RKE2. Por exemplo, systemctl restart rke2-server.service.
4.2.9 Certifique-se de que os argumentos --tls-cert-file e --tls-private-key-file estejam definidos conforme apropriado (Automatizado)
Resultado: PASS
Auditoria
/bin/cat /var/lib/rancher/rke2/agent/etc/kubelet.conf.d/00-rke2-defaults.conf
Resultado Esperado: '.tlsCertFile' está presente E '.tlsPrivateKeyFile' está presente
Valor retornado:
address: 0.0.0.0
apiVersion: kubelet.config.k8s.io/v1beta1
authentication:
anonymous:
enabled: false
webhook:
cacheTTL: 2m0s
enabled: true
x509:
clientCAFile: /var/lib/rancher/rke2/agent/client-ca.crt
authorization:
mode: Webhook
webhook:
cacheAuthorizedTTL: 5m0s
cacheUnauthorizedTTL: 30s
cgroupDriver: systemd
clusterDNS:
- 10.43.0.10
clusterDomain: cluster.local
containerRuntimeEndpoint: unix:///run/k3s/containerd/containerd.sock
cpuManagerReconcilePeriod: 10s
crashLoopBackOff: {}
evictionHard:
imagefs.available: 5%
nodefs.available: 5%
evictionMinimumReclaim:
imagefs.available: 10%
nodefs.available: 10%
evictionPressureTransitionPeriod: 5m0s
failSwapOn: false
fileCheckFrequency: 20s
healthzBindAddress: 127.0.0.1
httpCheckFrequency: 20s
imageMaximumGCAge: 0s
imageMinimumGCAge: 2m0s
kind: KubeletConfiguration
logging:
flushFrequency: 5s
format: text
options:
json:
infoBufferSize: "0"
text:
infoBufferSize: "0"
verbosity: 0
memorySwap: {}
nodeStatusReportFrequency: 5m0s
nodeStatusUpdateFrequency: 10s
protectKernelDefaults: true
resolvConf: /run/systemd/resolve/resolv.conf
runtimeRequestTimeout: 2m0s
serializeImagePulls: false
shutdownGracePeriod: 0s
shutdownGracePeriodCriticalPods: 0s
staticPodPath: /var/lib/rancher/rke2/agent/pod-manifests
streamingConnectionIdleTimeout: 4h0m0s
syncFrequency: 1m0s
tlsCertFile: /var/lib/rancher/rke2/agent/serving-kubelet.crt
tlsPrivateKeyFile: /var/lib/rancher/rke2/agent/serving-kubelet.key
volumeStatsAggPeriod: 1m0s
Remediação:
Por padrão, o RKE2 fornece automaticamente o certificado TLS e a chave privada para o Kubelet. Eles são gerados e localizados em /var/lib/rancher/rke2/agent/serving-kubelet.crt e /var/lib/rancher/rke2/agent/serving-kubelet.key. Se essa verificação falhar, edite o arquivo de configuração do RKE2 /etc/rancher/rke2/config.yaml e remova quaisquer linhas semelhantes às abaixo.
kubelet-arg: - "tls-cert-file=<path/to/tls-cert-file>" - "tls-private-key-file=<path/to/tls-private-key-file>"
4.2.10 Certifique-se de que o argumento --rotate-certificates não esteja definido como falso (Automatizado)
Resultado: PASS
Auditoria
/bin/cat /var/lib/rancher/rke2/agent/etc/kubelet.conf.d/00-rke2-defaults.conf
Resultado Esperado: '.rotateCertificates' está presente OU '.rotateCertificates' não está presente
Valor Retornado:
address: 0.0.0.0
apiVersion: kubelet.config.k8s.io/v1beta1
authentication:
anonymous:
enabled: false
webhook:
cacheTTL: 2m0s
enabled: true
x509:
clientCAFile: /var/lib/rancher/rke2/agent/client-ca.crt
authorization:
mode: Webhook
webhook:
cacheAuthorizedTTL: 5m0s
cacheUnauthorizedTTL: 30s
cgroupDriver: systemd
clusterDNS:
- 10.43.0.10
clusterDomain: cluster.local
containerRuntimeEndpoint: unix:///run/k3s/containerd/containerd.sock
cpuManagerReconcilePeriod: 10s
crashLoopBackOff: {}
evictionHard:
imagefs.available: 5%
nodefs.available: 5%
evictionMinimumReclaim:
imagefs.available: 10%
nodefs.available: 10%
evictionPressureTransitionPeriod: 5m0s
failSwapOn: false
fileCheckFrequency: 20s
healthzBindAddress: 127.0.0.1
httpCheckFrequency: 20s
imageMaximumGCAge: 0s
imageMinimumGCAge: 2m0s
kind: KubeletConfiguration
logging:
flushFrequency: 5s
format: text
options:
json:
infoBufferSize: "0"
text:
infoBufferSize: "0"
verbosity: 0
memorySwap: {}
nodeStatusReportFrequency: 5m0s
nodeStatusUpdateFrequency: 10s
protectKernelDefaults: true
resolvConf: /run/systemd/resolve/resolv.conf
runtimeRequestTimeout: 2m0s
serializeImagePulls: false
shutdownGracePeriod: 0s
shutdownGracePeriodCriticalPods: 0s
staticPodPath: /var/lib/rancher/rke2/agent/pod-manifests
streamingConnectionIdleTimeout: 4h0m0s
syncFrequency: 1m0s
tlsCertFile: /var/lib/rancher/rke2/agent/serving-kubelet.crt
tlsPrivateKeyFile: /var/lib/rancher/rke2/agent/serving-kubelet.key
volumeStatsAggPeriod: 1m0s
Remediação:
Por padrão, o RKE2 não define o argumento --rotate-certificates. Se essa verificação falhar, edite o arquivo de configuração do RKE2 /etc/rancher/rke2/config.yaml, remova qualquer parâmetro rotate-certificates. Com base no seu sistema, reinicie o serviço RKE2. Por exemplo, systemctl restart rke2-server.service
4.2.11 Verifique se o argumento RotateKubeletServerCertificate está definido como verdadeiro (Automatizado)
Resultado: PASS
Auditoria
/bin/cat /var/lib/rancher/rke2/agent/etc/kubelet.conf.d/00-rke2-defaults.conf
Resultado Esperado: '.featureGates.RotateKubeletServerCertificate' está presente OU '.featureGates.RotateKubeletServerCertificate' não está presente
Valor Retornado:
address: 0.0.0.0
apiVersion: kubelet.config.k8s.io/v1beta1
authentication:
anonymous:
enabled: false
webhook:
cacheTTL: 2m0s
enabled: true
x509:
clientCAFile: /var/lib/rancher/rke2/agent/client-ca.crt
authorization:
mode: Webhook
webhook:
cacheAuthorizedTTL: 5m0s
cacheUnauthorizedTTL: 30s
cgroupDriver: systemd
clusterDNS:
- 10.43.0.10
clusterDomain: cluster.local
containerRuntimeEndpoint: unix:///run/k3s/containerd/containerd.sock
cpuManagerReconcilePeriod: 10s
crashLoopBackOff: {}
evictionHard:
imagefs.available: 5%
nodefs.available: 5%
evictionMinimumReclaim:
imagefs.available: 10%
nodefs.available: 10%
evictionPressureTransitionPeriod: 5m0s
failSwapOn: false
fileCheckFrequency: 20s
healthzBindAddress: 127.0.0.1
httpCheckFrequency: 20s
imageMaximumGCAge: 0s
imageMinimumGCAge: 2m0s
kind: KubeletConfiguration
logging:
flushFrequency: 5s
format: text
options:
json:
infoBufferSize: "0"
text:
infoBufferSize: "0"
verbosity: 0
memorySwap: {}
nodeStatusReportFrequency: 5m0s
nodeStatusUpdateFrequency: 10s
protectKernelDefaults: true
resolvConf: /run/systemd/resolve/resolv.conf
runtimeRequestTimeout: 2m0s
serializeImagePulls: false
shutdownGracePeriod: 0s
shutdownGracePeriodCriticalPods: 0s
staticPodPath: /var/lib/rancher/rke2/agent/pod-manifests
streamingConnectionIdleTimeout: 4h0m0s
syncFrequency: 1m0s
tlsCertFile: /var/lib/rancher/rke2/agent/serving-kubelet.crt
tlsPrivateKeyFile: /var/lib/rancher/rke2/agent/serving-kubelet.key
volumeStatsAggPeriod: 1m0s
Remediação:
Por padrão, o RKE2 não define o recurso RotateKubeletServerCertificate. Se essa verificação falhar, edite o arquivo de configuração do RKE2 /etc/rancher/rke2/config.yaml, remova qualquer parâmetro RotateKubeletServerCertificate. Com base no seu sistema, reinicie o serviço RKE2. Por exemplo, systemctl restart rke2-server.service
4.2.12 Certifique-se de que o Kubelet utilize apenas Cifras Criptográficas Fortes (Manual)
Resultado: AVISO
Remediação: Edite o arquivo de configuração do RKE2 /etc/rancher/rke2/config.yaml,
kubelet-arg: - "tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305"
ou como um subconjunto desses valores. Com base no seu sistema, reinicie o serviço RKE2. Por exemplo, systemctl restart rke2-server.service
4.2.13 Certifique-se de que um limite esteja definido para os PIDs dos pods (Manual)
Resultado: AVISO
Remediação: Edite o arquivo de configuração do RKE2 /etc/rancher/rke2/config.yaml, defina o seguinte parâmetro para um valor apropriado.
kubelet-arg: - "pod-max-pids=<value>"
Com base no seu sistema, reinicie o serviço RKE2. Por exemplo, systemctl restart rke2-server.service
4.2.14 Certifique-se de que o parâmetro --seccomp-default esteja definido como verdadeiro (Manual)
Resultado: AVISO
Remediação:
Se habilitado, o kubelet usará o arquivo de controle seccomp RuntimeDefault por padrão, que é definido pelo tempo de execução do contêiner, em vez de usar o modo Unconfined (seccomp desabilitado) (padrão).
Se estiver usando um arquivo de configuração do RKE2 /etc/rancher/rke2/config.yaml, edite o arquivo para definir seccomp-default para kubelet-arg:
-
"seccomp-default=true"
4.3 kube-proxy
4.3.1 Certifique-se de que o serviço de métricas do kube-proxy esteja vinculado ao host local (Automatizado)
Resultado: PASS
Auditoria
/bin/sh -c 'if test -e /etc/kubernetes/addons/kube-proxy-daemonset.yaml; then cat /etc/kubernetes/addons/kube-proxy-daemonset.yaml; fi'
Resultado Esperado: '--metrics-bind-address' está presente OU '--metrics-bind-address' não está presente
Valor retornado:
UID PID PPID C STIME TTY TIME CMD
root 19921 19868 0 16:17 ? 00:00:00 kube-proxy --cluster-cidr=10.42.0.0/16 --conntrack-max-per-core=0 --conntrack-tcp-timeout-close-wait=0s --conntrack-tcp-timeout-established=0s --healthz-bind-address=127.0.0.1 --hostname-override=server-0 --kubeconfig=/var/lib/rancher/rke2/agent/kubeproxy.kubeconfig --proxy-mode=iptables
Remediação:
Modifique ou remova quaisquer valores que vinculem o serviço de métricas a um endereço que não seja host local. O valor padrão é 127.0.0.1:10249.
5 Políticas do Kubernetes
5.1 RBAC e Contas de Serviço
5.1.1 Certifique-se de que o papel de cluster-admin seja usado apenas onde necessário (Manual)
Resultado: PASS
Auditoria
kubectl get clusterrolebindings -o=custom-columns=ROLE:.roleRef.name,NAME:.metadata.name,SUBJECT:.subjects[*].name --no-headers | grep cluster-admin
Resultado Esperado: 'cluster-admin' corresponde à expressão regex 'cluster-admin |
helm-kube-system-rke2-.*' |
Valor retornado:
cluster-admin cluster-admin system:masters
cluster-admin helm-kube-system-rke2-canal helm-rke2-canal
cluster-admin helm-kube-system-rke2-coredns helm-rke2-coredns
cluster-admin helm-kube-system-rke2-ingress-nginx helm-rke2-ingress-nginx
cluster-admin helm-kube-system-rke2-metrics-server helm-rke2-metrics-server
cluster-admin helm-kube-system-rke2-runtimeclasses helm-rke2-runtimeclasses
cluster-admin helm-kube-system-rke2-snapshot-controller helm-rke2-snapshot-controller
cluster-admin helm-kube-system-rke2-snapshot-controller-crd helm-rke2-snapshot-controller-crd
Remediação:
Identifique todos os clusterrolebindings para o papel de cluster-admin. Verifique se estão sendo usados e se precisam desse papel ou se podem usar um papel com menos privilégios. O RKE2 dá exceções aos clusterrolebindings helm-kube-system-rke2-* que gerenciam a instalação de todos os componentes gerenciados pelo rke2. Sempre que possível, primeiro vincule os usuários a um papel de menor privilégio e depois remova o clusterrolebinding para o papel de cluster-admin:
kubectl delete clusterrolebinding [name]
5.1.2 Minimize o acesso a segredos (Manual)
Resultado: AVISO
Remediação: Sempre que possível, remova o acesso de obter, listar e observar objetos Secret no cluster.
5.1.3 Minimize o uso de curingas em Roles e ClusterRoles (Manual)
Resultado: PASS
Auditoria
# Check Roles
kubectl get roles --all-namespaces -o custom-columns=ROLE_NAMESPACE:.metadata.namespace,ROLE_NAME:.metadata.name --no-headers | while read -r role_namespace role_name
do
role_rules=$(kubectl get role -n "${role_namespace}" "${role_name}" -o=json | jq -c '.rules')
if echo "${role_rules}" | grep -q "\[\"\*\"\]"; then
printf "**role_name: %-50s role_namespace: %-25s role_rules: %s is_compliant: false\n" "${role_name}" "${role_namespace}" "${role_rules}"
else
printf "**role_name: %-50s role_namespace: %-25s is_compliant: true\n" "${role_name}" "${role_namespace}"
fi;
done
cr_whitelist="cluster-admin rke2-cloud-controller-manager local-path-provisioner-role"
cr_whitelist="$cr_whitelist system:kube-controller-manager system:kubelet-api-admin system:controller:namespace-controller"
cr_whitelist="$cr_whitelist system:controller:disruption-controller system:controller:generic-garbage-collector"
cr_whitelist="$cr_whitelist system:controller:horizontal-pod-autoscaler system:controller:resourcequota-controller"
# Check ClusterRoles
kubectl get clusterroles -o custom-columns=CLUSTERROLE_NAME:.metadata.name --no-headers | while read -r clusterrole_name
do
clusterrole_rules=$(kubectl get clusterrole "${clusterrole_name}" -o=json | jq -c '.rules')
if echo "${cr_whitelist}" | grep -q "${clusterrole_name}"; then
printf "**clusterrole_name: %-50s is_whitelist: true is_compliant: true\n" "${clusterrole_name}"
elif echo "${clusterrole_rules}" | grep -q "\[\"\*\"\]"; then
echo "**clusterrole_name: ${clusterrole_name} clusterrole_rules: ${clusterrole_rules} is_compliant: false"
else
printf "**clusterrole_name: %-50s is_whitelist: false is_compliant: true\n" "${clusterrole_name}"
fi;
done
Resultado Esperado: 'is_compliant' é igual a 'true'
Valor retornado:
**role_name: system:controller:bootstrap-signer role_namespace: kube-public is_compliant: true
**role_name: extension-apiserver-authentication-reader role_namespace: kube-system is_compliant: true
**role_name: rke2-ingress-nginx role_namespace: kube-system is_compliant: true
**role_name: rke2-snapshot-controller role_namespace: kube-system is_compliant: true
**role_name: system::leader-locking-kube-controller-manager role_namespace: kube-system is_compliant: true
**role_name: system::leader-locking-kube-scheduler role_namespace: kube-system is_compliant: true
**role_name: system:controller:bootstrap-signer role_namespace: kube-system is_compliant: true
**role_name: system:controller:cloud-provider role_namespace: kube-system is_compliant: true
**role_name: system:controller:token-cleaner role_namespace: kube-system is_compliant: true
**clusterrole_name: admin is_whitelist: true is_compliant: true
**clusterrole_name: calico-node is_whitelist: false is_compliant: true
**clusterrole_name: cluster-admin is_whitelist: true is_compliant: true
**clusterrole_name: edit is_whitelist: false is_compliant: true
**clusterrole_name: flannel is_whitelist: false is_compliant: true
**clusterrole_name: rke2-cloud-controller-manager is_whitelist: true is_compliant: true
**clusterrole_name: rke2-coredns-rke2-coredns is_whitelist: false is_compliant: true
**clusterrole_name: rke2-coredns-rke2-coredns-autoscaler is_whitelist: false is_compliant: true
**clusterrole_name: rke2-ingress-nginx is_whitelist: false is_compliant: true
**clusterrole_name: rke2-snapshot-controller is_whitelist: false is_compliant: true
**clusterrole_name: system:aggregate-to-admin is_whitelist: false is_compliant: true
**clusterrole_name: system:aggregate-to-edit is_whitelist: false is_compliant: true
**clusterrole_name: system:aggregate-to-view is_whitelist: false is_compliant: true
**clusterrole_name: system:auth-delegator is_whitelist: false is_compliant: true
**clusterrole_name: system:basic-user is_whitelist: false is_compliant: true
**clusterrole_name: system:certificates.k8s.io:certificatesigningrequests:nodeclient is_whitelist: false is_compliant: true
**clusterrole_name: system:certificates.k8s.io:certificatesigningrequests:selfnodeclient is_whitelist: false is_compliant: true
**clusterrole_name: system:certificates.k8s.io:kube-apiserver-client-approver is_whitelist: false is_compliant: true
**clusterrole_name: system:certificates.k8s.io:kube-apiserver-client-kubelet-approver is_whitelist: false is_compliant: true
**clusterrole_name: system:certificates.k8s.io:kubelet-serving-approver is_whitelist: false is_compliant: true
**clusterrole_name: system:certificates.k8s.io:legacy-unknown-approver is_whitelist: false is_compliant: true
**clusterrole_name: system:controller:attachdetach-controller is_whitelist: false is_compliant: true
**clusterrole_name: system:controller:certificate-controller is_whitelist: false is_compliant: true
**clusterrole_name: system:controller:clusterrole-aggregation-controller is_whitelist: false is_compliant: true
**clusterrole_name: system:controller:cronjob-controller is_whitelist: false is_compliant: true
**clusterrole_name: system:controller:daemon-set-controller is_whitelist: false is_compliant: true
**clusterrole_name: system:controller:deployment-controller is_whitelist: false is_compliant: true
**clusterrole_name: system:controller:disruption-controller is_whitelist: true is_compliant: true
**clusterrole_name: system:controller:endpoint-controller is_whitelist: false is_compliant: true
**clusterrole_name: system:controller:endpointslice-controller is_whitelist: false is_compliant: true
**clusterrole_name: system:controller:endpointslicemirroring-controller is_whitelist: false is_compliant: true
**clusterrole_name: system:controller:ephemeral-volume-controller is_whitelist: false is_compliant: true
**clusterrole_name: system:controller:expand-controller is_whitelist: false is_compliant: true
**clusterrole_name: system:controller:generic-garbage-collector is_whitelist: true is_compliant: true
**clusterrole_name: system:controller:horizontal-pod-autoscaler is_whitelist: true is_compliant: true
**clusterrole_name: system:controller:job-controller is_whitelist: false is_compliant: true
**clusterrole_name: system:controller:legacy-service-account-token-cleaner is_whitelist: false is_compliant: true
**clusterrole_name: system:controller:namespace-controller is_whitelist: true is_compliant: true
**clusterrole_name: system:controller:node-controller is_whitelist: false is_compliant: true
**clusterrole_name: system:controller:persistent-volume-binder is_whitelist: false is_compliant: true
**clusterrole_name: system:controller:pod-garbage-collector is_whitelist: false is_compliant: true
**clusterrole_name: system:controller:pv-protection-controller is_whitelist: false is_compliant: true
**clusterrole_name: system:controller:pvc-protection-controller is_whitelist: false is_compliant: true
**clusterrole_name: system:controller:replicaset-controller is_whitelist: false is_compliant: true
**clusterrole_name: system:controller:replication-controller is_whitelist: false is_compliant: true
**clusterrole_name: system:controller:resourcequota-controller is_whitelist: true is_compliant: true
**clusterrole_name: system:controller:root-ca-cert-publisher is_whitelist: false is_compliant: true
**clusterrole_name: system:controller:route-controller is_whitelist: false is_compliant: true
**clusterrole_name: system:controller:service-account-controller is_whitelist: false is_compliant: true
**clusterrole_name: system:controller:service-controller is_whitelist: false is_compliant: true
**clusterrole_name: system:controller:statefulset-controller is_whitelist: false is_compliant: true
**clusterrole_name: system:controller:ttl-after-finished-controller is_whitelist: false is_compliant: true
**clusterrole_name: system:controller:ttl-controller is_whitelist: false is_compliant: true
**clusterrole_name: system:controller:validatingadmissionpolicy-status-controller is_whitelist: false is_compliant: true
**clusterrole_name: system:discovery is_whitelist: false is_compliant: true
**clusterrole_name: system:heapster is_whitelist: false is_compliant: true
**clusterrole_name: system:kube-aggregator is_whitelist: false is_compliant: true
**clusterrole_name: system:kube-controller-manager is_whitelist: true is_compliant: true
**clusterrole_name: system:kube-dns is_whitelist: false is_compliant: true
**clusterrole_name: system:kube-proxy is_whitelist: false is_compliant: true
**clusterrole_name: system:kube-scheduler is_whitelist: false is_compliant: true
**clusterrole_name: system:kubelet-api-admin is_whitelist: true is_compliant: true
**clusterrole_name: system:monitoring is_whitelist: false is_compliant: true
**clusterrole_name: system:node is_whitelist: false is_compliant: true
**clusterrole_name: system:node-bootstrapper is_whitelist: false is_compliant: true
**clusterrole_name: system:node-problem-detector is_whitelist: false is_compliant: true
**clusterrole_name: system:node-proxier is_whitelist: false is_compliant: true
**clusterrole_name: system:persistent-volume-provisioner is_whitelist: false is_compliant: true
**clusterrole_name: system:public-info-viewer is_whitelist: false is_compliant: true
**clusterrole_name: system:rke2-controller is_whitelist: false is_compliant: true
**clusterrole_name: system:rke2-metrics-server is_whitelist: false is_compliant: true
**clusterrole_name: system:rke2-metrics-server-aggregated-reader is_whitelist: false is_compliant: true
**clusterrole_name: system:service-account-issuer-discovery is_whitelist: false is_compliant: true
**clusterrole_name: system:volume-scheduler is_whitelist: false is_compliant: true
**clusterrole_name: view is_whitelist: false is_compliant: true
Remediação:
Sempre que possível, substitua qualquer uso de curingas em clusterroles e roles por objetos ou ações específicas. O RKE2 dá exceções para as seguintes funções de cluster, que são necessárias para operações regulares:
-
rke2-cloud-controller-manager, local-path-provisioner-role, cluster-admin
-
system:kube-controller-manager, system:kubelet-api-admin, system:controller:namespace-controller,
-
system:controller:disruption-controller, system:controller:generic-garbage-collector,
-
system:controller:horizontal-pod-autoscaler, system:controller:resourcequota-controller
Minimize o acesso à criação de pods (Manual)
Resultado: PASS
Auditoria
echo "canCreatePodsAsSystemAuthenticated: $(kubectl auth can-i create pods --all-namespaces --as=system:authenticated)"
Resultado Esperado: 'canCreatePodsAsSystemAuthenticated' é igual a 'não'
Valor Retornado:
canCreatePodsAsSystemAuthenticated: no
Remediação:
Sempre que possível, remova o acesso de criação a objetos pod no cluster.
5.1.5 Garanta que as contas de serviço padrão não estejam sendo usadas ativamente. (Manual)
Resultado: PASS
Auditoria
kubectl get serviceaccounts --all-namespaces --field-selector metadata.name=default \
-o custom-columns=N:.metadata.namespace,SA:.metadata.name,ASA:.automountServiceAccountToken --no-headers \
| while read -r namespace serviceaccount automountserviceaccounttoken
do
if [ "${automountserviceaccounttoken}" = "<none>" ]; then
automountserviceaccounttoken="notset"
fi
if [ "${namespace}" != "kube-system" ] && [ "${automountserviceaccounttoken}" != "false" ]; then
printf "**namespace: %-20s service_account: %-10s automountServiceAccountToken: %-6s is_compliant: false\n" "${namespace}" "${serviceaccount}" "${automountserviceaccounttoken}"
else
printf "**namespace: %-20s service_account: %-10s automountServiceAccountToken: %-6s is_compliant: true\n" "${namespace}" "${serviceaccount}" "${automountserviceaccounttoken}"
fi
done
Resultado Esperado: 'is_compliant' é igual a 'true'
Valor retornado:
**namespace: default service_account: default automountServiceAccountToken: false is_compliant: true
**namespace: kube-node-lease service_account: default automountServiceAccountToken: false is_compliant: true
**namespace: kube-public service_account: default automountServiceAccountToken: false is_compliant: true
**namespace: kube-system service_account: default automountServiceAccountToken: false is_compliant: true
Remediação:
Crie contas de serviço explícitas sempre que uma carga de trabalho do Kubernetes exigir acesso específico ao servidor da API do Kubernetes. Modifique a configuração de cada conta de serviço padrão para incluir este valor automountServiceAccountToken: false Ou usando kubectl:
kubectl patch serviceaccount --namespace <NAMESPACE>lt;NAMESPACE<NAMESPACE>gt; default --patch '{"automountServiceAccountToken": false}'
5.1.6 Certifique-se de que os Tokens de Conta de Serviço sejam montados apenas onde necessário (Manual)
Resultado: PASS
Auditoria
kubectl get pods --all-namespaces -o custom-columns=POD_NAMESPACE:.metadata.namespace,POD_NAME:.metadata.name,POD_SERVICE_ACCOUNT:.spec.serviceAccount,POD_IS_AUTOMOUNTSERVICEACCOUNTTOKEN:.spec.automountServiceAccountToken --no-headers | while read -r pod_namespace pod_name pod_service_account pod_is_automountserviceaccounttoken
do
# Skip pods with no service account
if [ "${pod_service_account}" = "<none>" ]; then
continue
fi
# Retrieve automountServiceAccountToken's value for ServiceAccount and Pod, set to notset if null or <none>.
svacc_is_automountserviceaccounttoken=$(kubectl get serviceaccount -n "${pod_namespace}" "${pod_service_account}" -o json | jq -r '.automountServiceAccountToken' | sed -e 's/<none>/notset/g' -e 's/null/notset/g')
pod_is_automountserviceaccounttoken=$(echo "${pod_is_automountserviceaccounttoken}" | sed -e 's/<none>/notset/g' -e 's/null/notset/g')
if [ "${svacc_is_automountserviceaccounttoken}" = "false" ] && ( [ "${pod_is_automountserviceaccounttoken}" = "false" ] || [ "${pod_is_automountserviceaccounttoken}" = "notset" ] ); then
is_compliant="true"
elif [ "${svacc_is_automountserviceaccounttoken}" = "true" ] && [ "${pod_is_automountserviceaccounttoken}" = "false" ]; then
is_compliant="true"
else
is_compliant="false"
fi
# Whitelist kube-system namespace as these pods are expected to contact the apiserver
if [ "${pod_namespace}" = "kube-system" ]; then
is_compliant="true"
fi
echo "**namespace: ${pod_namespace} pod_name: ${pod_name} service_account: ${pod_service_account} pod_is_automountserviceaccounttoken: ${pod_is_automountserviceaccounttoken} svacc_is_automountServiceAccountToken: ${svacc_is_automountserviceaccounttoken} is_compliant: ${is_compliant}"
done
Resultado Esperado: 'is_compliant' é igual a 'true'
Valor retornado:
**namespace: kube-system pod_name: helm-install-rke2-canal-789dp service_account: helm-rke2-canal pod_is_automountserviceaccounttoken: notset svacc_is_automountServiceAccountToken: true is_compliant: true
**namespace: kube-system pod_name: helm-install-rke2-coredns-c8whl service_account: helm-rke2-coredns pod_is_automountserviceaccounttoken: notset svacc_is_automountServiceAccountToken: true is_compliant: true
**namespace: kube-system pod_name: helm-install-rke2-ingress-nginx-gqtvn service_account: helm-rke2-ingress-nginx pod_is_automountserviceaccounttoken: notset svacc_is_automountServiceAccountToken: true is_compliant: true
**namespace: kube-system pod_name: helm-install-rke2-metrics-server-7jckf service_account: helm-rke2-metrics-server pod_is_automountserviceaccounttoken: notset svacc_is_automountServiceAccountToken: true is_compliant: true
**namespace: kube-system pod_name: helm-install-rke2-runtimeclasses-2zdbw service_account: helm-rke2-runtimeclasses pod_is_automountserviceaccounttoken: notset svacc_is_automountServiceAccountToken: true is_compliant: true
**namespace: kube-system pod_name: helm-install-rke2-snapshot-controller-crd-9njtl service_account: helm-rke2-snapshot-controller-crd pod_is_automountserviceaccounttoken: notset svacc_is_automountServiceAccountToken: true is_compliant: true
**namespace: kube-system pod_name: helm-install-rke2-snapshot-controller-rm764 service_account: helm-rke2-snapshot-controller pod_is_automountserviceaccounttoken: notset svacc_is_automountServiceAccountToken: true is_compliant: true
**namespace: kube-system pod_name: rke2-canal-bqn2x service_account: canal pod_is_automountserviceaccounttoken: notset svacc_is_automountServiceAccountToken: notset is_compliant: true
**namespace: kube-system pod_name: rke2-coredns-rke2-coredns-6464f98784-7mc2x service_account: coredns pod_is_automountserviceaccounttoken: notset svacc_is_automountServiceAccountToken: notset is_compliant: true
**namespace: kube-system pod_name: rke2-coredns-rke2-coredns-autoscaler-67bb49dff-lks69 service_account: rke2-coredns-rke2-coredns-autoscaler pod_is_automountserviceaccounttoken: notset svacc_is_automountServiceAccountToken: notset is_compliant: true
**namespace: kube-system pod_name: rke2-ingress-nginx-controller-2pjn6 service_account: rke2-ingress-nginx pod_is_automountserviceaccounttoken: notset svacc_is_automountServiceAccountToken: true is_compliant: true
**namespace: kube-system pod_name: rke2-metrics-server-75d485c65b-djgst service_account: rke2-metrics-server pod_is_automountserviceaccounttoken: notset svacc_is_automountServiceAccountToken: notset is_compliant: true
**namespace: kube-system pod_name: rke2-snapshot-controller-696989ffdd-ctddn service_account: rke2-snapshot-controller pod_is_automountserviceaccounttoken: notset svacc_is_automountServiceAccountToken: notset is_compliant: true
Remediação:
Modifique a definição de ServiceAccounts e Pods que não precisam montar tokens de conta de serviço para desativá-los, com automountServiceAccountToken: false.
O RKE2 dá exceções às ServiceAccounts no namespace kube-system, pois estas são esperadas para contatar o apiserver.
Quando em modo cis, o RKE2 desabilita o automountServiceAccountToken para namespaces:
-
kube-public, default, kube-node-lease. Se tanto a ServiceAccount quanto o .spec do Pod especificarem um valor para automountServiceAccountToken, o spec do Pod tem precedência. Condição: O Pod está em conformidade quando for true
-
A ServiceAccount tem automountServiceAccountToken: false e o Pod tem automountServiceAccountToken: false ou não definido
-
A ServiceAccount tem automountServiceAccountToken: true/não definido e o Pod tem automountServiceAccountToken: false
-
5.1.7 Evite o uso do grupo system:masters (Manual)
Resultado: AVISO
Remediação: Remova o grupo system:masters de todos os usuários no cluster.
5.1.8 Limite o uso das permissões Bind, Impersonate e Escalate no cluster Kubernetes (Manual)
Resultado: AVISO
Remediação: Sempre que possível, remova os direitos de impersonate, bind e escalate dos sujeitos.
5.1.9 Minimize o acesso para criar volumes persistentes (Manual)
Resultado: AVISO
Remediação: Sempre que possível, remova o acesso de criação a objetos PersistentVolume no cluster.
5.1.10 Minimize o acesso ao sub-recurso proxy de nós (Manual)
Resultado: AVISO
Remediação: Sempre que possível, remova o acesso ao sub-recurso proxy de objetos de nó.
5.1.11 Minimize o acesso ao sub-recurso de aprovação de objetos certificatesigningrequests (Manual)
Resultado: AVISO
Remediação: Sempre que possível, remova o acesso ao sub-recurso de aprovação de objetos de certificatesigningrequests.
5.2 Padrões de Segurança de Pod
5.2.1 Assegure-se de que o cluster tenha pelo menos um mecanismo de controle de política ativo (Manual)
Resultado: AVISO
Remediação: Assegure-se de que o Pod Security Admission ou um sistema de controle de política externo esteja em vigor para cada namespace que contém cargas de trabalho de usuários.
5.2.2 Minimizar a admissão de contêineres privilegiados (Manual)
Resultado: PASS
Auditoria
whitelist="kube-flannel calico-node kube-proxy"
kubectl get pods --all-namespaces -o custom-columns=POD_NAME:.metadata.name,POD_NAMESPACE:.metadata.namespace --no-headers | while read -r pod_name pod_namespace
do
# Retrieve container(s) for each Pod.
kubectl get pod "${pod_name}" --namespace "${pod_namespace}" -o json | jq -c '.spec.containers[]' | while read -r container
do
# Retrieve container's name.
container_name=$(echo ${container} | jq -r '.name')
# Retrieve container's .securityContext.privileged value.
container_privileged=$(echo ${container} | jq -r '.securityContext.privileged' | sed -e 's/null/notset/g')
# Check if container name is in whitelist.
if echo "${whitelist}" | grep -q "${container_name}"; then
echo "***pod_name: ${pod_name} container_name: ${container_name} pod_namespace: ${pod_namespace} is_container_privileged: ${container_privileged} is_whitelist: true is_compliant: true"
elif [ "${container_privileged}" = "false" ] || [ "${container_privileged}" = "notset" ] ; then
echo "***pod_name: ${pod_name} container_name: ${container_name} pod_namespace: ${pod_namespace} is_container_privileged: ${container_privileged} is_compliant: true"
else
echo "***pod_name: ${pod_name} container_name: ${container_name} pod_namespace: ${pod_namespace} is_container_privileged: ${container_privileged} is_compliant: false"
fi
done
done
Resultado Esperado: 'is_compliant' é igual a 'true'
Valor retornado:
***pod_name: cloud-controller-manager-server-0 container_name: cloud-controller-manager pod_namespace: kube-system is_container_privileged: false is_compliant: true
***pod_name: etcd-server-0 container_name: etcd pod_namespace: kube-system is_container_privileged: false is_compliant: true
***pod_name: helm-install-rke2-canal-789dp container_name: helm pod_namespace: kube-system is_container_privileged: notset is_compliant: true
***pod_name: helm-install-rke2-coredns-c8whl container_name: helm pod_namespace: kube-system is_container_privileged: notset is_compliant: true
***pod_name: helm-install-rke2-ingress-nginx-gqtvn container_name: helm pod_namespace: kube-system is_container_privileged: notset is_compliant: true
***pod_name: helm-install-rke2-metrics-server-7jckf container_name: helm pod_namespace: kube-system is_container_privileged: notset is_compliant: true
***pod_name: helm-install-rke2-runtimeclasses-2zdbw container_name: helm pod_namespace: kube-system is_container_privileged: notset is_compliant: true
***pod_name: helm-install-rke2-snapshot-controller-crd-9njtl container_name: helm pod_namespace: kube-system is_container_privileged: notset is_compliant: true
***pod_name: helm-install-rke2-snapshot-controller-rm764 container_name: helm pod_namespace: kube-system is_container_privileged: notset is_compliant: true
***pod_name: kube-apiserver-server-0 container_name: kube-apiserver pod_namespace: kube-system is_container_privileged: false is_compliant: true
***pod_name: kube-controller-manager-server-0 container_name: kube-controller-manager pod_namespace: kube-system is_container_privileged: false is_compliant: true
***pod_name: kube-proxy-server-0 container_name: kube-proxy pod_namespace: kube-system is_container_privileged: true is_whitelist: true is_compliant: true
***pod_name: kube-scheduler-server-0 container_name: kube-scheduler pod_namespace: kube-system is_container_privileged: false is_compliant: true
***pod_name: rke2-canal-bqn2x container_name: calico-node pod_namespace: kube-system is_container_privileged: true is_whitelist: true is_compliant: true
***pod_name: rke2-canal-bqn2x container_name: kube-flannel pod_namespace: kube-system is_container_privileged: true is_whitelist: true is_compliant: true
***pod_name: rke2-coredns-rke2-coredns-6464f98784-7mc2x container_name: coredns pod_namespace: kube-system is_container_privileged: notset is_compliant: true
***pod_name: rke2-coredns-rke2-coredns-autoscaler-67bb49dff-lks69 container_name: autoscaler pod_namespace: kube-system is_container_privileged: notset is_compliant: true
***pod_name: rke2-ingress-nginx-controller-2pjn6 container_name: rke2-ingress-nginx-controller pod_namespace: kube-system is_container_privileged: notset is_compliant: true
***pod_name: rke2-metrics-server-75d485c65b-djgst container_name: metrics-server pod_namespace: kube-system is_container_privileged: notset is_compliant: true
***pod_name: rke2-snapshot-controller-696989ffdd-ctddn container_name: rke2-snapshot-controller pod_namespace: kube-system is_container_privileged: notset is_compliant: true
Remediação:
Adicione políticas a cada namespace no cluster que tenha cargas de trabalho de usuários para restringir a admissão de contêineres privilegiados. RKE2 dá exceções aos seguintes pods, que são necessários para operações regulares:
-
kube-flannel, calico-node, kube-proxy Auditoria: a auditoria lista todos os contêineres dos pods para recuperar o valor .securityContext.privileged. Condição: is_compliant é falso se
.securityContext.privilegeddo contêiner estiver definido comotrue. Padrão: por padrão, não há restrições na criação de contêineres privilegiados.
5.2.3 Minimize a admissão de contêineres que desejam compartilhar o namespace de ID do processo do host (Manual)
Resultado: PASS
Auditoria
kubectl get pods --all-namespaces -o custom-columns=POD_NAME:.metadata.name,POD_NAMESPACE:.metadata.namespace --no-headers | while read -r pod_name pod_namespace
do
# Retrieve spec.hostPID for each pod.
pod_hostpid=$(kubectl get pod "${pod_name}" --namespace "${pod_namespace}" -o jsonpath='{.spec.hostPID}' 2>/dev/null)
if [ -z "${pod_hostpid}" ]; then
pod_hostpid="false"
echo "***pod_name: ${pod_name} pod_namespace: ${pod_namespace} is_pod_hostpid: ${pod_hostpid} is_compliant: true"
else
echo "***pod_name: ${pod_name} pod_namespace: ${pod_namespace} is_pod_hostpid: ${pod_hostpid} is_compliant: false"
fi
done
Resultado Esperado: 'is_compliant' é igual a 'true'
Valor retornado:
***pod_name: cloud-controller-manager-server-0 pod_namespace: kube-system is_pod_hostpid: false is_compliant: true
***pod_name: etcd-server-0 pod_namespace: kube-system is_pod_hostpid: false is_compliant: true
***pod_name: helm-install-rke2-canal-789dp pod_namespace: kube-system is_pod_hostpid: false is_compliant: true
***pod_name: helm-install-rke2-coredns-c8whl pod_namespace: kube-system is_pod_hostpid: false is_compliant: true
***pod_name: helm-install-rke2-ingress-nginx-gqtvn pod_namespace: kube-system is_pod_hostpid: false is_compliant: true
***pod_name: helm-install-rke2-metrics-server-7jckf pod_namespace: kube-system is_pod_hostpid: false is_compliant: true
***pod_name: helm-install-rke2-runtimeclasses-2zdbw pod_namespace: kube-system is_pod_hostpid: false is_compliant: true
***pod_name: helm-install-rke2-snapshot-controller-crd-9njtl pod_namespace: kube-system is_pod_hostpid: false is_compliant: true
***pod_name: helm-install-rke2-snapshot-controller-rm764 pod_namespace: kube-system is_pod_hostpid: false is_compliant: true
***pod_name: kube-apiserver-server-0 pod_namespace: kube-system is_pod_hostpid: false is_compliant: true
***pod_name: kube-controller-manager-server-0 pod_namespace: kube-system is_pod_hostpid: false is_compliant: true
***pod_name: kube-proxy-server-0 pod_namespace: kube-system is_pod_hostpid: false is_compliant: true
***pod_name: kube-scheduler-server-0 pod_namespace: kube-system is_pod_hostpid: false is_compliant: true
***pod_name: rke2-canal-bqn2x pod_namespace: kube-system is_pod_hostpid: false is_compliant: true
***pod_name: rke2-coredns-rke2-coredns-6464f98784-7mc2x pod_namespace: kube-system is_pod_hostpid: false is_compliant: true
***pod_name: rke2-coredns-rke2-coredns-autoscaler-67bb49dff-lks69 pod_namespace: kube-system is_pod_hostpid: false is_compliant: true
***pod_name: rke2-ingress-nginx-controller-2pjn6 pod_namespace: kube-system is_pod_hostpid: false is_compliant: true
***pod_name: rke2-metrics-server-75d485c65b-djgst pod_namespace: kube-system is_pod_hostpid: false is_compliant: true
***pod_name: rke2-snapshot-controller-696989ffdd-ctddn pod_namespace: kube-system is_pod_hostpid: false is_compliant: true
Remediação:
Adicione políticas a cada namespace no cluster que possui cargas de trabalho de usuários para restringir a admissão de contêineres hostPID.
Auditoria: a auditoria recupera o spec.hostPID de cada Pod.
Condição: is_compliant é falso se o spec.hostPID do Pod estiver definido como true.
Padrão: por padrão, não há restrições na criação de contêineres hostPID.
5.2.4 Minimize a admissão de contêineres que desejam compartilhar o namespace IPC do host (Manual)
Resultado: PASS
Auditoria
kubectl get pods --all-namespaces -o custom-columns=POD_NAME:.metadata.name,POD_NAMESPACE:.metadata.namespace --no-headers | while read -r pod_name pod_namespace
do
# Retrieve spec.hostIPC for each pod.
pod_hostipc=$(kubectl get pod "${pod_name}" --namespace "${pod_namespace}" -o jsonpath='{.spec.hostIPC}' 2>/dev/null)
if [ -z "${pod_hostipc}" ]; then
pod_hostipc="false"
echo "***pod_name: ${pod_name} pod_namespace: ${pod_namespace} is_pod_hostipc: ${pod_hostipc} is_compliant: true"
else
echo "***pod_name: ${pod_name} pod_namespace: ${pod_namespace} is_pod_hostipc: ${pod_hostipc} is_compliant: false"
fi
done
Resultado Esperado: 'is_compliant' é igual a 'true'
Valor retornado:
***pod_name: cloud-controller-manager-server-0 pod_namespace: kube-system is_pod_hostipc: false is_compliant: true
***pod_name: etcd-server-0 pod_namespace: kube-system is_pod_hostipc: false is_compliant: true
***pod_name: helm-install-rke2-canal-789dp pod_namespace: kube-system is_pod_hostipc: false is_compliant: true
***pod_name: helm-install-rke2-coredns-c8whl pod_namespace: kube-system is_pod_hostipc: false is_compliant: true
***pod_name: helm-install-rke2-ingress-nginx-gqtvn pod_namespace: kube-system is_pod_hostipc: false is_compliant: true
***pod_name: helm-install-rke2-metrics-server-7jckf pod_namespace: kube-system is_pod_hostipc: false is_compliant: true
***pod_name: helm-install-rke2-runtimeclasses-2zdbw pod_namespace: kube-system is_pod_hostipc: false is_compliant: true
***pod_name: helm-install-rke2-snapshot-controller-crd-9njtl pod_namespace: kube-system is_pod_hostipc: false is_compliant: true
***pod_name: helm-install-rke2-snapshot-controller-rm764 pod_namespace: kube-system is_pod_hostipc: false is_compliant: true
***pod_name: kube-apiserver-server-0 pod_namespace: kube-system is_pod_hostipc: false is_compliant: true
***pod_name: kube-controller-manager-server-0 pod_namespace: kube-system is_pod_hostipc: false is_compliant: true
***pod_name: kube-proxy-server-0 pod_namespace: kube-system is_pod_hostipc: false is_compliant: true
***pod_name: kube-scheduler-server-0 pod_namespace: kube-system is_pod_hostipc: false is_compliant: true
***pod_name: rke2-canal-bqn2x pod_namespace: kube-system is_pod_hostipc: false is_compliant: true
***pod_name: rke2-coredns-rke2-coredns-6464f98784-7mc2x pod_namespace: kube-system is_pod_hostipc: false is_compliant: true
***pod_name: rke2-coredns-rke2-coredns-autoscaler-67bb49dff-lks69 pod_namespace: kube-system is_pod_hostipc: false is_compliant: true
***pod_name: rke2-ingress-nginx-controller-2pjn6 pod_namespace: kube-system is_pod_hostipc: false is_compliant: true
***pod_name: rke2-metrics-server-75d485c65b-djgst pod_namespace: kube-system is_pod_hostipc: false is_compliant: true
***pod_name: rke2-snapshot-controller-696989ffdd-ctddn pod_namespace: kube-system is_pod_hostipc: false is_compliant: true
Remediação:
Adicione políticas a cada namespace no cluster que possui cargas de trabalho de usuários para restringir a admissão de contêineres hostIPC.
Auditoria: a auditoria recupera o spec.IPC de cada Pod.
Condição: is_compliant é falso se o spec.hostIPC do Pod estiver definido como true.
Padrão: por padrão, não há restrições na criação de contêineres hostIPC.
5.2.5 Minimize a admissão de contêineres que desejam compartilhar o namespace de rede do host (Manual)
Resultado: PASS
Auditoria
whitelist="cloud-controller-manager etcd rke2-canal rke2-coredns kube-apiserver kube-scheduler kube-proxy kube-controller-manager"
is_in_whitelist() {
for entry in $whitelist; do
case "${pod_name}" in
*"${entry}"*)
return 0
;;
esac
done
return 1
}
kubectl get pods --all-namespaces -o custom-columns=POD_NAME:.metadata.name,POD_NAMESPACE:.metadata.namespace --no-headers | while read -r pod_name pod_namespace
do
# Retrieve spec.hostNetwork for each pod.
pod_hostnetwork=$(kubectl get pod "${pod_name}" --namespace "${pod_namespace}" -o jsonpath='{.spec.hostNetwork}' 2>/dev/null)
echo "${whitelist}" | grep -q "${pod_name}"
if [ "${pod_namespace}" = 'kube-system' ] && is_in_whitelist; then
echo "***pod_name: ${pod_name} pod_namespace: ${pod_namespace} is_pod_hostnetwork: ${pod_hostnetwork} is_whitelist: true is_compliant: true"
elif [ -z "${pod_hostnetwork}" ]; then
pod_hostnetwork="false"
echo "***pod_name: ${pod_name} pod_namespace: ${pod_namespace} is_pod_hostnetwork: ${pod_hostnetwork} is_compliant: true"
else
echo "***pod_name: ${pod_name} pod_namespace: ${pod_namespace} is_pod_hostnetwork: ${pod_hostnetwork} is_compliant: false"
fi
done
Resultado Esperado: 'is_compliant' é igual a 'true'
Valor retornado:
***pod_name: cloud-controller-manager-server-0 pod_namespace: kube-system is_pod_hostnetwork: true is_whitelist: true is_compliant: true
***pod_name: etcd-server-0 pod_namespace: kube-system is_pod_hostnetwork: true is_whitelist: true is_compliant: true
***pod_name: helm-install-rke2-canal-789dp pod_namespace: kube-system is_pod_hostnetwork: true is_whitelist: true is_compliant: true
***pod_name: helm-install-rke2-coredns-c8whl pod_namespace: kube-system is_pod_hostnetwork: true is_whitelist: true is_compliant: true
***pod_name: helm-install-rke2-ingress-nginx-gqtvn pod_namespace: kube-system is_pod_hostnetwork: false is_compliant: true
***pod_name: helm-install-rke2-metrics-server-7jckf pod_namespace: kube-system is_pod_hostnetwork: false is_compliant: true
***pod_name: helm-install-rke2-runtimeclasses-2zdbw pod_namespace: kube-system is_pod_hostnetwork: false is_compliant: true
***pod_name: helm-install-rke2-snapshot-controller-crd-9njtl pod_namespace: kube-system is_pod_hostnetwork: false is_compliant: true
***pod_name: helm-install-rke2-snapshot-controller-rm764 pod_namespace: kube-system is_pod_hostnetwork: false is_compliant: true
***pod_name: kube-apiserver-server-0 pod_namespace: kube-system is_pod_hostnetwork: true is_whitelist: true is_compliant: true
***pod_name: kube-controller-manager-server-0 pod_namespace: kube-system is_pod_hostnetwork: true is_whitelist: true is_compliant: true
***pod_name: kube-proxy-server-0 pod_namespace: kube-system is_pod_hostnetwork: true is_whitelist: true is_compliant: true
***pod_name: kube-scheduler-server-0 pod_namespace: kube-system is_pod_hostnetwork: true is_whitelist: true is_compliant: true
***pod_name: rke2-canal-bqn2x pod_namespace: kube-system is_pod_hostnetwork: true is_whitelist: true is_compliant: true
***pod_name: rke2-coredns-rke2-coredns-6464f98784-7mc2x pod_namespace: kube-system is_pod_hostnetwork: is_whitelist: true is_compliant: true
***pod_name: rke2-coredns-rke2-coredns-autoscaler-67bb49dff-lks69 pod_namespace: kube-system is_pod_hostnetwork: is_whitelist: true is_compliant: true
***pod_name: rke2-ingress-nginx-controller-2pjn6 pod_namespace: kube-system is_pod_hostnetwork: false is_compliant: true
***pod_name: rke2-metrics-server-75d485c65b-djgst pod_namespace: kube-system is_pod_hostnetwork: false is_compliant: true
***pod_name: rke2-snapshot-controller-696989ffdd-ctddn pod_namespace: kube-system is_pod_hostnetwork: false is_compliant: true
Remediação:
Adicione políticas a cada namespace no cluster que tenha cargas de trabalho de usuários para restringir a admissão de hostNetwork contêineres.
RKE2 dá exceções aos seguintes pods no namespace kube-system, que são necessários para operações regulares:
-
cloud-controller-manager, etcd, rke2-canal, rke2-coredns, kube-apiserver,
-
kube-scheduler, kube-proxy, kube-controller-manager Auditoria: a auditoria recupera o spec.hostNetwork de cada Pod. Condição: is_compliant é falso se o spec.hostNetwork do Pod estiver definido como
true. Padrão: por padrão, não há restrições na criação de contêineres hostNetwork.
5.2.6 Minimize a admissão de contêineres com allowPrivilegeEscalation (Manual)
Resultado: PASS
Auditoria
kubectl get pods --all-namespaces -o custom-columns=POD_NAME:.metadata.name,POD_NAMESPACE:.metadata.namespace --no-headers | while read -r pod_name pod_namespace
do
# Retrieve container(s) for each Pod.
kubectl get pod "${pod_name}" --namespace "${pod_namespace}" -o json | jq -c '.spec.containers[]' | while read -r container
do
# Retrieve container's name
container_name=$(echo ${container} | jq -r '.name')
# Retrieve container's .securityContext.allowPrivilegeEscalation
container_allowprivesc=$(echo ${container} | jq -r '.securityContext.allowPrivilegeEscalation' | sed -e 's/null/notset/g')
if [ "${container_allowprivesc}" = "false" ] || [ "${container_allowprivesc}" = "notset" ]; then
echo "***pod_name: ${pod_name} container_name: ${container_name} pod_namespace: ${pod_namespace} is_container_allowprivesc: ${container_allowprivesc} is_compliant: true"
else
echo "***pod_name: ${pod_name} container_name: ${container_name} pod_namespace: ${pod_namespace} is_container_allowprivesc: ${container_allowprivesc} is_compliant: false"
fi
done
done
Resultado Esperado: 'is_compliant' é igual a 'true'
Valor retornado:
***pod_name: cloud-controller-manager-server-0 container_name: cloud-controller-manager pod_namespace: kube-system is_container_allowprivesc: notset is_compliant: true
***pod_name: etcd-server-0 container_name: etcd pod_namespace: kube-system is_container_allowprivesc: notset is_compliant: true
***pod_name: helm-install-rke2-canal-789dp container_name: helm pod_namespace: kube-system is_container_allowprivesc: false is_compliant: true
***pod_name: helm-install-rke2-coredns-c8whl container_name: helm pod_namespace: kube-system is_container_allowprivesc: false is_compliant: true
***pod_name: helm-install-rke2-ingress-nginx-gqtvn container_name: helm pod_namespace: kube-system is_container_allowprivesc: false is_compliant: true
***pod_name: helm-install-rke2-metrics-server-7jckf container_name: helm pod_namespace: kube-system is_container_allowprivesc: false is_compliant: true
***pod_name: helm-install-rke2-runtimeclasses-2zdbw container_name: helm pod_namespace: kube-system is_container_allowprivesc: false is_compliant: true
***pod_name: helm-install-rke2-snapshot-controller-crd-9njtl container_name: helm pod_namespace: kube-system is_container_allowprivesc: false is_compliant: true
***pod_name: helm-install-rke2-snapshot-controller-rm764 container_name: helm pod_namespace: kube-system is_container_allowprivesc: false is_compliant: true
***pod_name: kube-apiserver-server-0 container_name: kube-apiserver pod_namespace: kube-system is_container_allowprivesc: notset is_compliant: true
***pod_name: kube-controller-manager-server-0 container_name: kube-controller-manager pod_namespace: kube-system is_container_allowprivesc: notset is_compliant: true
***pod_name: kube-proxy-server-0 container_name: kube-proxy pod_namespace: kube-system is_container_allowprivesc: notset is_compliant: true
***pod_name: kube-scheduler-server-0 container_name: kube-scheduler pod_namespace: kube-system is_container_allowprivesc: notset is_compliant: true
***pod_name: rke2-canal-bqn2x container_name: calico-node pod_namespace: kube-system is_container_allowprivesc: notset is_compliant: true
***pod_name: rke2-canal-bqn2x container_name: kube-flannel pod_namespace: kube-system is_container_allowprivesc: notset is_compliant: true
***pod_name: rke2-coredns-rke2-coredns-6464f98784-7mc2x container_name: coredns pod_namespace: kube-system is_container_allowprivesc: false is_compliant: true
***pod_name: rke2-coredns-rke2-coredns-autoscaler-67bb49dff-lks69 container_name: autoscaler pod_namespace: kube-system is_container_allowprivesc: notset is_compliant: true
***pod_name: rke2-ingress-nginx-controller-2pjn6 container_name: rke2-ingress-nginx-controller pod_namespace: kube-system is_container_allowprivesc: false is_compliant: true
***pod_name: rke2-metrics-server-75d485c65b-djgst container_name: metrics-server pod_namespace: kube-system is_container_allowprivesc: false is_compliant: true
***pod_name: rke2-snapshot-controller-696989ffdd-ctddn container_name: rke2-snapshot-controller pod_namespace: kube-system is_container_allowprivesc: notset is_compliant: true
Remediação:
Adicione políticas a cada namespace no cluster que possui cargas de trabalho de usuário para restringir a admissão de contêineres com .securityContext.allowPrivilegeEscalation definido como true.
Auditoria: a auditoria recupera o(s) contêiner(es) de cada Pod .securityContext.allowPrivilegeEscalation.
Condição: is_compliant é falso se .securityContext.allowPrivilegeEscalation do contêiner estiver definido como true.
Padrão: Se não definido, a elevação de privilégios é permitida (padrão é verdadeiro). No entanto, se PSP/PSA for usado com um arquivo de controle restricted, a elevação de privilégios é explicitamente desautorizada, a menos que configurado de outra forma.
5.2.7 Minimize a admissão de contêineres root (Manual)
Resultado: AVISO
Remediação:
Crie uma política para cada namespace no cluster, garantindo que MustRunAsNonRoot ou MustRunAs com a faixa de UIDs não incluindo 0, esteja definido.
5.2.8 Minimize a admissão de contêineres com a capacidade NET_RAW (Manual)
Resultado: AVISO
Remediação:
Adicione políticas a cada namespace no cluster que possui cargas de trabalho de usuário para restringir a admissão de contêineres com a capacidade NET_RAW.
5.2.9 Minimize a admissão de contêineres com capacidades adicionadas (Manual)
Resultado: PASS
Auditoria
whitelist="rke2-ingress-nginx-controller coredns"
kubectl get pods --all-namespaces -o custom-columns=POD_NAME:.metadata.name,POD_NAMESPACE:.metadata.namespace --no-headers | while read -r pod_name pod_namespace
do
# Retrieve container(s) for each Pod.
kubectl get pod "${pod_name}" --namespace "${pod_namespace}" -o json | jq -c '.spec.containers[]' | while read -r container
do
# Retrieve container's name
container_name=$(echo ${container} | jq -r '.name')
# Retrieve container's added capabilities
container_caps_add=$(echo ${container} | jq -r '.securityContext.capabilities.add' | sed -e 's/null/notset/g')
# Set is_compliant to true by default.
is_compliant=true
is_whitelist=false
caps_list=""
if [ "${container_caps_add}" != "notset" ]; then
# Loop through all caps and append caps_list, then set is_compliant to false.
for cap in $(echo "${container_caps_add}" | jq -r '.[]'); do
caps_list="${caps_list}${cap},"
is_compliant=false
done
# Remove trailing comma for the last list member.
caps_list=${caps_list%,}
fi
# Remove newline from container_caps_add for final output.
container_caps_add=$(echo "${container_caps_add}" | tr -d '\n')
if [ "${pod_namespace}" = "kube-system" ] && echo "${whitelist}" | grep -q "${container_name}"; then
echo "***pod_name: ${pod_name} container_name: ${container_name} pod_namespace: ${pod_namespace} container_caps_add: ${container_caps_add} is_whitelist: true is_compliant: true"
elif [ "${is_compliant}" = true ]; then
echo "***pod_name: ${pod_name} container_name: ${container_name} pod_namespace: ${pod_namespace} container_caps_add: ${container_caps_add} is_compliant: true"
else
echo "***pod_name: ${pod_name} container_name: ${container_name} pod_namespace: ${pod_namespace} container_caps_add: ${caps_list} is_compliant: false"
fi
done
done
Resultado Esperado: 'is_compliant' é igual a 'true'
Valor retornado:
***pod_name: cloud-controller-manager-server-0 container_name: cloud-controller-manager pod_namespace: kube-system container_caps_add: notset is_compliant: true
***pod_name: etcd-server-0 container_name: etcd pod_namespace: kube-system container_caps_add: notset is_compliant: true
***pod_name: helm-install-rke2-canal-789dp container_name: helm pod_namespace: kube-system container_caps_add: notset is_compliant: true
***pod_name: helm-install-rke2-coredns-c8whl container_name: helm pod_namespace: kube-system container_caps_add: notset is_compliant: true
***pod_name: helm-install-rke2-ingress-nginx-gqtvn container_name: helm pod_namespace: kube-system container_caps_add: notset is_compliant: true
***pod_name: helm-install-rke2-metrics-server-7jckf container_name: helm pod_namespace: kube-system container_caps_add: notset is_compliant: true
***pod_name: helm-install-rke2-runtimeclasses-2zdbw container_name: helm pod_namespace: kube-system container_caps_add: notset is_compliant: true
***pod_name: helm-install-rke2-snapshot-controller-crd-9njtl container_name: helm pod_namespace: kube-system container_caps_add: notset is_compliant: true
***pod_name: helm-install-rke2-snapshot-controller-rm764 container_name: helm pod_namespace: kube-system container_caps_add: notset is_compliant: true
***pod_name: kube-apiserver-server-0 container_name: kube-apiserver pod_namespace: kube-system container_caps_add: notset is_compliant: true
***pod_name: kube-controller-manager-server-0 container_name: kube-controller-manager pod_namespace: kube-system container_caps_add: notset is_compliant: true
***pod_name: kube-proxy-server-0 container_name: kube-proxy pod_namespace: kube-system container_caps_add: notset is_compliant: true
***pod_name: kube-scheduler-server-0 container_name: kube-scheduler pod_namespace: kube-system container_caps_add: notset is_compliant: true
***pod_name: rke2-canal-bqn2x container_name: calico-node pod_namespace: kube-system container_caps_add: notset is_compliant: true
***pod_name: rke2-canal-bqn2x container_name: kube-flannel pod_namespace: kube-system container_caps_add: notset is_compliant: true
***pod_name: rke2-coredns-rke2-coredns-6464f98784-7mc2x container_name: coredns pod_namespace: kube-system container_caps_add: [ "NET_BIND_SERVICE"] is_whitelist: true is_compliant: true
***pod_name: rke2-coredns-rke2-coredns-autoscaler-67bb49dff-lks69 container_name: autoscaler pod_namespace: kube-system container_caps_add: notset is_compliant: true
***pod_name: rke2-ingress-nginx-controller-2pjn6 container_name: rke2-ingress-nginx-controller pod_namespace: kube-system container_caps_add: [ "NET_BIND_SERVICE"] is_whitelist: true is_compliant: true
***pod_name: rke2-metrics-server-75d485c65b-djgst container_name: metrics-server pod_namespace: kube-system container_caps_add: notset is_compliant: true
***pod_name: rke2-snapshot-controller-696989ffdd-ctddn container_name: rke2-snapshot-controller pod_namespace: kube-system container_caps_add: notset is_compliant: true
Remediação:
Garanta que allowedCapabilities não esteja presente nas políticas para o cluster, a menos que esteja configurado como um array vazio.
RKE2 dá exceções aos seguintes pods no namespace kube-system, que são necessários para operações regulares:
-
rke2-ingress-ngninx-controller, coredns Auditoria: a auditoria recupera as capacidades adicionadas de cada contêiner dos pods. Condição: is_compliant é falso se forem definidas capacidades adicionais para um determinado contêiner. Padrão: Contêineres são executados com um conjunto padrão de capacidades, conforme atribuído pelo tempo de execução do contêiner.
5.2.10 Minimize a admissão de contêineres com capacidades atribuídas (Manual)
Resultado: AVISO
Remediação: Revise o uso de capacidades em aplicativos em execução no seu cluster. Onde um namespace contém aplicações que não requerem nenhuma capacidade do Linux para operar, considere adicionar um PSP que proíba a admissão de contêineres que não descartem todas as capacidades.
5.2.11 Minimizar a admissão de contêineres Windows HostProcess (Manual)
Resultado: AVISO
Remediação:
Adicione políticas a cada namespace no cluster que possui cargas de trabalho de usuários para restringir a admissão de contêineres que têm .securityContext.windowsOptions.hostProcess configurado como true.
5.3 Políticas de Rede e CNI
5.4 Gerenciamento de Segredos
5.6 Políticas Gerais
5.6.1 Crie limites administrativos entre recursos usando namespaces (Manual)
Resultado: AVISO
Remediação: Siga a documentação e crie namespaces para os objetos em sua implantação conforme necessário.
5.6.2 Certifique-se de que o perfil seccomp esteja definido como docker/default nas definições do seu Pod (Manual)
Resultado: AVISO
Remediação:
Use securityContext para habilitar o arquivo de controle seccomp docker/default em suas definições de Pod.
Um exemplo é o seguinte:
securityContext:
seccompProfile:
type: RuntimeDefault