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:

  • seja prático e prudente;
  • proporcionar um benefício de segurança claro; e
  • não inibir a utilidade da tecnologia além dos meios aceitáveis.
  • Nível 2

    Amplia o perfil de Nível 1.

    As recomendações apresentam uma ou mais das seguintes características:

  • são destinados a ambientes ou casos de uso onde a segurança é primordial;
  • atua como medida de defesa em profundidade; ou
  • pode inibir negativamente a utilidade ou o desempenho da tecnologia.
  • 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