Benchmarks CIS
Este documento apresenta o CIS Kubernetes Benchmark. Ele também explica:
- Como auditar sua conformidade com o benchmark
- O que o GKE no Azure configura quando você não pode implementar uma recomendação sozinho.
Usando os benchmarks CIS
O Centro de Segurança da Internet (CIS) publica benchmarks para recomendações de melhores práticas de segurança. O CIS Kubernetes Benchmark fornece um conjunto de recomendações para configurar o Kubernetes a fim de oferecer suporte a uma postura de segurança robusta. O benchmark está vinculado a uma versão específica do Kubernetes. O CIS Kubernetes Benchmark foi desenvolvido para a distribuição de código aberto do Kubernetes e tem como objetivo ser o mais universalmente aplicável possível em todas as distribuições.
Versões
Observe que os números de versão para diferentes Benchmarks podem não ser os mesmos.
Este documento se refere a estas versões:
Versão Anthos | Versão do Kubernetes | Versão de benchmark do CIS Kubernetes |
---|---|---|
1.14.0 | 1.25.3 | 1,23 |
Benchmark do Kubernetes do CIS
Acessando o Benchmark
O CIS Kubernetes Benchmark está disponível no site do CIS .
Níveis de recomendação
No CIS Kubernetes Benchmark, há dois níveis de recomendações.
Nível | Descrição |
---|---|
Nível 1 | As recomendações pretendem: |
Nível 2 | Amplia o perfil de Nível 1. As recomendações apresentam uma ou mais das seguintes características: |
Status de avaliação
Um status de avaliação é incluído para cada recomendação. O status de avaliação indica se a recomendação em questão pode ser automatizada ou requer etapas manuais para implementação. Ambos os status são igualmente importantes e são determinados e suportados conforme definido abaixo:
Pontuação | Descrição |
---|---|
Automatizado | Representa recomendações para as quais a avaliação de um controle técnico pode ser totalmente automatizada e validada para um estado de aprovação/reprovação. As recomendações incluirão as informações necessárias para implementar a automação. |
Manual | Representa recomendações para as quais a avaliação de um controle técnico não pode ser totalmente automatizada e requer todas ou algumas etapas manuais para validar se o estado configurado está conforme o esperado. O estado esperado pode variar dependendo do ambiente. |
Avaliação no GKE no Azure
Usamos os seguintes valores para especificar o status das Recomendações do Kubernetes no GKE no Azure:
Status | Descrição |
---|---|
Passar | Está em conformidade com uma recomendação de referência. |
Falhar | Não está em conformidade com uma Recomendação de Referência. |
Controle Equivalente | Não está em conformidade com os termos exatos da Recomendação de Benchmark, mas existem outros mecanismos no GKE no Azure para fornecer controles de segurança equivalentes. |
Depende do ambiente | O GKE no Azure não configura itens relacionados a esta Recomendação. A configuração do usuário determina se o ambiente dele está em conformidade com uma Recomendação de Benchmark. |
Status do GKE no Azure
Ao criar um novo cluster com a versão especificada , veja como ele funcionará em relação ao CIS Kubernetes Benchmark.
Status do GKE em clusters do Azure:
# | 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 | Certifique-se de que as permissões do arquivo de especificação do pod do servidor da API estejam definidas como 644 ou mais restritivas (automatizado) | L1 | Passar |
1.1.2 | Certifique-se de que a propriedade do arquivo de especificação do pod do servidor de API esteja definida como root:root (automatizado) | L1 | Passar |
1.1.3 | Certifique-se de que as permissões do arquivo de especificação do pod do gerenciador do controlador estejam definidas como 644 ou mais restritivas (automatizado) | L1 | Passar |
1.1.4 | Certifique-se de que a propriedade do arquivo de especificação do pod do gerenciador do controlador esteja definida como root:root (automatizado) | L1 | Passar |
1.1.5 | Certifique-se de que as permissões do arquivo de especificação do pod do planejador estejam definidas como 644 ou mais restritivas (automatizado) | L1 | Passar |
1.1.6 | Certifique-se de que a propriedade do arquivo de especificação do pod do planejador esteja definida como root:root (automatizado) | L1 | Passar |
1.1.7 | Certifique-se de que as permissões do arquivo de especificação do pod etcd estejam definidas como 644 ou mais restritivas (automatizado) | L1 | Passar |
1.1.8 | Certifique-se de que a propriedade do arquivo de especificação do pod etcd esteja definida como root:root (automatizado) | L1 | Passar |
1.1.9 | Certifique-se de que as permissões do arquivo da interface de rede do contêiner estejam definidas como 644 ou mais restritivas (manual) | L1 | Controle Equivalente |
1.1.10 | Certifique-se de que a propriedade do arquivo Container Network Interface esteja definida como root:root (Manual) | L1 | Controle Equivalente |
1.1.11 | Certifique-se de que as permissões do diretório de dados etcd estejam definidas como 700 ou mais restritivas (automatizado) | L1 | Controle Equivalente |
1.1.12 | Certifique-se de que a propriedade do diretório de dados etcd esteja definida como etcd:etcd (automatizado) | L1 | Controle Equivalente |
1.1.13 | Certifique-se de que as permissões do arquivo admin . conf estejam definidas como 600 ou mais restritivas (automatizado) | L1 | Controle Equivalente |
1.1.14 | Certifique-se de que a propriedade do arquivo admin . conf esteja definida como root:root (automatizado) | L1 | Controle Equivalente |
1.1.15 | Certifique-se de que as permissões do arquivo . conf do planejador estejam definidas como 644 ou mais restritivas (automatizado) | L1 | Passar |
1.1.16 | Certifique-se de que a propriedade do arquivo . conf do planejador esteja definida como root:root (automatizado) | L1 | Passar |
1.1.17 | Certifique-se de que as permissões do arquivo controller-manager . conf estejam definidas como 644 ou mais restritivas (automatizado) | L1 | Passar |
1.1.18 | Certifique-se de que a propriedade do arquivo controller-manager . conf esteja definida como root:root (automatizado) | L1 | Passar |
1.1.19 | Certifique-se de que o diretório PKI do Kubernetes e a propriedade do arquivo estejam definidos como root:root (automatizado) | L1 | Passar |
1.1.20 | Certifique-se de que as permissões do arquivo de certificado PKI do Kubernetes estejam definidas como 644 ou mais restritivas (Manual) | L1 | Passar |
1.1.21 | Certifique-se de que as permissões do arquivo de chave PKI do Kubernetes estejam definidas como 600 (Manual) | L1 | Passar |
1.2 | Servidor API | ||
1.2.1 | Certifique-se de que o argumento --anonymous-auth esteja definido como falso (Manual) | L1 | Passar |
1.2.2 | Certifique-se de que o parâmetro --token-auth-file não esteja definido (automatizado) | L1 | Passar |
1.2.3 | Certifique-se de que -- não esteja definido (automatizado) | L1 | Passar |
1.2.4 | Certifique-se de que o argumento --kubelet-https esteja definido como verdadeiro (automatizado) | L1 | Passar |
1.2.5 | Certifique-se de que os argumentos --kubelet-client-certificate e --kubelet-client-key estejam definidos conforme apropriado (automatizado) | L1 | Passar |
1.2.6 | Certifique-se de que o argumento --kubelet-certificate-authority esteja definido como apropriado (automatizado) | L1 | Passar |
1.2.7 | Certifique-se de que o argumento --authorization-mode não esteja definido como AlwaysAllow (Automatizado) | L1 | Passar |
1.2.8 | Certifique-se de que o argumento --authorization-mode inclua o Node (Automatizado) | L1 | Passar |
1.2.9 | Certifique-se de que o argumento --authorization-mode inclua RBAC (Automatizado) | L1 | Passar |
1.2.10 | Certifique-se de que o plugin de controle de admissão EventRateLimit esteja definido (Manual) | L1 | Avisar |
1.2.11 | Certifique-se de que o plugin de controle de admissão AlwaysAdmit não esteja definido (Automatizado) | L1 | Passar |
1.2.12 | Certifique-se de que o plugin de controle de admissão AlwaysPullImages esteja definido (Manual) | L1 | Avisar |
1.2.13 | Certifique-se de que o plugin de controle de admissão SecurityContextDeny esteja definido se PodSecurityPolicy não for usado (Manual) | L1 | Controle Equivalente |
1.2.14 | Certifique-se de que o plugin de controle de admissão ServiceAccount esteja definido como (Automatizado) | L1 | Passar |
1.2.15 | Certifique-se de que o plugin de controle de admissão NamespaceLifecycle esteja definido como (Automatizado) | L1 | Passar |
1.2.16 | Certifique-se de que o plugin de controle de admissão NodeRestriction esteja definido como (Automatizado) | L1 | Passar |
1.2.17 | Certifique-se de que o argumento --secure-port não esteja definido como 0 (automatizado) | L1 | Passar |
1.2.18 | Certifique-se de que o argumento --profiling esteja definido como falso (automatizado) | L1 | Passar |
1.2.19 | Certifique-se de que o argumento --audit-log-path esteja definido (automatizado) | L1 | Controle Equivalente |
1.2.20 | Certifique-se de que o argumento --audit-log-maxage esteja definido como 30 ou conforme apropriado (automatizado) | L1 | Controle Equivalente |
1.2.21 | Certifique-se de que o argumento --audit-log-maxbackup esteja definido como 10 ou conforme apropriado (automatizado) | L1 | Controle Equivalente |
1.2.22 | Certifique-se de que o argumento --audit-log-maxsize esteja definido como 100 ou conforme apropriado (automatizado) | L1 | Controle Equivalente |
1.2.23 | Certifique-se de que o argumento --request-timeout esteja definido como apropriado (Manual) | L1 | Passar |
1.2.24 | Certifique-se de que o argumento --service-account-lookup esteja definido como verdadeiro (automatizado) | L1 | Passar |
1.2.25 | Certifique-se de que o argumento --service-account-key-file esteja definido como apropriado (automatizado) | L1 | Passar |
1.2.26 | Certifique-se de que os argumentos --etcd-certfile e --etcd-keyfile estejam definidos conforme apropriado (automatizado) | L1 | Passar |
1.2.27 | Certifique-se de que os argumentos --tls-cert-file e --tls-private-key-file estejam definidos conforme apropriado (automatizado) | L1 | Passar |
1.2.28 | Certifique-se de que o argumento --client-ca-file esteja definido como apropriado (automatizado) | L1 | Passar |
1.2.29 | Certifique-se de que o argumento --etcd-cafile esteja definido como apropriado (automatizado) | L1 | Passar |
1.2.30 | Certifique-se de que o argumento --encryption-provider-config esteja definido conforme apropriado (Manual) | L1 | Passar |
1.2.31 | Garantir que os provedores de criptografia estejam configurados adequadamente (Manual) | L1 | Passar |
1.2.32 | Garantir que o servidor de API utilize apenas cifras criptográficas fortes (manual) | L1 | Passar |
1.3 | Gerente de Controladoria | ||
1.3.1 | Certifique-se de que o argumento --terminated-pod-gc-threshold esteja definido como apropriado (Manual) | L1 | Passar |
1.3.2 | Certifique-se de que o argumento --profiling esteja definido como falso (automatizado) | L1 | Passar |
1.3.3 | Certifique-se de que o argumento --use-service-account-credentials esteja definido como verdadeiro (automatizado) | L1 | Passar |
1.3.4 | Certifique-se de que o argumento --service-account-private-key-file esteja definido como apropriado (automatizado) | L1 | Passar |
1.3.5 | Certifique-se de que o argumento --root-ca-file esteja definido como apropriado (automatizado) | L1 | Passar |
1.3.6 | Certifique-se de que o argumento RotateKubeletServerCertificate esteja definido como verdadeiro (automatizado) | L2 | Passar |
1.3.7 | Certifique-se de que o argumento --bind-address esteja definido como 127.0.0.1 (Automatizado) | L1 | Passar |
1.4 | Agendador | ||
1.4.1 | Certifique-se de que o argumento --profiling esteja definido como falso (automatizado) | L1 | Passar |
1.4.2 | Certifique-se de que o argumento --bind-address esteja definido como 127.0.0.1 (Automatizado) | L1 | Passar |
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 definidos conforme apropriado (automatizado) | L1 | Passar |
2.2 | Certifique-se de que o argumento --client-cert-auth esteja definido como verdadeiro (automatizado) | L1 | Passar |
2.3 | Certifique-se de que o argumento --auto-tls não esteja definido como verdadeiro (automatizado) | L1 | Passar |
2.4 | Certifique-se de que os argumentos --peer-cert-file e --peer-key-file estejam definidos conforme apropriado (automatizado) | L1 | Passar |
2,5 | Certifique-se de que o argumento --peer-client-cert-auth esteja definido como verdadeiro (automatizado) | L1 | Passar |
2.6 | Certifique-se de que o argumento --peer-auto-tls não esteja definido como verdadeiro (automatizado) | L1 | Passar |
2.7 | Garantir que uma Autoridade de Certificação exclusiva seja usada para etcd (Manual) | L2 | Passar |
3 | Configuração do Plano de Controle | ||
3.1 | Autenticação e Autorização | ||
3.1.1 | A autenticação de certificado de cliente não deve ser usada para usuários (Manual) | L2 | Controle Equivalente |
3.2 | Registro | ||
3.2.1 | Garantir que uma política de auditoria mínima seja criada (Manual) | L1 | Passar |
3.2.2 | Garantir que a política de auditoria abranja as principais preocupações de segurança (Manual) | L2 | Controle Equivalente |
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 do kubelet estejam definidas como 644 ou mais restritivas (automatizado) | L1 | Passar |
4.1.2 | Certifique-se de que a propriedade do arquivo de serviço kubelet esteja definida como root:root (automatizado) | L1 | Passar |
4.1.3 | Se o arquivo proxy kubeconfig existir, certifique-se de que as permissões estejam definidas como 644 ou mais restritivas (Manual) | L1 | Passar |
4.1.4 | Se o arquivo proxy kubeconfig existir, certifique-se de que a propriedade esteja definida como root:root (Manual) | L1 | Passar |
4.1.5 | Certifique-se de que as permissões do arquivo --kubeconfig kubelet . conf estejam definidas como 644 ou mais restritivas (automatizado) | L1 | Passar |
4.1.6 | Certifique-se de que a propriedade do arquivo --kubeconfig kubelet . conf esteja definida como root:root (automatizado) | L1 | Passar |
4.1.7 | Certifique-se de que as permissões de arquivo das autoridades de certificação estejam definidas como 644 ou mais restritivas (Manual) | L1 | Passar |
4.1.8 | Certifique-se de que a propriedade do arquivo das autoridades de certificação do cliente esteja definida como root:root (Manual) | L1 | Passar |
4.1.9 | Certifique-se de que o arquivo de configuração kubelet --config tenha permissões definidas como 644 ou mais restritivas (automatizado) | L1 | Passar |
4.1.10 | Certifique-se de que a propriedade do arquivo de configuração kubelet --config esteja definida como root:root (automatizado) | L1 | Passar |
4.2 | Kubelet | ||
4.2.1 | Certifique-se de que o argumento --anonymous-auth esteja definido como falso (automatizado) | L1 | Passar |
4.2.2 | Certifique-se de que o argumento --authorization-mode não esteja definido como AlwaysAllow (Automatizado) | L1 | Passar |
4.2.3 | Certifique-se de que o argumento --client-ca-file esteja definido como apropriado (automatizado) | L1 | Passar |
4.2.4 | Certifique-se de que o argumento --read-only-port esteja definido como 0 (Manual) | L1 | Falhar |
4.2.5 | Certifique-se de que o argumento --streaming-connection-idle-timeout não esteja definido como 0 (Manual) | L1 | Passar |
4.2.6 | Certifique-se de que o argumento --protect-kernel-defaults esteja definido como verdadeiro (automatizado) | L1 | Falhar |
4.2.7 | Certifique-se de que o argumento --make-iptables-util-chains esteja definido como verdadeiro (automatizado) | L1 | Passar |
4.2.8 | Certifique-se de que o argumento --hostname-override não esteja definido (Manual) | L1 | Passar |
4.2.9 | Certifique-se de que o argumento --event-qps esteja definido como 0 ou um nível que garanta a captura de eventos apropriada (Manual) | L2 | Avisar |
4.2.10 | Certifique-se de que os argumentos --tls-cert-file e --tls-private-key-file estejam definidos conforme apropriado (Manual) | L1 | Controle Equivalente |
4.2.11 | Certifique-se de que o argumento --rotate-certificates não esteja definido como falso (automatizado) | L1 | Passar |
4.2.12 | Verifique se o argumento RotateKubeletServerCertificate está definido como verdadeiro (Manual) | L1 | Passar |
4.2.13 | Garanta que o Kubelet utilize apenas cifras criptográficas fortes (manual) | L1 | Passar |
Descrições de falhas e controles equivalentes para o GKE no cluster de administração do Azure:
# | Recomendação | Nível | Status | Valor | Justificação |
---|---|---|---|---|---|
1.1.9 | Certifique-se de que as permissões do arquivo da interface de rede do contêiner estejam definidas como 644 ou mais restritivas (manual) | L1 | Controle Equivalente | 755 | O caminho dos clusters do Anthos na Interface de Rede de Contêineres do Azure é /opt/cni/bin e sua permissão é definida como 755 para a operação normal do cluster. |
1.1.10 | Certifique-se de que a propriedade do arquivo Container Network Interface esteja definida como root:root (Manual) | L1 | Controle Equivalente | root:root | O caminho dos clusters do Anthos na Interface de Rede de Contêineres do Azure é /opt/cni/bin e sua propriedade é definida como root:root . |
1.1.11 | Certifique-se de que as permissões do diretório de dados etcd estejam definidas como 700 ou mais restritivas (automatizado) | L1 | Controle Equivalente | 755 | O diretório de dados do etcd /opt/data/var/lib/etcd tem as permissões padrão 755 , mas seus subdiretórios são 700 . |
1.1.12 | Certifique-se de que a propriedade do diretório de dados etcd esteja definida como etcd:etcd (automatizado) | L1 | Controle Equivalente | root:root | O contêiner etcd é executado como root e o diretório de dados etcd é de propriedade de root:root . |
1.1.13 | Certifique-se de que as permissões do arquivo admin . conf estejam definidas como 600 ou mais restritivas (automatizado) | L1 | Controle Equivalente | não definido | Os clusters do Anthos no Azure não oferecem suporte ao kubeadm. |
1.1.14 | Certifique-se de que a propriedade do arquivo admin . conf esteja definida como root:root (automatizado) | L1 | Controle Equivalente | não definido | Os clusters do Anthos no Azure não oferecem suporte ao kubeadm. |
1.2.10 | Certifique-se de que o plugin de controle de admissão EventRateLimit esteja definido (Manual) | L1 | Avisar | não definido | Os clusters do Anthos no Azure não oferecem suporte ao controlador de admissão Event Rate Limit, pois é um recurso do Kubernetes Alpha. |
1.2.12 | Certifique-se de que o plugin de controle de admissão AlwaysPullImages esteja definido (Manual) | L1 | Avisar | não definido | O controlador de admissão AlwaysPullImages fornece alguma proteção para imagens de registro privadas em clusters multilocatários não cooperativos, mas torna os registros de contêineres um ponto único de falha para a criação de novos pods em todo o cluster. O GKE no Azure não habilita o controlador de admissão AlwaysPullImages, o que deixa a cargo dos administradores do cluster implementar a política de admissão para fazer essa compensação por conta própria. |
1.2.13 | Certifique-se de que o plugin de controle de admissão SecurityContextDeny esteja definido se PodSecurityPolicy não for usado (Manual) | L1 | Controle Equivalente | não definido | Os clusters do Anthos no Azure definem políticas de segurança padrão. Os clientes podem definir opções relacionadas à segurança com um contexto de segurança. Saiba mais em Visão geral de segurança . |
1.2.19 | Certifique-se de que o argumento --audit-log-path esteja definido (automatizado) | L1 | Controle Equivalente | não definido | Os clusters do Anthos no Azure oferecem a opção de registro de auditoria na nuvem. Saiba mais sobre Registros de Auditoria na Nuvem . |
1.2.20 | Certifique-se de que o argumento --audit-log-maxage esteja definido como 30 ou conforme apropriado (automatizado) | L1 | Controle Equivalente | não definido | Os clusters do Anthos no Azure oferecem a opção de registro de auditoria na nuvem. Saiba mais sobre Registros de Auditoria na Nuvem . |
1.2.21 | Certifique-se de que o argumento --audit-log-maxbackup esteja definido como 10 ou conforme apropriado (automatizado) | L1 | Controle Equivalente | não definido | Os clusters do Anthos no Azure oferecem a opção de registro de auditoria na nuvem. Saiba mais sobre Registros de Auditoria na Nuvem . |
1.2.22 | Certifique-se de que o argumento --audit-log-maxsize esteja definido como 100 ou conforme apropriado (automatizado) | L1 | Controle Equivalente | não definido | Os clusters do Anthos no Azure oferecem a opção de registro de auditoria na nuvem. Saiba mais sobre Registros de Auditoria na Nuvem . |
3.1.1 | A autenticação de certificado de cliente não deve ser usada para usuários (Manual) | L2 | Controle Equivalente | Os clusters do Anthos no Azure oferecem suporte ao OIDC como um dos mecanismos de autenticação para conexão ao cluster. Saiba mais em Conectar e autenticar no seu cluster . | |
3.2.2 | Garantir que a política de auditoria abranja as principais preocupações de segurança (Manual) | L2 | Controle Equivalente | não definido | Os clusters do Anthos no Azure oferecem a opção de registro de auditoria na nuvem. Saiba mais sobre Registros de Auditoria na Nuvem . |
4.2.4 | Certifique-se de que o argumento --read-only-port esteja definido como 0 (Manual) | L1 | Falhar | 10255 | Os clusters do Anthos no Azure atualmente definem o argumento --read-only-port como 10255 para coletar métricas do kubelet. |
4.2.6 | Certifique-se de que o argumento --protect-kernel-defaults esteja definido como verdadeiro (automatizado) | L1 | Falhar | false | Os clusters do Anthos no Azure permitem que o Kubelet defina as configurações de kernel necessárias. |
4.2.9 | Certifique-se de que o argumento --event-qps esteja definido como 0 ou um nível que garanta a captura de eventos apropriada (Manual) | L2 | Avisar | não definido | Eventos são objetos do Kubernetes armazenados no etcd. Para evitar sobrecarregar o etcd, eles são mantidos por apenas uma hora e não são um mecanismo de auditoria de segurança apropriado. Permitir eventos ilimitados, como sugerido neste controle, expõe o cluster a riscos desnecessários de negação de serviço (DoS) e contradiz a recomendação de usar EventRateLimits de admissão. Eventos relevantes para a segurança que precisam de armazenamento permanente devem ser enviados para logs. |
4.2.10 | Certifique-se de que os argumentos --tls-cert-file e --tls-private-key-file estejam definidos conforme apropriado (Manual) | L1 | Controle Equivalente | não definido | Os clusters do Anthos no Azure gerenciam o TLS do servidor Kubelet usando o sinalizador serverTLSBootstrap . |
Como auditar benchmarks
Instruções específicas para auditar cada recomendação estão disponíveis como parte do CIS Benchmark relevante. No entanto, você pode querer automatizar algumas dessas verificações para simplificar a verificação desses controles em seu ambiente. As ferramentas listadas abaixo podem ajudar com isso.
Auditoria automatizada do CIS Kubernetes Benchmark
Você pode usar uma ferramenta de código aberto kube-bench
para testar sua configuração de cluster em relação ao CIS Kubernetes Benchmark.
Certifique-se de especificar a versão apropriada, por exemplo,
kube-bench node --benchmark cis-1.23