Este documento apresenta o comparativo de mercado CIS do Kubernetes, explica como auditar seu compliance com o comparativo e o que o Google Distributed Cloud (GDC) isolado por ar configura quando não é possível implementar uma recomendação por conta própria.
Sobre os comparativos de mercado do CIS
O Center for Internet Security (CIS) lança comparativos de mercado para práticas recomendadas de segurança. O comparativo de mercado do Kubernetes do CIS apresenta um conjunto de recomendações para configurar o Kubernetes e oferecer suporte a uma postura de segurança reforçada. O comparativo de mercado está vinculado a uma versão específica do Kubernetes. O CIS Benchmark do Kubernetes foi escrito para a distribuição de código aberto do Kubernetes e para ser aplicado universalmente a todas as distribuições possíveis.
Acessar o comparativo de mercado
O comparativo de mercado CIS do Kubernetes está disponível no site do CIS.
Níveis de recomendação
A tabela a seguir descreve os níveis de recomendação no comparativo de mercado CIS do Kubernetes.
| Nível | Descrição |
|---|---|
| Nível 1 | As recomendações exibem uma ou mais das seguintes características: |
| Nível 2 | Amplia o perfil de nível 1. As recomendações exibem uma ou mais das seguintes características: |
Status da avaliação
O status da avaliação será incluído em todas as recomendações. O status da avaliação indica se a recomendação pode ser automatizada ou requer etapas manuais para a implementação. Ambos os status são igualmente importantes, e são determinados e suportados conforme definido nas tabelas a seguir.
Versões
A avaliação se refere às seguintes versões:
| Versão do GDC em bare metal | Versão do Kubernetes | Versão do comparativo de mercado CIS do Kubernetes |
|---|---|---|
| 1,30 | 1.30.9 | v0.10.4 |
Status do cluster do Kubernetes isolado do GDC
| # | Recomendação | Nível | Status |
|---|---|---|---|
| 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 | Verificar se as permissões do arquivo de especificação do pod do servidor de API estão definidas como 600 ou são mais restritivas (automatizado) |
N1 | Aprovado |
| 1.1.2 | Verificar se a propriedade do arquivo de especificação do pod do servidor de API está definida como root:root (automatizado) |
N1 | Aprovado |
| 1.1.3 | Verificar se as permissões do arquivo de especificação do pod do gerenciador de controladores estão definidas como 600 ou são mais restritivas (automatizado) |
N1 | Aprovado |
| 1.1.4 | Verificar se a propriedade do arquivo de especificação do pod do gerenciador de controladores está definida como root:root (automatizado) |
N1 | Aprovado |
| 1.1.5 | Verificar se as permissões do arquivo de especificação do pod do programador estão definidas como 600 ou são mais restritivas (automatizado) |
N1 | Aprovado |
| 1.1.6 | Verificar se a propriedade do arquivo de especificação do pod do programador está definida como root:root (automatizado) |
N1 | Aprovado |
| 1.1.7 | Verificar se as permissões do arquivo de especificação do pod do etcd estão definidas como 600 ou são mais restritivas (automatizado) |
N1 | Aprovado |
| 1.1.8 | Verificar se a propriedade do arquivo de especificação do pod do etcd está definida como root:root (automatizado) |
N1 | Aprovado |
| 1.1.9 | Verificar se as permissões do arquivo da interface de rede do contêiner estão definidas como 600 ou são mais restritivas (manual) |
N1 | Avisar |
| 1.1.10 | Verificar se a propriedade do arquivo da interface de rede do contêiner está definida como root:root (manual) |
N1 | Avisar |
| 1.1.11 | Verificar se as permissões do diretório de dados do etcd estão definidas como 700 ou são mais restritivas (automatizado) |
N1 | Aprovado |
| 1.1.12 | Verificar se a propriedade do diretório de dados do etcd está definida como etcd:etcd (automatizado) |
N1 | Reprovado |
| 1.1.13 | Verificar se as permissões do arquivo de credenciais administrativas padrão estão definidas como 600 (automatizado) |
N1 | Aprovado |
| 1.1.14 | Verificar se a propriedade do arquivo de credenciais administrativas padrão está definida como root:root (automatizado) |
N1 | Aprovado |
| 1.1.15 | Verificar se as permissões do arquivo scheduler.conf estão definidas como 600 ou são mais restritivas (automatizado) |
N1 | Aprovado |
| 1.1.16 | Verificar se a propriedade do arquivo scheduler.conf está definida como root:root (automatizado) |
N1 | Reprovado |
| 1.1.17 | Verificar se as permissões do arquivo controller-manager.conf estão definidas como 600 ou são mais restritivas (automatizado) |
N1 | Aprovado |
| 1.1.18 | Verificar se a propriedade do arquivo controller-manager.conf está definida como root:root (automatizado) |
N1 | Reprovado |
| 1.1.19 | Verificar se o diretório PKI do Kubernetes e a propriedade do arquivo estão definidos como root:root (automatizado) |
N1 | Reprovado |
| 1.1.20 | Verificar se as permissões do arquivo de certificado PKI do Kubernetes estão definidas como 600 ou são mais restritivas (manual) |
N1 | Avisar |
| 1.1.21 | Verificar se as permissões do arquivo de chave PKI do Kubernetes estão definidas como 600 (manual) |
N1 | Avisar |
| 1.2 | Servidor de API | ||
| 1.2.1 | Verificar se o argumento --anonymous-auth está definido como false (manual) |
N1 | Alerta |
| 1.2.2 | Verificar se o parâmetro --token-auth-file não está definido (automatizado) |
N1 | Aprovado |
| 1.2.3 | Verificar se o --DenyServiceExternalIPs está definido (Manual) |
N1 | Avisar |
| 1.2.4 | Verificar se os argumentos --kubelet-client-certificate e --kubelet-client-key estão definidos conforme apropriado (automatizados) |
N1 | Aprovado |
| 1.2.5 | Verificar se o argumento --kubelet-certificate-authority está definido conforme apropriado (automatizado) |
N1 | Aprovado |
| 1.2.6 | Verificar se o argumento --authorization-mode não está definido como AlwaysAllow (automatizado) |
N1 | Aprovado |
| 1.2.7 | Verificar se o argumento --authorization-mode inclui o nó (automatizado) |
N1 | Aprovado |
| 1.2.8 | Verificar se o argumento --authorization-mode inclui o RBAC (automatizado) |
N1 | Aprovado |
| 1.2.9 | Verificar se o plug-in de controle de admissão EventRateLimit está definido (manual) |
N1 | Avisar |
| 1.2.10 | Verificar se o plug-in de controle de admissão AlwaysAdmit não está definido (automatizado) |
N1 | Aprovado |
| 1.2.11 | Verificar se o plug-in de controle de admissão AlwaysPullImages está definido (manual) |
N1 | Avisar |
| 1.2.12 | Verificar se o plug-in de controle de admissão ServiceAccount está definido (automatizado) |
N1 | Aprovado |
| 1.2.13 | Verificar se o plug-in de controle de admissão NamespaceLifecycle está definido (automatizado) |
N1 | Aprovado |
| 1.2.14 | Verificar se o plug-in de controle de admissão NodeRestriction está definido (automatizado) |
N1 | Aprovado |
| 1.2.15 | Verificar se o argumento --profiling está definido como false (automatizado) |
N1 | Aprovado |
| 1.2.16 | Verificar se o argumento --audit-log-path está definido (automatizado) |
N1 | Aprovado |
| 1.2.17 | Verificar se o argumento --audit-log-maxage está definido como 30 ou conforme apropriado (automatizado) |
N1 | Aprovado |
| 1.2.18 | Verificar se o argumento --audit-log-maxbackup está definido como 10 ou conforme apropriado (automatizado) |
N1 | Aprovado |
| 1.2.19 | Verificar se o argumento --audit-log-maxsize está definido como 100 ou conforme apropriado (automatizado) |
N1 | Aprovado |
| 1.2.20 | Verificar se o argumento --request-timeout está definido conforme apropriado (manual) |
N1 | Avisar |
| 1.2.21 | Verificar se o argumento --service-account-lookup está definido como true (automatizado) |
N1 | Aprovado |
| 1.2.22 | Verificar se o argumento --service-account-key-file está definido conforme apropriado (automatizado) |
N1 | Aprovado |
| 1.2.23 | Verificar se os argumentos --etcd-certfile e --etcd-keyfile estão definidos conforme apropriado (automatizados) |
N1 | Aprovado |
| 1.2.24 | Verificar se os argumentos --tls-cert-file e --tls-private-key-file estão definidos conforme apropriado (automatizados) |
N1 | Aprovado |
| 1.2.25 | Verificar se o argumento --client-ca-file está definido conforme apropriado (automatizado) |
N1 | Aprovado |
| 1.2.26 | Verificar se o argumento --etcd-cafile está definido conforme apropriado (automatizado) |
N1 | Aprovado |
| 1.2.27 | Verificar se o argumento --encryption-provider-config está definido conforme apropriado (manual) |
N1 | Aprovado |
| 1.2.28 | Verificar se os provedores de criptografia estão configurados corretamente (manual) | N1 | Aprovado |
| 1.2.29 | Verificar se o servidor de API usa apenas códigos criptográficos fortes (manual) | N1 | Aprovado |
| 1.3 | Controller Manager | ||
| 1.3.1 | Verificar se o argumento --terminated-pod-gc-threshold está definido conforme apropriado (manual) |
N1 | Aprovado |
| 1.3.2 | Verificar se --profiling argument está definido como false (automatizado) |
N1 | Aprovado |
| 1.3.3 | Verificar se o argumento --use-service-account-credentials está definido como true (automatizado) |
N1 | Aprovado |
| 1.3.4 | Verificar se o argumento --service-account-private-key-file está definido conforme apropriado (automatizado) |
N1 | Aprovado |
| 1.3.5 | Verificar se o argumento --root-ca-file está definido conforme apropriado (automatizado) |
N1 | Aprovado |
| 1.3.6 | Verificar se o argumento RotateKubeletServerCertificate está definido como true (automatizado) |
N2 | Aprovado |
| 1.3.7 | Verificar se o argumento --bind-address está definido como 127.0.0.1 (automatizado) |
N1 | Reprovado |
| 1.4 | Programador | ||
| 1.4.1 | Verificar se o argumento --profiling está definido como false (automatizado) |
N1 | Aprovado |
| 1.4.2 | Verificar se o argumento --bind-address está definido como 127.0.0.1 (automatizado) |
N1 | Reprovado |
Comparativos de mercado de auditoria
Instruções específicas para a auditoria de cada recomendação estão disponíveis como parte do comparativo de mercado CIS correspondente. No entanto, convém automatizar algumas dessas verificações para simplificar a verificação desses controles no seu ambiente. A ferramenta a seguir pode ajudar com isso.
Auditoria automatizada do CIS Benchmark do Kubernetes
É possível usar uma ferramenta de código aberto kube-bench para testar a configuração do cluster em relação ao comparativo de mercado do Kubernetes do CIS.
Especifique a versão apropriada. Por exemplo:
kube-bench --benchmark BENCHMARK_VERSION
Substitua BENCHMARK_VERSION pela versão do comparativo de mercado do CIS Kubernetes
que você está usando para avaliar o cluster.
Para executar seções específicas do comparativo de mercado do CIS, como master, node ou etcd, use o comando run --targets. Exemplo:
kube-bench run --targets master,node
Para mais informações, consulte a documentação do kube-bench sobre execução do kube-bench e comandos e flags.