Este documento apresenta a norma CIS Kubernetes, explica como auditar a sua conformidade com a norma e explica o que o Google Distributed Cloud (GDC) air-gapped configura quando não consegue implementar uma recomendação por si próprio.
Acerca das referências do CIS
O Centro para a Segurança da Internet (CIS) publica referências para recomendações de segurança de práticas recomendadas. O CIS Kubernetes Benchmark fornece um conjunto de recomendações para configurar o Kubernetes de modo a suportar uma postura de segurança forte. A referência está associada a uma versão específica do Kubernetes. A referência do CIS Kubernetes foi escrita para a distribuição Kubernetes de código aberto e destina-se a ser o mais universalmente aplicável possível em todas as distribuições.
Aceda ao teste de referência
A referência do Kubernetes do CIS está disponível no Website do CIS.
Níveis de recomendações
A tabela seguinte descreve os níveis de recomendações no CIS Kubernetes Benchmark.
| Nível | Descrição |
|---|---|
| Nível 1 | As recomendações têm uma ou mais das seguintes características: |
| Nível 2 | Amplia o perfil de nível 1. As recomendações têm uma ou mais das seguintes características: |
Estado da avaliação
É incluído um estado de avaliação para cada recomendação. O estado da avaliação indica se a recomendação em questão pode ser automatizada ou requer passos manuais para implementação. Ambos os estados são igualmente importantes e são determinados e suportados conforme definido nas tabelas seguintes.
Versões
A avaliação refere-se às seguintes versões:
| Versão do GDC em bare metal | Versão do Kubernetes | Versão da referência do CIS Kubernetes |
|---|---|---|
| 1,30 | 1.30.9 | v0.10.4 |
Estado do cluster do Kubernetes isolado do GDC
| # | Recomendação | Nível | Estado |
|---|---|---|---|
| 1 | Configuração de segurança do plano de controlo | ||
| 1.1 | Ficheiros de configuração do nó do plano de controlo | ||
| 1.1.1 | Certifique-se de que as autorizações do ficheiro de especificação do agrupamento do servidor da API estão definidas como 600 ou mais restritivas (automáticas) |
L1 | Passar |
| 1.1.2 | Certifique-se de que a propriedade do ficheiro de especificação do pod do servidor da API está definida como root:root (Automático) |
L1 | Passar |
| 1.1.3 | Certifique-se de que as autorizações do ficheiro de especificação do agrupamento do gestor do controlador estão definidas como 600 ou mais restritivas (automáticas) |
L1 | Passar |
| 1.1.4 | Certifique-se de que a propriedade do ficheiro de especificação do pod do gestor do controlador está definida como root:root (Automático) |
L1 | Passar |
| 1.1.5 | Certifique-se de que as autorizações do ficheiro de especificação do agrupamento do programador estão definidas como 600 ou mais restritivas (automatizadas) |
L1 | Passar |
| 1.1.6 | Certifique-se de que a propriedade do ficheiro de especificação do pod do programador está definida como root:root (Automático) |
L1 | Passar |
| 1.1.7 | Certifique-se de que as autorizações do ficheiro de especificação do agrupamento etcd estão definidas como 600 ou mais restritivas (automatizadas) |
L1 | Passar |
| 1.1.8 | Certifique-se de que a propriedade do ficheiro de especificação do pod etcd está definida como root:root (automatizada) |
L1 | Passar |
| 1.1.9 | Certifique-se de que as autorizações do ficheiro da interface de rede do contentor estão definidas como 600 ou mais restritivas (manual) |
L1 | Aviso |
| 1.1.10 | Certifique-se de que a propriedade do ficheiro da interface de rede do contentor está definida como root:root (manual) |
L1 | Aviso |
| 1.1.11 | Certifique-se de que as autorizações do diretório de dados do etcd estão definidas como 700 ou mais restritivas (automáticas) |
L1 | Passar |
| 1.1.12 | Certifique-se de que a propriedade do diretório de dados do etcd está definida como etcd:etcd (Automático) |
L1 | Falha |
| 1.1.13 | Certifique-se de que as autorizações de ficheiros de credenciais administrativas predefinidas estão definidas como 600 (Automático) |
L1 | Passar |
| 1.1.14 | Certifique-se de que a propriedade do ficheiro de credenciais administrativas predefinido está definida como root:root (Automático) |
L1 | Passar |
| 1.1.15 | Certifique-se de que as autorizações de ficheiros scheduler.conf estão definidas como 600 ou mais restritivas (automáticas) |
L1 | Passar |
| 1.1.16 | Certifique-se de que a propriedade do ficheiro scheduler.conf está definida como root:root (Automático) |
L1 | Falha |
| 1.1.17 | Certifique-se de que as autorizações de ficheiros controller-manager.conf estão definidas como 600 ou mais restritivas (automáticas) |
L1 | Passar |
| 1.1.18 | Certifique-se de que a propriedade do ficheiro controller-manager.conf está definida como root:root (Automático) |
L1 | Falha |
| 1.1.19 | Certifique-se de que o diretório PKI do Kubernetes e a propriedade dos ficheiros estão definidos como root:root (Automático) |
L1 | Falha |
| 1.1.20 | Certifique-se de que as autorizações do ficheiro de certificado PKI do Kubernetes estão definidas como 600 ou mais restritivas (manual) |
L1 | Aviso |
| 1.1.21 | Certifique-se de que as autorizações do ficheiro de chave PKI do Kubernetes estão definidas como 600 (Manual) |
L1 | Aviso |
| 1.2 | Servidor de API | ||
| 1.2.1 | Certifique-se de que o argumento --anonymous-auth está definido como false (Manual) |
L1 | Aviso |
| 1.2.2 | Certifique-se de que o parâmetro --token-auth-file não está definido (Automated) |
L1 | Passar |
| 1.2.3 | Certifique-se de que o --DenyServiceExternalIPs está definido (manual) |
L1 | Aviso |
| 1.2.4 | Certifique-se de que os argumentos --kubelet-client-certificate e --kubelet-client-key estão definidos conforme adequado (automatizados) |
L1 | Passar |
| 1.2.5 | Certifique-se de que o argumento --kubelet-certificate-authority está definido conforme adequado (Automático) |
L1 | Passar |
| 1.2.6 | Certifique-se de que o argumento --authorization-mode não está definido como AlwaysAllow (Automated) |
L1 | Passar |
| 1.2.7 | Certifique-se de que o argumento --authorization-mode inclui Node (Automated) |
L1 | Passar |
| 1.2.8 | Certifique-se de que o argumento --authorization-mode inclui RBAC (automatizado) |
L1 | Passar |
| 1.2.9 | Certifique-se de que o plug-in de controlo de admissão EventRateLimit está definido como (Manual) |
L1 | Aviso |
| 1.2.10 | Certifique-se de que o plug-in de controlo de admissão AlwaysAdmit não está definido como (Automático) |
L1 | Passar |
| 1.2.11 | Certifique-se de que o plug-in de controlo de admissão AlwaysPullImages está definido como (Manual) |
L1 | Aviso |
| 1.2.12 | Certifique-se de que o plug-in de controlo de admissão ServiceAccount está definido como (Automático) |
L1 | Passar |
| 1.2.13 | Certifique-se de que o plug-in de controlo de admissão NamespaceLifecycle está definido como (Automático) |
L1 | Passar |
| 1.2.14 | Certifique-se de que o plug-in de controlo de admissão NodeRestriction está definido como (Automático) |
L1 | Passar |
| 1.2.15 | Certifique-se de que o argumento --profiling está definido como false (Automático) |
L1 | Passar |
| 1.2.16 | Certifique-se de que o argumento --audit-log-path está definido (Automated) |
L1 | Passar |
| 1.2.17 | Certifique-se de que o argumento --audit-log-maxage está definido como 30 ou conforme adequado (Automated) |
L1 | Passar |
| 1.2.18 | Certifique-se de que o argumento --audit-log-maxbackup está definido como 10 ou conforme adequado (Automated) |
L1 | Passar |
| 1.2.19 | Certifique-se de que o argumento --audit-log-maxsize está definido como 100 ou conforme adequado (Automated) |
L1 | Passar |
| 1.2.20 | Certifique-se de que o argumento --request-timeout está definido conforme adequado (Manual) |
L1 | Aviso |
| 1.2.21 | Certifique-se de que o argumento --service-account-lookup está definido como true (Automático) |
L1 | Passar |
| 1.2.22 | Certifique-se de que o argumento --service-account-key-file está definido conforme adequado (Automático) |
L1 | Passar |
| 1.2.23 | Certifique-se de que os argumentos --etcd-certfile e --etcd-keyfile estão definidos conforme adequado (automatizados) |
L1 | Passar |
| 1.2.24 | Certifique-se de que os argumentos --tls-cert-file e --tls-private-key-file estão definidos conforme adequado (automatizados) |
L1 | Passar |
| 1.2.25 | Certifique-se de que o argumento --client-ca-file está definido conforme adequado (Automático) |
L1 | Passar |
| 1.2.26 | Certifique-se de que o argumento --etcd-cafile está definido conforme adequado (Automático) |
L1 | Passar |
| 1.2.27 | Certifique-se de que o argumento --encryption-provider-config está definido conforme adequado (Manual) |
L1 | Passar |
| 1.2.28 | Certifique-se de que os fornecedores de encriptação estão configurados adequadamente (manual) | L1 | Passar |
| 1.2.29 | Certifique-se de que o servidor da API só usa cifras criptográficas fortes (manuais) | L1 | Passar |
| 1.3 | Gestor de controladores | ||
| 1.3.1 | Certifique-se de que o argumento --terminated-pod-gc-threshold está definido conforme adequado (Manual) |
L1 | Passar |
| 1.3.2 | Certifique-se de que a opção --profiling argument está definida como false (Automático) |
L1 | Passar |
| 1.3.3 | Certifique-se de que o argumento --use-service-account-credentials está definido como true (Automático) |
L1 | Passar |
| 1.3.4 | Certifique-se de que o argumento --service-account-private-key-file está definido conforme adequado (Automático) |
L1 | Passar |
| 1.3.5 | Certifique-se de que o argumento --root-ca-file está definido conforme adequado (Automático) |
L1 | Passar |
| 1.3.6 | Certifique-se de que o argumento RotateKubeletServerCertificate está definido como true (Automático) |
L2 | Passar |
| 1.3.7 | Certifique-se de que o argumento --bind-address está definido como 127.0.0.1 (Automático) |
L1 | Falha |
| 1.4 | Agendador | ||
| 1.4.1 | Certifique-se de que o argumento --profiling está definido como false (Automático) |
L1 | Passar |
| 1.4.2 | Certifique-se de que o argumento --bind-address está definido como 127.0.0.1 (Automático) |
L1 | Falha |
Referências de auditoria
Estão disponíveis instruções específicas para auditar cada recomendação como parte da referência CIS relevante. No entanto, pode querer automatizar algumas destas verificações para simplificar a validação destes controlos no seu ambiente. A seguinte ferramenta pode ajudar com esta situação.
Auditoria automática da referência CIS Kubernetes
Pode usar uma ferramenta de código aberto kube-bench para testar a configuração do cluster em relação à CIS Kubernetes Benchmark.
Certifique-se de que especifica a versão adequada. Por exemplo:
kube-bench --benchmark BENCHMARK_VERSION
Substitua BENCHMARK_VERSION pela versão da referência do CIS Kubernetes que está a usar para avaliar o seu cluster.
Para executar secções específicas da referência CIS, como master, node ou etcd, use o comando run --targets. Por exemplo:
kube-bench run --targets master,node
Para mais informações, consulte a documentação do kube-bench sobre como executar o kube-bench e comandos e flags.