CIS 1.9 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 benchmark é destinado a ajudá-lo a avaliar o nível de segurança do cluster protegido em relação a cada controle no benchmark do CIS Kubernetes. 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 lançamento v1.27-1.32 do RKE2 e a versão v1.9 do Benchmark do CIS Kubernetes.
Para mais informações sobre cada controle, incluindo justificativas detalhadas e descrições de verificações, você pode consultar a seção correspondente do Benchmark do CIS Kubernetes 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 Benchmark do CIS Kubernetes foi avaliado em um cluster RKE2 configurado de acordo com o guia de proteção correspondente.
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 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 control plane e etcd estiverem presentes nos mesmos nós, mas essa verificação for um aviso, 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 control plane e etcd estiverem presentes nos mesmos nós, mas essa verificação for um aviso, 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 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 Certifique-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 dos arquivos 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 600 ou mais restritivas (Manual)
Resultado: AVISO
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/*.crt
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 2840 2791 5 18:32 ? 00:01:35 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 --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-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 linha semelhante à 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 2840 2791 5 18:32 ? 00:01:35 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 --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-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 linha semelhante à 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 2840 2791 5 18:32 ? 00:01:35 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 --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-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 2840 2791 5 18:32 ? 00:01:35 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 --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-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 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 2840 2791 5 18:32 ? 00:01:35 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 --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-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 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 2840 2791 5 18:32 ? 00:01:35 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 --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-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, certifique-se de 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 2840 2791 5 18:32 ? 00:01:35 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 --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-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, certifique-se de 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: '--habilitar-plugins-de-admissão' não tem 'AlwaysAdmit' OU '--habilitar-plugins-de-admissão' não está presente
Valor retornado:
UID PID PPID C STIME TTY TIME CMD root 2840 2791 5 18:32 ? 00:01:35 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 --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-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 possuem 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: '--desabilitar-plugins-de-admissão' está presente OU '--desabilitar-plugins-de-admissão' não está presente
Valor retornado:
UID PID PPID C STIME TTY TIME CMD root 2840 2791 5 18:32 ? 00:01:35 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 --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-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: '--desabilitar-plugins-de-admissão' está presente OU '--desabilitar-plugins-de-admissão' não está presente
Valor retornado:
UID PID PPID C STIME TTY TIME CMD root 2840 2791 5 18:32 ? 00:01:35 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 --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-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 2840 2791 5 18:32 ? 00:01:35 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 --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-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 certifique-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 2840 2791 5 18:32 ? 00:01:35 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 --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-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 2840 2791 5 18:32 ? 00:01:35 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 --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-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 argumento --audit-log-path para /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 2840 2791 5 18:32 ? 00:01:35 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 --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-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 2840 2791 5 18:32 ? 00:01:35 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 --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-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 2840 2791 5 18:32 ? 00:01:35 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 --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-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 2840 2791 5 18:32 ? 00:01:35 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 --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-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 2840 2791 5 18:32 ? 00:01:35 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 --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-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 argumento 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 Assegure-se de que o argumento --service-account-key-file esteja definido conforme apropriado (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 2840 2791 5 18:32 ? 00:01:35 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 --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-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 essa 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 2840 2791 5 18:32 ? 00:01:35 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 --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-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 do 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 2840 2791 5 18:32 ? 00:01:35 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 --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-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 essa 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 2840 2791 5 18:32 ? 00:01:35 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 --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-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 2840 2791 5 18:32 ? 00:01:35 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 --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-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 2840 2791 5 18:32 ? 00:01:35 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 --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-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[= ]\([{caret} ]*\).*%\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/{caret}/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_3DES_EDE_CBC_SHA,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_3DES_EDE_CBC_SHA,TLS_RSA_WITH_AES_128_CBC_SHA,TLS_RSA_WITH_AES_128_GCM_SHA256,TLS_RSA_WITH_AES_256_CBC_SHA,TLS_RSA_WITH_AES_256_GCM_SHA384'
Valor retornado:
UID PID PPID C STIME TTY TIME CMD root 2840 2791 5 18:32 ? 00:01:35 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 --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-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 essa 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.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 2987 2893 1 18:32 ? 00:00:25 kube-controller-manager --flex-volume-plugin-dir=/var/lib/kubelet/volumeplugins --terminated-pod-gc-threshold=1000 --permit-port-sharing=true --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 --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 em /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 2987 2893 1 18:32 ? 00:00:25 kube-controller-manager --flex-volume-plugin-dir=/var/lib/kubelet/volumeplugins --terminated-pod-gc-threshold=1000 --permit-port-sharing=true --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 --use-service-account-credentials=true
Remediação:
Por padrão, o RKE2 define o argumento --profiling como false. 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 'false'
Valor retornado:
UID PID PPID C STIME TTY TIME CMD root 2987 2893 1 18:32 ? 00:00:25 kube-controller-manager --flex-volume-plugin-dir=/var/lib/kubelet/volumeplugins --terminated-pod-gc-threshold=1000 --permit-port-sharing=true --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 --use-service-account-credentials=true
Remediação:
Por padrão, o RKE2 define o argumento --use-service-account-credentials como true. 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 2987 2893 1 18:32 ? 00:00:25 kube-controller-manager --flex-volume-plugin-dir=/var/lib/kubelet/volumeplugins --terminated-pod-gc-threshold=1000 --permit-port-sharing=true --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 --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 2987 2893 1 18:32 ? 00:00:25 kube-controller-manager --flex-volume-plugin-dir=/var/lib/kubelet/volumeplugins --terminated-pod-gc-threshold=1000 --permit-port-sharing=true --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 --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 certificado 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 2987 2893 1 18:32 ? 00:00:25 kube-controller-manager --flex-volume-plugin-dir=/var/lib/kubelet/volumeplugins --terminated-pod-gc-threshold=1000 --permit-port-sharing=true --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 --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 2987 2893 1 18:32 ? 00:00:25 kube-controller-manager --flex-volume-plugin-dir=/var/lib/kubelet/volumeplugins --terminated-pod-gc-threshold=1000 --permit-port-sharing=true --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 --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 2992 2874 0 18:32 ? 00:00:05 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
Remediação:
Por padrão, o RKE2 define o argumento --profiling como false. 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 2992 2874 0 18:32 ? 00:00:05 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
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-eb0b952d=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-eb0b952d 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
Remediação:
Por padrão, o RKE2 gera arquivos de certificado e chave para 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 'true'
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-a6fd4758=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-a6fd4758 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
Remediação:
Por padrão, o RKE2 define o parâmetro --client-cert-auth como true. 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:
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-a6fd4758=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-a6fd4758 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
Remediação:
Por padrão, o RKE2 não define o parâmetro --auto-tls. Se essa 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 false. client-transport-security: auto-tls: false
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-eb0b952d=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-eb0b952d 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
Remediação:
Por padrão, o RKE2 gera arquivos de certificado e chave de peer 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 de peer 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 'true'
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-a6fd4758=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-a6fd4758 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
Remediação:
Por padrão, o RKE2 define o parâmetro --peer-cert-auth como true. 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 de peer.
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:
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-a6fd4758=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-a6fd4758 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
Remediação:
Por padrão, o RKE2 não define o parâmetro --peer-auto-tls. Se essa 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 false. peer-transport-security: auto-tls: false
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:
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-a6fd4758=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-a6fd4758 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
Remediação:
Por padrão, o RKE2 gera uma autoridade certificadora única para o etcd. Isso está localizado em /var/lib/rancher/rke2/server/tls/etcd/peer-ca.crt. 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 uma autoridade certificadora compartilhada.
3 Configuração do Plano de Controle
3.1 Autenticação e Autorização
3.1.1 A autenticação por 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 Registro
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 2840 2791 5 18:32 ? 00:01:35 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 --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-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 2987 2893 1 18:32 ? 00:00:25 kube-controller-manager --flex-volume-plugin-dir=/var/lib/kubelet/volumeplugins --terminated-pod-gc-threshold=1000 --permit-port-sharing=true --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 --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 aborde as principais preocupações de segurança (Manual)
Resultado: AVISO
Remediação: Revise a política de auditoria fornecida para o cluster e certifique-se de que ela aborde 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/proxy e services/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ó de Trabalho
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 estão definidas como 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ó de trabalho. 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 estão definidas como 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ó de trabalho. 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ó de trabalho. 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 autoridades certificadoras 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 estão definidas como 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ó de trabalho. 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 se as permissões estão 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/ps -fC kubelet
Resultado Esperado: '--anonymous-auth' é igual a 'false'
Valor retornado:
UID PID PPID C STIME TTY TIME CMD root 2592 2508 2 18:32 ? 00:00:41 kubelet --volume-plugin-dir=/var/lib/kubelet/volumeplugins --file-check-frequency=5s --sync-frequency=30s --address=0.0.0.0 --anonymous-auth=false --authentication-token-webhook=true --authorization-mode=Webhook --cgroup-driver=systemd --client-ca-file=/var/lib/rancher/rke2/agent/client-ca.crt --cloud-provider=external --cluster-dns=10.43.0.10 --cluster-domain=cluster.local --container-runtime-endpoint=unix:///run/k3s/containerd/containerd.sock --containerd=/run/k3s/containerd/containerd.sock --eviction-hard=imagefs.available<5%,nodefs.available<5% --eviction-minimum-reclaim=imagefs.available=10%,nodefs.available=10% --fail-swap-on=false --feature-gates=CloudDualStackNodeIPs=true --healthz-bind-address=127.0.0.1 --hostname-override=server-0 --kubeconfig=/var/lib/rancher/rke2/agent/kubelet.kubeconfig --node-ip=10.10.10.100 --node-labels= --pod-infra-container-image=index.docker.io/rancher/mirrored-pause:3.6 --pod-manifest-path=/var/lib/rancher/rke2/agent/pod-manifests --protect-kernel-defaults=true --read-only-port=0 --resolv-conf=/run/systemd/resolve/resolv.conf --serialize-image-pulls=false --tls-cert-file=/var/lib/rancher/rke2/agent/serving-kubelet.crt --tls-private-key-file=/var/lib/rancher/rke2/agent/serving-kubelet.key
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/ps -fC kubelet
Resultado Esperado: '--authorization-mode' não possui 'AlwaysAllow'
Valor retornado:
UID PID PPID C STIME TTY TIME CMD root 2592 2508 2 18:32 ? 00:00:41 kubelet --volume-plugin-dir=/var/lib/kubelet/volumeplugins --file-check-frequency=5s --sync-frequency=30s --address=0.0.0.0 --anonymous-auth=false --authentication-token-webhook=true --authorization-mode=Webhook --cgroup-driver=systemd --client-ca-file=/var/lib/rancher/rke2/agent/client-ca.crt --cloud-provider=external --cluster-dns=10.43.0.10 --cluster-domain=cluster.local --container-runtime-endpoint=unix:///run/k3s/containerd/containerd.sock --containerd=/run/k3s/containerd/containerd.sock --eviction-hard=imagefs.available<5%,nodefs.available<5% --eviction-minimum-reclaim=imagefs.available=10%,nodefs.available=10% --fail-swap-on=false --feature-gates=CloudDualStackNodeIPs=true --healthz-bind-address=127.0.0.1 --hostname-override=server-0 --kubeconfig=/var/lib/rancher/rke2/agent/kubelet.kubeconfig --node-ip=10.10.10.100 --node-labels= --pod-infra-container-image=index.docker.io/rancher/mirrored-pause:3.6 --pod-manifest-path=/var/lib/rancher/rke2/agent/pod-manifests --protect-kernel-defaults=true --read-only-port=0 --resolv-conf=/run/systemd/resolve/resolv.conf --serialize-image-pulls=false --tls-cert-file=/var/lib/rancher/rke2/agent/serving-kubelet.crt --tls-private-key-file=/var/lib/rancher/rke2/agent/serving-kubelet.key
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/ps -fC kubelet
Resultado Esperado: '--client-ca-file' está presente
Valor retornado:
UID PID PPID C STIME TTY TIME CMD root 2592 2508 2 18:32 ? 00:00:41 kubelet --volume-plugin-dir=/var/lib/kubelet/volumeplugins --file-check-frequency=5s --sync-frequency=30s --address=0.0.0.0 --anonymous-auth=false --authentication-token-webhook=true --authorization-mode=Webhook --cgroup-driver=systemd --client-ca-file=/var/lib/rancher/rke2/agent/client-ca.crt --cloud-provider=external --cluster-dns=10.43.0.10 --cluster-domain=cluster.local --container-runtime-endpoint=unix:///run/k3s/containerd/containerd.sock --containerd=/run/k3s/containerd/containerd.sock --eviction-hard=imagefs.available<5%,nodefs.available<5% --eviction-minimum-reclaim=imagefs.available=10%,nodefs.available=10% --fail-swap-on=false --feature-gates=CloudDualStackNodeIPs=true --healthz-bind-address=127.0.0.1 --hostname-override=server-0 --kubeconfig=/var/lib/rancher/rke2/agent/kubelet.kubeconfig --node-ip=10.10.10.100 --node-labels= --pod-infra-container-image=index.docker.io/rancher/mirrored-pause:3.6 --pod-manifest-path=/var/lib/rancher/rke2/agent/pod-manifests --protect-kernel-defaults=true --read-only-port=0 --resolv-conf=/run/systemd/resolve/resolv.conf --serialize-image-pulls=false --tls-cert-file=/var/lib/rancher/rke2/agent/serving-kubelet.crt --tls-private-key-file=/var/lib/rancher/rke2/agent/serving-kubelet.key
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 o argumento --read-only-port está definido como 0 (Automatizado)
Resultado: PASS
Auditoria
/bin/ps -fC kubelet
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 2592 2508 2 18:32 ? 00:00:41 kubelet --volume-plugin-dir=/var/lib/kubelet/volumeplugins --file-check-frequency=5s --sync-frequency=30s --address=0.0.0.0 --anonymous-auth=false --authentication-token-webhook=true --authorization-mode=Webhook --cgroup-driver=systemd --client-ca-file=/var/lib/rancher/rke2/agent/client-ca.crt --cloud-provider=external --cluster-dns=10.43.0.10 --cluster-domain=cluster.local --container-runtime-endpoint=unix:///run/k3s/containerd/containerd.sock --containerd=/run/k3s/containerd/containerd.sock --eviction-hard=imagefs.available<5%,nodefs.available<5% --eviction-minimum-reclaim=imagefs.available=10%,nodefs.available=10% --fail-swap-on=false --feature-gates=CloudDualStackNodeIPs=true --healthz-bind-address=127.0.0.1 --hostname-override=server-0 --kubeconfig=/var/lib/rancher/rke2/agent/kubelet.kubeconfig --node-ip=10.10.10.100 --node-labels= --pod-infra-container-image=index.docker.io/rancher/mirrored-pause:3.6 --pod-manifest-path=/var/lib/rancher/rke2/agent/pod-manifests --protect-kernel-defaults=true --read-only-port=0 --resolv-conf=/run/systemd/resolve/resolv.conf --serialize-image-pulls=false --tls-cert-file=/var/lib/rancher/rke2/agent/serving-kubelet.crt --tls-private-key-file=/var/lib/rancher/rke2/agent/serving-kubelet.key
Remediação:
Por padrão, o RKE2 define o --read-only-port como 0. Se você definiu isso como 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/ps -fC kubelet
Resultado Esperado: '--streaming-connection-idle-timeout' está presente OU '--streaming-connection-idle-timeout' não está presente
Valor retornado:
UID PID PPID C STIME TTY TIME CMD root 2592 2508 2 18:32 ? 00:00:41 kubelet --volume-plugin-dir=/var/lib/kubelet/volumeplugins --file-check-frequency=5s --sync-frequency=30s --address=0.0.0.0 --anonymous-auth=false --authentication-token-webhook=true --authorization-mode=Webhook --cgroup-driver=systemd --client-ca-file=/var/lib/rancher/rke2/agent/client-ca.crt --cloud-provider=external --cluster-dns=10.43.0.10 --cluster-domain=cluster.local --container-runtime-endpoint=unix:///run/k3s/containerd/containerd.sock --containerd=/run/k3s/containerd/containerd.sock --eviction-hard=imagefs.available<5%,nodefs.available<5% --eviction-minimum-reclaim=imagefs.available=10%,nodefs.available=10% --fail-swap-on=false --feature-gates=CloudDualStackNodeIPs=true --healthz-bind-address=127.0.0.1 --hostname-override=server-0 --kubeconfig=/var/lib/rancher/rke2/agent/kubelet.kubeconfig --node-ip=10.10.10.100 --node-labels= --pod-infra-container-image=index.docker.io/rancher/mirrored-pause:3.6 --pod-manifest-path=/var/lib/rancher/rke2/agent/pod-manifests --protect-kernel-defaults=true --read-only-port=0 --resolv-conf=/run/systemd/resolve/resolv.conf --serialize-image-pulls=false --tls-cert-file=/var/lib/rancher/rke2/agent/serving-kubelet.crt --tls-private-key-file=/var/lib/rancher/rke2/agent/serving-kubelet.key
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/ps -fC kubelet
Resultado Esperado: '--make-iptables-util-chains' está presente OU '--make-iptables-util-chains' não está presente
Valor retornado:
UID PID PPID C STIME TTY TIME CMD root 2592 2508 2 18:32 ? 00:00:41 kubelet --volume-plugin-dir=/var/lib/kubelet/volumeplugins --file-check-frequency=5s --sync-frequency=30s --address=0.0.0.0 --anonymous-auth=false --authentication-token-webhook=true --authorization-mode=Webhook --cgroup-driver=systemd --client-ca-file=/var/lib/rancher/rke2/agent/client-ca.crt --cloud-provider=external --cluster-dns=10.43.0.10 --cluster-domain=cluster.local --container-runtime-endpoint=unix:///run/k3s/containerd/containerd.sock --containerd=/run/k3s/containerd/containerd.sock --eviction-hard=imagefs.available<5%,nodefs.available<5% --eviction-minimum-reclaim=imagefs.available=10%,nodefs.available=10% --fail-swap-on=false --feature-gates=CloudDualStackNodeIPs=true --healthz-bind-address=127.0.0.1 --hostname-override=server-0 --kubeconfig=/var/lib/rancher/rke2/agent/kubelet.kubeconfig --node-ip=10.10.10.100 --node-labels= --pod-infra-container-image=index.docker.io/rancher/mirrored-pause:3.6 --pod-manifest-path=/var/lib/rancher/rke2/agent/pod-manifests --protect-kernel-defaults=true --read-only-port=0 --resolv-conf=/run/systemd/resolve/resolv.conf --serialize-image-pulls=false --tls-cert-file=/var/lib/rancher/rke2/agent/serving-kubelet.crt --tls-private-key-file=/var/lib/rancher/rke2/agent/serving-kubelet.key
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/ps -fC kubelet
Resultado Esperado: '--event-qps' está presente OU '--event-qps' não está presente
Valor retornado:
UID PID PPID C STIME TTY TIME CMD root 2592 2508 2 18:32 ? 00:00:41 kubelet --volume-plugin-dir=/var/lib/kubelet/volumeplugins --file-check-frequency=5s --sync-frequency=30s --address=0.0.0.0 --anonymous-auth=false --authentication-token-webhook=true --authorization-mode=Webhook --cgroup-driver=systemd --client-ca-file=/var/lib/rancher/rke2/agent/client-ca.crt --cloud-provider=external --cluster-dns=10.43.0.10 --cluster-domain=cluster.local --container-runtime-endpoint=unix:///run/k3s/containerd/containerd.sock --containerd=/run/k3s/containerd/containerd.sock --eviction-hard=imagefs.available<5%,nodefs.available<5% --eviction-minimum-reclaim=imagefs.available=10%,nodefs.available=10% --fail-swap-on=false --feature-gates=CloudDualStackNodeIPs=true --healthz-bind-address=127.0.0.1 --hostname-override=server-0 --kubeconfig=/var/lib/rancher/rke2/agent/kubelet.kubeconfig --node-ip=10.10.10.100 --node-labels= --pod-infra-container-image=index.docker.io/rancher/mirrored-pause:3.6 --pod-manifest-path=/var/lib/rancher/rke2/agent/pod-manifests --protect-kernel-defaults=true --read-only-port=0 --resolv-conf=/run/systemd/resolve/resolv.conf --serialize-image-pulls=false --tls-cert-file=/var/lib/rancher/rke2/agent/serving-kubelet.crt --tls-private-key-file=/var/lib/rancher/rke2/agent/serving-kubelet.key
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/ps -fC kubelet
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 2592 2508 2 18:32 ? 00:00:41 kubelet --volume-plugin-dir=/var/lib/kubelet/volumeplugins --file-check-frequency=5s --sync-frequency=30s --address=0.0.0.0 --anonymous-auth=false --authentication-token-webhook=true --authorization-mode=Webhook --cgroup-driver=systemd --client-ca-file=/var/lib/rancher/rke2/agent/client-ca.crt --cloud-provider=external --cluster-dns=10.43.0.10 --cluster-domain=cluster.local --container-runtime-endpoint=unix:///run/k3s/containerd/containerd.sock --containerd=/run/k3s/containerd/containerd.sock --eviction-hard=imagefs.available<5%,nodefs.available<5% --eviction-minimum-reclaim=imagefs.available=10%,nodefs.available=10% --fail-swap-on=false --feature-gates=CloudDualStackNodeIPs=true --healthz-bind-address=127.0.0.1 --hostname-override=server-0 --kubeconfig=/var/lib/rancher/rke2/agent/kubelet.kubeconfig --node-ip=10.10.10.100 --node-labels= --pod-infra-container-image=index.docker.io/rancher/mirrored-pause:3.6 --pod-manifest-path=/var/lib/rancher/rke2/agent/pod-manifests --protect-kernel-defaults=true --read-only-port=0 --resolv-conf=/run/systemd/resolve/resolv.conf --serialize-image-pulls=false --tls-cert-file=/var/lib/rancher/rke2/agent/serving-kubelet.crt --tls-private-key-file=/var/lib/rancher/rke2/agent/serving-kubelet.key
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/ps -fC kubelet
Resultado Esperado: '--rotate-certificates' está presente OU '--rotate-certificates' não está presente
Valor retornado:
UID PID PPID C STIME TTY TIME CMD root 2592 2508 2 18:32 ? 00:00:41 kubelet --volume-plugin-dir=/var/lib/kubelet/volumeplugins --file-check-frequency=5s --sync-frequency=30s --address=0.0.0.0 --anonymous-auth=false --authentication-token-webhook=true --authorization-mode=Webhook --cgroup-driver=systemd --client-ca-file=/var/lib/rancher/rke2/agent/client-ca.crt --cloud-provider=external --cluster-dns=10.43.0.10 --cluster-domain=cluster.local --container-runtime-endpoint=unix:///run/k3s/containerd/containerd.sock --containerd=/run/k3s/containerd/containerd.sock --eviction-hard=imagefs.available<5%,nodefs.available<5% --eviction-minimum-reclaim=imagefs.available=10%,nodefs.available=10% --fail-swap-on=false --feature-gates=CloudDualStackNodeIPs=true --healthz-bind-address=127.0.0.1 --hostname-override=server-0 --kubeconfig=/var/lib/rancher/rke2/agent/kubelet.kubeconfig --node-ip=10.10.10.100 --node-labels= --pod-infra-container-image=index.docker.io/rancher/mirrored-pause:3.6 --pod-manifest-path=/var/lib/rancher/rke2/agent/pod-manifests --protect-kernel-defaults=true --read-only-port=0 --resolv-conf=/run/systemd/resolve/resolv.conf --serialize-image-pulls=false --tls-cert-file=/var/lib/rancher/rke2/agent/serving-kubelet.crt --tls-private-key-file=/var/lib/rancher/rke2/agent/serving-kubelet.key
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/ps -fC kubelet
Resultado Esperado: 'RotateKubeletServerCertificate' está presente OU 'RotateKubeletServerCertificate' não está presente
Valor retornado:
UID PID PPID C STIME TTY TIME CMD root 2592 2508 2 18:32 ? 00:00:41 kubelet --volume-plugin-dir=/var/lib/kubelet/volumeplugins --file-check-frequency=5s --sync-frequency=30s --address=0.0.0.0 --anonymous-auth=false --authentication-token-webhook=true --authorization-mode=Webhook --cgroup-driver=systemd --client-ca-file=/var/lib/rancher/rke2/agent/client-ca.crt --cloud-provider=external --cluster-dns=10.43.0.10 --cluster-domain=cluster.local --container-runtime-endpoint=unix:///run/k3s/containerd/containerd.sock --containerd=/run/k3s/containerd/containerd.sock --eviction-hard=imagefs.available<5%,nodefs.available<5% --eviction-minimum-reclaim=imagefs.available=10%,nodefs.available=10% --fail-swap-on=false --feature-gates=CloudDualStackNodeIPs=true --healthz-bind-address=127.0.0.1 --hostname-override=server-0 --kubeconfig=/var/lib/rancher/rke2/agent/kubelet.kubeconfig --node-ip=10.10.10.100 --node-labels= --pod-infra-container-image=index.docker.io/rancher/mirrored-pause:3.6 --pod-manifest-path=/var/lib/rancher/rke2/agent/pod-manifests --protect-kernel-defaults=true --read-only-port=0 --resolv-conf=/run/systemd/resolve/resolv.conf --serialize-image-pulls=false --tls-cert-file=/var/lib/rancher/rke2/agent/serving-kubelet.crt --tls-private-key-file=/var/lib/rancher/rke2/agent/serving-kubelet.key
Remediação:
Por padrão, o RKE2 não define a feature gate 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.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/ps -fC kube-proxy
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 2730 2644 0 18:32 ? 00:00:01 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 (Automatizado)
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-snapshot-controller helm-rke2-snapshot-controller cluster-admin helm-kube-system-rke2-snapshot-controller-crd helm-rke2-snapshot-controller-crd cluster-admin helm-kube-system-rke2-snapshot-validation-webhook helm-rke2-snapshot-validation-webhook
Remediação:
Identifique todos os clusterrolebindings para o papel de cluster-admin. Verifique se eles estão sendo usados e se precisam desse papel ou se poderiam usar um papel com menos privilégios. O RKE2 concede 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 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 (Automatizado)
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 (Automatizado)
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: rke2-snapshot-validation-webhook 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: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: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 concede exceções aos seguintes cluster roles, que são necessários 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
5.1.4 Minimize o acesso para criar pods (Automatizado)
Resultado: AVISO
Remediação: Sempre que possível, remova o acesso de criação a objetos pod no cluster.
5.1.5 Garanta que contas de serviço padrão não estejam sendo usadas ativamente. (Automatizado)
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> default --patch '{"automountServiceAccountToken": false}'
5.1.6 Garanta que os Tokens de Conta de Serviço sejam montados apenas onde necessário (Automatizado)
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-sf57z 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-sc5xz 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-khgxr 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-s7drs 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-snapshot-controller-crd-vdm6s 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-f9mkz service_account: helm-rke2-snapshot-controller pod_is_automountserviceaccounttoken: notset svacc_is_automountServiceAccountToken: true is_compliant: true **namespace: kube-system pod_name: helm-install-rke2-snapshot-validation-webhook-66gdl service_account: helm-rke2-snapshot-validation-webhook pod_is_automountserviceaccounttoken: notset svacc_is_automountServiceAccountToken: true is_compliant: true **namespace: kube-system pod_name: rke2-canal-cv8xl service_account: canal pod_is_automountserviceaccounttoken: notset svacc_is_automountServiceAccountToken: notset is_compliant: true **namespace: kube-system pod_name: rke2-coredns-rke2-coredns-864fbd7785-tlfwz service_account: coredns pod_is_automountserviceaccounttoken: notset svacc_is_automountServiceAccountToken: notset is_compliant: true **namespace: kube-system pod_name: rke2-coredns-rke2-coredns-autoscaler-6c87968579-k2kf8 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-4mq9l service_account: rke2-ingress-nginx pod_is_automountserviceaccounttoken: notset svacc_is_automountServiceAccountToken: true is_compliant: true **namespace: kube-system pod_name: rke2-metrics-server-7f745dbddf-96zw8 service_account: rke2-metrics-server pod_is_automountserviceaccounttoken: notset svacc_is_automountServiceAccountToken: notset is_compliant: true **namespace: kube-system pod_name: rke2-snapshot-controller-7d6476d7cb-trhbn service_account: rke2-snapshot-controller pod_is_automountserviceaccounttoken: notset svacc_is_automountServiceAccountToken: notset is_compliant: true **namespace: kube-system pod_name: rke2-snapshot-validation-webhook-5649fbd66c-zrkf5 service_account: rke2-snapshot-validation-webhook 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 para as ServiceAccounts no namespace kube-system, pois estas devem contatar o apiserver. Quando em modo cis, o RKE2 desabilita o automountServiceAccountToken para os namespaces: - kube-public, default, kube-node-lease Se tanto a ServiceAccount quanto o .spec do Pod especificarem um valor para automountServiceAccountToken, o especificado do Pod tem precedência. Condição: O Pod é considerado compatível quando: (1) a ServiceAccount possui automountServiceAccountToken igual a false e o Pod possui automountServiceAccountToken igual a false ou não definido; ou (2) a ServiceAccount possui automountServiceAccountToken igual a true ou não definido e o Pod possui automountServiceAccountToken igual a 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 certificatesigningrequest.
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 haja um sistema de controle de políticas, seja o Pod Security Admission ou um sistema externo, em cada namespace que contém cargas de trabalho de usuários.
5.2.2 Minimize a admissão de contêineres privilegiados (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 privilegiados.
5.2.3 Minimize a admissão de contêineres que desejam compartilhar o namespace do ID do processo do host (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 hostPID.
5.2.4 Minimize a admissão de contêineres que desejam compartilhar o namespace IPC do host (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 hostIPC.
5.2.5 Minimize a admissão de contêineres que desejam compartilhar o namespace de rede do host (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 hostNetwork.
5.2.6 Minimize a admissão de contêineres com allowPrivilegeEscalation (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 com .spec.allowPrivilegeEscalation definido como true.
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ários 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 adicionais (Manual)
Resultado: AVISO
Remediação: Assegure-se de que allowedCapabilities não esteja presente nas políticas do cluster, a menos que esteja definido como um array vazio.
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 que estão rodando em seu cluster. Quando um namespace contém aplicativos 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 Minimize 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 definido como true.
5.3 Políticas de Rede e CNI
5.4 Gerenciamento de Segredos
5.7 Políticas Gerais
5.7.1 Crie limites administrativos entre recursos usando namespaces (Manual)
Resultado: AVISO
Remediação: Siga a documentação e crie namespaces para objetos em sua implantação conforme necessário.
5.7.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 perfil seccomp docker/default nas definições do seu Pod. Um exemplo é o seguinte: securityContext: seccompProfile: type: RuntimeDefault