Referências da CIS

Este documento apresenta a norma CIS Kubernetes Benchmark. Também explica:

  • Como auditar a sua conformidade com o valor de referência
  • O que o GKE no Azure configura quando não pode implementar uma recomendação sozinho.

Usar os testes de referência do CIS

O Centro para a Segurança da Internet (CIS) publica referências para recomendações de segurança de práticas recomendadas. A referência do CIS Kubernetes 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.

Versões

Tenha em atenção que os números das versões de diferentes testes de referência podem não ser os mesmos.

Este documento refere-se a estas versões:

Versão do Anthos Versão do Kubernetes Versão da referência do CIS Kubernetes
1.14.0 1.25.3 1.23

Referência do Kubernetes do CEI

Aceder ao teste de referência

A referência do CIS Kubernetes está disponível no Website do CIS.

Níveis de recomendações

Na referência do CIS Kubernetes, existem dois níveis de recomendações.

Nível Descrição
Nível 1

As recomendações destinam-se a:

  • Ser prático e prudente;
  • Oferecer uma vantagem de segurança clara; e
  • Não inibir a utilidade da tecnologia para além dos meios aceitáveis.
  • Nível 2

    Amplia o perfil de nível 1.

    As recomendações têm uma ou mais das seguintes características:

  • Se destinam a ambientes ou exemplos de utilização em que a segurança é fundamental;
  • Atua como medida de defesa em profundidade; ou
  • podem inibir negativamente a utilidade ou o desempenho da tecnologia.
  • 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 abaixo:

    Pontuação Descrição
    Automático Representa recomendações para as quais a avaliação de um controlo técnico pode ser totalmente automatizada e validada para um estado de aprovação/reprovação. As recomendações incluem as informações necessárias para implementar a automatização.
    Manual Representa recomendações para as quais a avaliação de um controlo técnico não pode ser totalmente automatizada e requer todos ou alguns passos manuais para validar se o estado configurado está definido conforme esperado. O estado esperado pode variar consoante o ambiente.

    Avaliação no GKE no Azure

    Usamos os seguintes valores para especificar o estado das recomendações do Kubernetes no GKE no Azure:

    Estado Descrição
    Passar Está em conformidade com uma recomendação de referência.
    Falha Não cumpre uma recomendação de referência.
    Controlo equivalente Não está em conformidade com os termos exatos na recomendação de referência, mas existem outros mecanismos no GKE no Azure para fornecer controlos de segurança equivalentes.
    Depende do ambiente O GKE no Azure não configura itens relacionados com esta recomendação. A configuração do utilizador determina se o respetivo ambiente está em conformidade com uma recomendação de referência.

    Estado no GKE no Azure

    Quando criar um novo cluster com a versão especificada, veja o respetivo desempenho em comparação com o CIS Kubernetes Benchmark.

    Estado dos clusters do GKE no Azure:

    # 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 644 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 pod do gestor do controlador estão definidas como 644 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 644 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 644 ou mais restritivas (automáticas) 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 de ficheiros da interface de rede do contentor estão definidas como 644 ou mais restritivas (manual) L1 Controlo equivalente
    1.1.10 Certifique-se de que a propriedade do ficheiro da interface de rede do contentor está definida como root:root (manual) L1 Controlo equivalente
    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 Controlo equivalente
    1.1.12 Certifique-se de que a propriedade do diretório de dados do etcd está definida como etcd:etcd (Automático) L1 Controlo equivalente
    1.1.13 Certifique-se de que as autorizações do ficheiro.conf estão definidas como 600 ou mais restritivas (automáticas) L1 Controlo equivalente
    1.1.14 Certifique-se de que a propriedade do ficheiro.conf está definida como root:root (Automático) L1 Controlo equivalente
    1.1.15 Certifique-se de que as autorizações do ficheiro.conf do programador estão definidas como 644 ou mais restritivas (automáticas) L1 Passar
    1.1.16 Certifique-se de que a propriedade do ficheiro .conf do agendador está definida como root:root (Automático) L1 Passar
    1.1.17 Certifique-se de que as autorizações do ficheiro .conf do controller-manager estão definidas como 644 ou mais restritivas (automáticas) L1 Passar
    1.1.18 Certifique-se de que a propriedade do ficheiro de configuração do controlador-gestor. está definida como root:root (Automático) L1 Passar
    1.1.19 Certifique-se de que a propriedade do ficheiro e do diretório PKI do Kubernetes está definida como root:root (Automático) L1 Passar
    1.1.20 Certifique-se de que as autorizações do ficheiro de certificado PKI do Kubernetes estão definidas como 644 ou mais restritivas (manual) L1 Passar
    1.1.21 Certifique-se de que as autorizações do ficheiro de chave PKI do Kubernetes estão definidas como 600 (Manual) L1 Passar
    1.2 Servidor de API
    1.2.1 Certifique-se de que o argumento --anonymous-auth está definido como falso (manual) L1 Passar
    1.2.2 Certifique-se de que o parâmetro --token-auth-file não está definido (automatizado) L1 Passar
    1.2.3 Certifique-se de que o parâmetro --DenyServiceExternalIPs não está definido (automático) L1 Passar
    1.2.4 Certifique-se de que o argumento --kubelet-https está definido como verdadeiro (automatizado) L1 Passar
    1.2.5 Certifique-se de que os argumentos --kubelet-client-certificate e --kubelet-client-key estão definidos conforme adequado (automatizados) L1 Passar
    1.2.6 Certifique-se de que o argumento --kubelet-certificate-authority está definido conforme adequado (Automático) L1 Passar
    1.2.7 Certifique-se de que o argumento --authorization-mode não está definido como AlwaysAllow (Automated) L1 Passar
    1.2.8 Certifique-se de que o argumento --authorization-mode inclui Node (Automated) L1 Passar
    1.2.9 Certifique-se de que o argumento --authorization-mode inclui RBAC (automatizado) L1 Passar
    1.2.10 Certifique-se de que o plug-in de controlo de admissão EventRateLimit está definido (manual) L1 Aviso
    1.2.11 Certifique-se de que o plug-in de controlo de admissão AlwaysAdmit não está definido (automático) L1 Passar
    1.2.12 Certifique-se de que o plug-in de controlo de admissão AlwaysPullImages está definido como (Manual) L1 Aviso
    1.2.13 Certifique-se de que o plug-in de controlo de admissão SecurityContextDeny está definido se não for usada a PodSecurityPolicy (manual) L1 Controlo equivalente
    1.2.14 Certifique-se de que o ServiceAccount do plug-in de controlo de admissão está definido (automático) L1 Passar
    1.2.15 Certifique-se de que o espaço de nomes NamespaceLifecycle do plug-in de controlo de admissão está definido (automático) L1 Passar
    1.2.16 Certifique-se de que o plug-in de controlo de admissão NodeRestriction está definido (automático) L1 Passar
    1.2.17 Certifique-se de que o argumento --secure-port não está definido como 0 (Automático) L1 Passar
    1.2.18 Certifique-se de que o argumento --profiling está definido como falso (automatizado) L1 Passar
    1.2.19 Certifique-se de que o argumento --audit-log-path está definido (Automated) L1 Controlo equivalente
    1.2.20 Certifique-se de que o argumento --audit-log-maxage está definido como 30 ou conforme adequado (Automated) L1 Controlo equivalente
    1.2.21 Certifique-se de que o argumento --audit-log-maxbackup está definido como 10 ou conforme adequado (Automated) L1 Controlo equivalente
    1.2.22 Certifique-se de que o argumento --audit-log-maxsize está definido como 100 ou conforme adequado (Automated) L1 Controlo equivalente
    1.2.23 Certifique-se de que o argumento --request-timeout está definido conforme adequado (Manual) L1 Passar
    1.2.24 Certifique-se de que o argumento --service-account-lookup está definido como verdadeiro (automatizado) L1 Passar
    1.2.25 Certifique-se de que o argumento --service-account-key-file está definido conforme adequado (Automático) L1 Passar
    1.2.26 Certifique-se de que os argumentos --etcd-certfile e --etcd-keyfile estão definidos conforme adequado (automatizados) L1 Passar
    1.2.27 Certifique-se de que os argumentos --tls-cert-file e --tls-private-key-file estão definidos conforme adequado (automatizados) L1 Passar
    1.2.28 Certifique-se de que o argumento --client-ca-file está definido conforme adequado (Automático) L1 Passar
    1.2.29 Certifique-se de que o argumento --etcd-cafile está definido conforme adequado (Automático) L1 Passar
    1.2.30 Certifique-se de que o argumento --encryption-provider-config está definido conforme adequado (Manual) L1 Passar
    1.2.31 Certifique-se de que os fornecedores de encriptação estão configurados adequadamente (manual) L1 Passar
    1.2.32 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 o argumento --profiling está definido como falso (automatizado) L1 Passar
    1.3.3 Certifique-se de que o argumento --use-service-account-credentials está definido como verdadeiro (automatizado) 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 verdadeiro (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 Passar
    1.4 Agendador
    1.4.1 Certifique-se de que o argumento --profiling está definido como falso (automatizado) L1 Passar
    1.4.2 Certifique-se de que o argumento --bind-address está definido como 127.0.0.1 (Automático) 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 estão definidos conforme adequado (automatizados) L1 Passar
    2.2 Certifique-se de que o argumento --client-cert-auth está definido como verdadeiro (automatizado) L1 Passar
    2.3 Certifique-se de que o argumento --auto-tls não está definido como verdadeiro (automatizado) L1 Passar
    2.4 Certifique-se de que os argumentos --peer-cert-file e --peer-key-file estão definidos conforme adequado (automatizados) L1 Passar
    2.5 Certifique-se de que o argumento --peer-client-cert-auth está definido como verdadeiro (automatizado) L1 Passar
    2.6 Certifique-se de que o argumento --peer-auto-tls não está definido como verdadeiro (automatizado) L1 Passar
    2.7 Certifique-se de que é usada uma autoridade de certificação exclusiva para o etcd (manual) L2 Passar
    3 Configuração do plano de controlo
    3.1 Autenticação e autorização
    3.1.1 A autenticação por certificado de cliente não deve ser usada para utilizadores (manual) L2 Controlo equivalente
    3.2 Registo
    3.2.1 Certifique-se de que é criada uma política de auditoria mínima (manual) L1 Passar
    3.2.2 Certifique-se de que a política de auditoria abrange as principais preocupações de segurança (manual) L2 Controlo equivalente
    4 Configuração de segurança do nó de trabalho
    4.1 Ficheiros de configuração do nó de trabalho
    4.1.1 Certifique-se de que as autorizações do ficheiro de serviço kubelet estão definidas como 644 ou mais restritivas (automáticas) L1 Passar
    4.1.2 Certifique-se de que a propriedade do ficheiro de serviço kubelet está definida como root:root (automatizada) L1 Passar
    4.1.3 Se existir um ficheiro kubeconfig de proxy, certifique-se de que as autorizações estão definidas como 644 ou mais restritivas (manual) L1 Passar
    4.1.4 Se existir um ficheiro kubeconfig do proxy, certifique-se de que a propriedade está definida como root:root (Manual) L1 Passar
    4.1.5 Certifique-se de que as autorizações do ficheiro --kubeconfig kubelet.conf estão definidas como 644 ou mais restritivas (automáticas) L1 Passar
    4.1.6 Certifique-se de que a propriedade do ficheiro --kubeconfig kubelet.conf está definida como root:root (automática) L1 Passar
    4.1.7 Certifique-se de que as autorizações de ficheiros das autoridades de certificação estão definidas como 644 ou mais restritivas (manual) L1 Passar
    4.1.8 Certifique-se de que a propriedade do ficheiro de autoridades de certificação do cliente está definida como root:root (Manual) L1 Passar
    4.1.9 Certifique-se de que o ficheiro de configuração do kubelet tem as autorizações definidas como 644 ou mais restritivas (automatizadas)--config L1 Passar
    4.1.10 Certifique-se de que a propriedade do ficheiro de configuração do kubelet --config está definida como root:root (automática) L1 Passar
    4.2 Kubelet
    4.2.1 Certifique-se de que o argumento --anonymous-auth está definido como falso (automatizado) L1 Passar
    4.2.2 Certifique-se de que o argumento --authorization-mode não está definido como AlwaysAllow (Automated) L1 Passar
    4.2.3 Certifique-se de que o argumento --client-ca-file está definido conforme adequado (Automático) L1 Passar
    4.2.4 Certifique-se de que o argumento --read-only-port está definido como 0 (Manual) L1 Falha
    4.2.5 Certifique-se de que o argumento --streaming-connection-idle-timeout não está definido como 0 (Manual) L1 Passar
    4.2.6 Certifique-se de que o argumento --protect-kernel-defaults está definido como verdadeiro (automatizado) L1 Falha
    4.2.7 Certifique-se de que o argumento --make-iptables-util-chains está definido como verdadeiro (automatizado) L1 Passar
    4.2.8 Certifique-se de que o argumento --hostname-override não está definido (manual) L1 Passar
    4.2.9 Certifique-se de que o argumento --event-qps está definido como 0 ou um nível que garanta a captura de eventos adequada (manual) L2 Aviso
    4.2.10 Certifique-se de que os argumentos --tls-cert-file e --tls-private-key-file estão definidos conforme adequado (manual) L1 Controlo equivalente
    4.2.11 Certifique-se de que o argumento --rotate-certificates não está definido como falso (automatizado) L1 Passar
    4.2.12 Verifique se o argumento RotateKubeletServerCertificate está definido como verdadeiro (manual) L1 Passar
    4.2.13 Certifique-se de que o Kubelet só usa cifras criptográficas fortes (manual) L1 Passar
    Descrições de falhas e controlos equivalentes para o cluster de administrador do GKE no Azure:
    # Recomendação Nível Estado Valor Justificação
    1.1.9 Certifique-se de que as autorizações de ficheiros da interface de rede do contentor estão definidas como 644 ou mais restritivas (manual) L1 Controlo equivalente 755 O caminho da interface de rede de contentores do Azure nos clusters do Anthos é /opt/cni/bin e a respetiva autorização está definida como 755 para o funcionamento normal do cluster.
    1.1.10 Certifique-se de que a propriedade do ficheiro da interface de rede do contentor está definida como root:root (manual) L1 Controlo equivalente root:root O caminho da interface de rede de contentores dos clusters do Anthos no Azure é /opt/cni/bin e a respetiva propriedade está definida como root:root.
    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 Controlo equivalente 755 O diretório de dados etcd /opt/data/var/lib/etcd tem as autorizações 755 predefinidas, mas os respetivos subdiretórios são 700.
    1.1.12 Certifique-se de que a propriedade do diretório de dados do etcd está definida como etcd:etcd (Automático) L1 Controlo equivalente root:root O contentor etcd é executado como root e o diretório de dados etcd é propriedade de root:root.
    1.1.13 Certifique-se de que as autorizações do ficheiro.conf estão definidas como 600 ou mais restritivas (automáticas) L1 Controlo equivalente não definida Os clusters do Anthos no Azure não são compatíveis com o kubeadm.
    1.1.14 Certifique-se de que a propriedade do ficheiro.conf está definida como root:root (Automático) L1 Controlo equivalente não definida Os clusters do Anthos no Azure não são compatíveis com o kubeadm.
    1.2.10 Certifique-se de que o plug-in de controlo de admissão EventRateLimit está definido (manual) L1 Aviso não definida Os clusters do Anthos no Azure não suportam o controlador de admissão do limite de taxa de eventos, uma vez que é uma funcionalidade alfa do Kubernetes.
    1.2.12 Certifique-se de que o plug-in de controlo de admissão AlwaysPullImages está definido como (Manual) L1 Aviso não definida O controlador de admissão AlwaysPullImages oferece alguma proteção para imagens de registo privado em clusters multiinquilinos não cooperativos, ao custo de tornar os registos de contentores um único ponto de falha para a criação de novos pods em todo o cluster. O GKE on Azure não ativa o controlador de admissão AlwaysPullImages, o que deixa aos administradores do cluster a implementação da política de admissão para fazerem esta compensação por si próprios.
    1.2.13 Certifique-se de que o plug-in de controlo de admissão SecurityContextDeny está definido se não for usada a PodSecurityPolicy (manual) L1 Controlo equivalente não definida Os clusters do Anthos no Azure definem políticas de segurança predefinidas. Os clientes podem definir opções relacionadas com a segurança com um contexto de segurança. Mais informações sobre a descrição geral de segurança.
    1.2.19 Certifique-se de que o argumento --audit-log-path está definido (Automated) L1 Controlo equivalente não definida Os clusters do Anthos no Azure oferecem a opção de registo de auditoria na nuvem. Mais informações sobre os registos de auditoria do Cloud.
    1.2.20 Certifique-se de que o argumento --audit-log-maxage está definido como 30 ou conforme adequado (Automated) L1 Controlo equivalente não definida Os clusters do Anthos no Azure oferecem a opção de registo de auditoria na nuvem. Mais informações sobre os registos de auditoria do Cloud.
    1.2.21 Certifique-se de que o argumento --audit-log-maxbackup está definido como 10 ou conforme adequado (Automated) L1 Controlo equivalente não definida Os clusters do Anthos no Azure oferecem a opção de registo de auditoria na nuvem. Mais informações sobre os registos de auditoria do Cloud.
    1.2.22 Certifique-se de que o argumento --audit-log-maxsize está definido como 100 ou conforme adequado (Automated) L1 Controlo equivalente não definida Os clusters do Anthos no Azure oferecem a opção de registo de auditoria na nuvem. Mais informações sobre os registos de auditoria do Cloud.
    3.1.1 A autenticação por certificado de cliente não deve ser usada para utilizadores (manual) L2 Controlo equivalente Os clusters do Anthos no Azure suportam o OIDC como um dos mecanismos de autenticação para a ligação ao cluster. Saiba mais sobre como ligar e autenticar o seu cluster.
    3.2.2 Certifique-se de que a política de auditoria abrange as principais preocupações de segurança (manual) L2 Controlo equivalente não definida Os clusters do Anthos no Azure oferecem a opção de registo de auditoria na nuvem. Mais informações sobre os registos de auditoria do Cloud.
    4.2.4 Certifique-se de que o argumento --read-only-port está definido como 0 (Manual) L1 Falha 10255 Atualmente, os clusters do Anthos no Azure definem o argumento --read-only-port como 10255 para recolher métricas do kubelet.
    4.2.6 Certifique-se de que o argumento --protect-kernel-defaults está definido como verdadeiro (automatizado) L1 Falha false Os clusters do Anthos no Azure permitem que o kubelet defina as respetivas definições do kernel necessárias.
    4.2.9 Certifique-se de que o argumento --event-qps está definido como 0 ou um nível que garanta a captura de eventos adequada (manual) L2 Aviso não definida Os eventos são objetos do Kubernetes armazenados no etcd. Para evitar sobrecarregar o etcd, são mantidos apenas durante uma hora e não são um mecanismo de auditoria de segurança adequado. Permitir eventos ilimitados, conforme sugerido neste controlo, expõe o cluster a um risco de DoS desnecessário e contradiz a recomendação de usar EventRateLimits de admissão. Os eventos relevantes para a segurança que precisam de armazenamento permanente devem ser enviados para os registos.
    4.2.10 Certifique-se de que os argumentos --tls-cert-file e --tls-private-key-file estão definidos conforme adequado (manual) L1 Controlo equivalente não definida Os clusters do Anthos no Azure gerem o TLS do servidor kubelet através da flag serverTLSBootstrap.

    Como auditar referências

    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. As ferramentas indicadas abaixo podem ajudar com esta tarefa.

    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 node --benchmark cis-1.23