Comparativos do CIS

Esta página apresenta o comparativo de mercado CIS do Kubernetes, fornece uma avaliação e explica o que o Google Distributed Cloud faz para atender às recomendações.

O comparativo 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 para ser compatível com uma forte postura de segurança. O comparativo de mercado está vinculado a uma versão específica do Kubernetes. O comparativo de mercado CIS 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.

Versões

A tabela a seguir lista as versões do Distributed Cloud, do Kubernetes e do comparativo de mercado CIS do Kubernetes usadas para realizar a avaliação descrita neste documento:

Versão do Distributed Cloud Versão do Kubernetes Versão do comparativo de mercado CIS do Kubernetes
1.4.0: plano de controle local 1,25 1,70

Como acessar o comparativo de mercado

O comparativo de mercado CIS do Kubernetes está disponível no site do CIS.

Níveis de recomendação

No comparativo de mercado CIS do Kubernetes

Nível Descrição
Nível 1

A ideia é que as recomendações:

  • sejam práticas e prudentes;
  • forneçam um benefício de segurança claro;
  • não inibam a utilidade da tecnologia para além dos meios aceitáveis.
  • Nível 2

    Amplia o perfil de nível 1.

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

  • São destinadas a ambientes ou casos de uso em que a segurança é fundamental.
  • Atuam como medidas de defesa em profundidade.
  • podem inibir negativamente a utilidade ou o desempenho da tecnologia.
  • 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 têm suporte conforme definido abaixo:

    Pontuação Descrição
    Automatizado Representa recomendações para que avaliações de controle técnico possam ser totalmente automatizadas e validadas para um estado de aprovação/reprovação. As recomendações incluem as informações necessárias para implementar a automação.
    Manual Representa as recomendações para avaliações de controle técnico que não podem ser totalmente automatizadas e exige que todas ou algumas etapas manuais sejam feitas para confirmar se o estado configurado está definido como esperado. O estado esperado pode variar dependendo do ambiente.

    Status nos clusters do plano de controle local do Distributed Cloud

    # 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 644 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 644 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 644 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 644 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 644 ou são mais restritivas (manual) N1 Controle equivalente
    1.1.10 Verificar se a propriedade do arquivo da interface de rede do contêiner está definida como root:root (manual) N1 Aprovado
    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 Controle equivalente
    1.1.12 Verificar se a propriedade do diretório de dados do etcd está definida como etcd:etcd (automatizado) N1 Controle equivalente
    1.1.13 Verificar se as permissões do arquivo admin.conf estão definidas como 600 ou são mais restritivas (automatizado) N1 Aprovado
    1.1.14 Verificar se a propriedade do arquivo admin.conf está definida como root:root (automatizado) N1 Aprovado
    1.1.15 Verificar se as permissões do arquivo scheduler.conf estão definidas como 644 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 Controle equivalente
    1.1.17 Verificar se as permissões do arquivo controller-manager.conf estão definidas como 644 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 Controle equivalente
    1.1.19 Verificar se o diretório PKI do Kubernetes e a propriedade do arquivo estão definidos como root:root (automatizado) N1 Controle equivalente
    1.1.20 Verificar se as permissões do arquivo de certificado PKI do Kubernetes estão definidas como 644 ou são mais restritivas (manual) N1 Controle equivalente
    1.1.21 Verificar se as permissões do arquivo de chave PKI do Kubernetes estão definidas como 600 (manual) N1 Aprovado
    1.2 Servidor de API
    1.2.1 Verificar se o argumento --anonymous-auth está definido como falso (manual) N1 Aprovado
    1.2.2 Verificar se o parâmetro --token-auth-file não está definido (automatizado) N1 Aprovado
    1.2.3 Verificar se --DenyServiceExternalIPs não está definido (automatizado) N1 Reprovado
    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 Reprovado
    1.2.9 Verificar se o plug-in de controle de admissão EventRateLimit está definido (manual) N1 Aprovado
    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 Reprovado
    1.2.12 Verificar se o plug-in de controle de admissão SecurityContextDeny está definido, se PodSecurityPolicy não estiver sendo usado (manual) N1 Alerta
    1.2.13 Verificar se o plug-in de controle de admissão ServiceAccount está definido (automatizado) N1 Aprovado
    1.2.14 Verificar se o plug-in de controle de admissão NamespaceLifecycle está definido (automatizado) N1 Aprovado
    1.2.15 Verificar se o plug-in de controle de admissão NodeRestriction está definido (automatizado) N1 Aprovado
    1.2.16 Verificar se o argumento --secure-port não está definido como 0 (automatizado) N1 Aprovado
    1.2.17 Verificar se o argumento --profiling está definido como falso (automatizado) N1 Aprovado
    1.2.18 Verificar se o argumento --audit-log-path está definido (automatizado) N1 Reprovado
    1.2.19 Verificar se o argumento --audit-log-maxage está definido como 30 ou conforme apropriado (automatizado) N1 Reprovado
    1.2.20 Verificar se o argumento --audit-log-maxbackup está definido como 10 ou conforme apropriado (automatizado) N1 Falha
    1.2.21 Verificar se o argumento --audit-log-maxsize está definido como 100 ou conforme apropriado (automatizado) N1 Reprovado
    1.2.22 Verificar se o argumento --request-timeout está definido conforme apropriado (manual) N1 Falha
    1.2.23 Verificar se o argumento --service-account-lookup está definido como verdadeiro (automatizado) N1 Aprovado
    1.2.24 Verificar se o argumento --service-account-key-file está definido conforme apropriado (automatizado) N1 Aprovado
    1.2.25 Verificar se os argumentos --etcd-certfile e --etcd-keyfile estão definidos conforme apropriado (automatizados) N1 Aprovado
    1.2.26 Verificar se os argumentos --tls-cert-file e --tls-private-key-file estão definidos conforme apropriado (automatizados) N1 Aprovado
    1.2.27 Verificar se o argumento --client-ca-file está definido conforme apropriado (automatizado) N1 Aprovado
    1.2.28 Verificar se o argumento --etcd-cafile está definido conforme apropriado (automatizado) N1 Aprovado
    1.2.29 Verificar se o argumento --encryption-provider-config está definido conforme apropriado (manual) N1 Aprovado
    1.2.30 Verificar se os provedores de criptografia estão configurados corretamente (manual) N1 Aprovado
    1.2.31 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 o argumento --profiling está definido como falso (automatizado) N1 Aprovado
    1.3.3 Verificar se o argumento --use-service-account-credentials está definido como verdadeiro (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 verdadeiro (automatizado) L2 Aprovado
    1.3.7 Verificar se o argumento --bind-address está definido como 127.0.0.1 (automatizado) N1 Aprovado
    1.4 Programador
    1.4.1 Verificar se o argumento --profiling está definido como falso (automatizado) N1 Aprovado
    1.4.2 Verificar se o argumento --bind-address está definido como 127.0.0.1 (automatizado) N1 Aprovado
    2 ** etcd Configuração de nós**
    2.1 Verificar se os argumentos --cert-file e --key-file estão definidos conforme apropriado (automatizados) N1 Aprovado
    2.2 Verificar se o argumento --client-cert-auth está definido como verdadeiro (automatizado) N1 Aprovado
    2.3 Verificar se o argumento --auto-tls não está definido como verdadeiro (automatizado) N1 Aprovado
    2.4 Verificar se os argumentos --peer-cert-file e --peer-key-file estão definidos conforme apropriado (automatizados) N1 Aprovado
    2,5 Verificar se o argumento --peer-client-cert-auth está definido como verdadeiro (automatizado) N1 Aprovado
    2.6 Verificar se o argumento --peer-auto-tls não está definido como verdadeiro (automatizado) N1 Aprovado
    2.7 Verificar se uma autoridade de certificação exclusiva é usada para o etcd (manual) L2 Aprovado
    3 Configuração do plano de controle
    3.1 Autenticação e autorização
    3.1.1 Não é possível usar a autenticação de certificado do cliente para usuários (manual) L2 Aprovado
    3.2 Logging
    3.2.1 Verificar se uma política de auditoria mínima foi criada (manual) N1 Aprovado
    3.2.2 Verificar se a política de auditoria abrange as principais preocupações de segurança (manual) N2 Reprovado
    4 Configuração de segurança do nó de trabalho
    4.1 Arquivos de configuração do nó de trabalho
    4.1.1 Verificar se as permissões do arquivo de serviço do Kubelet estão definidas como 644 ou são mais restritivas (automatizado) N1 Reprovado
    4.1.2 Verificar se a propriedade do arquivo de serviço do Kubelet está definida como root:root (automatizado) N1 Aprovado
    4.1.3 Se houver um arquivo kubeconfig do proxy, verificar se as permissões estão definidas como 644 ou são mais restritivas (manual) N1 Aprovado
    4.1.4 Se o arquivo kubeconfig de proxy existir, verifique se a propriedade está definida como root:root (Manual) N1 Aprovado
    4.1.5 Verificar se as permissões do arquivo --kubeconfig kubelet.conf estão definidas como 644 ou são mais restritivas (automatizado) N1 Aprovado
    4.1.6 Verificar se a propriedade do arquivo --kubeconfig kubelet.conf está definida como root:root (automatizado) N1 Aprovado
    4.1.7 Verificar se as permissões do arquivo de autoridades de certificação estão definidas como 644 ou são mais restritivas (manual) N1 Reprovado
    4.1.8 Verificar se a propriedade do arquivo de autoridades de certificação do cliente está definida como root:root (manual) N1 Aprovado
    4.1.9 Verificar se o arquivo de configuração do kubelet --config tem permissões definidas como 644 ou são mais restritivas (automatizado) N1 Reprovado
    4.1.10 Verificar se a propriedade do arquivo de configuração do kubelet --config está definida como root:root (automatizado) N1 Aprovado
    4.2 Kubelet
    4.2.1 Verificar se o argumento --anonymous-auth está definido como falso (automatizado) N1 Aprovado
    4.2.2 Verificar se o argumento --authorization-mode não está definido como AlwaysAllow (automatizado) N1 Aprovado
    4.2.3 Verificar se o argumento --client-ca-file está definido conforme apropriado (automatizado) N1 Aprovado
    4.2.4 Verificar se o argumento --read-only-port está definido como 0 (manual) N1 Reprovado
    4.2.5 Verificar se o argumento --streaming-connection-idle-timeout não está definido como 0 (manual) N1 Aprovado
    4.2.6 Verificar se o argumento --protect-kernel-defaults está definido como verdadeiro (automatizado) N1 Aprovado
    4.2.7 Verificar se o argumento --make-iptables-util-chains está definido como verdadeiro (automatizado) N1 Aprovado
    4.2.8 Verificar se o argumento --hostname-override não está definido (manual) N2 Aprovado
    4.2.9 Verificar se o argumento --event-qps está definido como 0 ou em um nível que garanta a captura apropriada do evento (manual) N1 Controle equivalente
    4.2.10 Verificar se os argumentos --tls-cert-file e --tls-private-key-file estão definidos conforme apropriado (manual) N1 Aprovado
    4.2.11 Verificar se o argumento --rotate-certificates não está definido como falso (automatizado) N1 Aprovado
    4.2.12 Verificar se o argumento RotateKubeletServerCertificate está definido como verdadeiro (manual) N1 Aprovado
    4.2.13 Verificar se o Kubelet usa somente códigos criptográficos fortes (manual) N1 Reprovado

    Falhas e controles equivalentes para clusters do plano de controle local do Distributed Cloud

    # Recomendação Nível Status Valor Motivo
    1 Configuração de segurança do plano de controle
    1.1.9 Verificar se as permissões do arquivo da interface de rede do contêiner estão definidas como 644 ou são mais restritivas (manual) N1 Controle equivalente 755 Nenhuma.
    1.1.11 Verificar se as permissões do diretório de dados etcd estão definidas como 700 ou são mais restritivas (automatizado) N1 Controle equivalente 755 O diretório de dados etcd tem as permissões 755 padrão, mas os subdiretórios usam 700.
    1.1.12 Verificar se a propriedade do diretório de dados etcd está definida como etcd:etcd (automatizado) N1 Controle equivalente 2003:2003 O diretório de dados etcd, /var/lib/etcd, pertence a 2003:2003 devido ao plano de controle sem raiz para maior segurança.
    1.1.16 Verificar se a propriedade do arquivo scheduler.conf está definida como root:root (automatizado) N1 Controle equivalente 2002:2002 O scheduler.conf pertence a 2002:2002 devido ao plano de controle sem raiz para maior segurança.
    1.1.18 Verificar se a propriedade do arquivo controller-manager.conf está definida como root:root (automatizado) N1 Controle equivalente 2001:2001 O controller-manager.conf pertence a 2001:2001 devido ao plano de controle sem raiz para maior segurança.
    1.1.19 Verificar se o diretório PKI do Kubernetes e a propriedade do arquivo estão definidos como root:root (automatizado) N1 Controle equivalente Varia O diretório PKI, /etc/kubernetes/pki, é de propriedade de root:root, e os arquivos dentro do diretório têm vários proprietários. Isso se deve ao plano de controle sem raiz para maior segurança.
    1.1.20 Verificar se as permissões do arquivo de certificado PKI do Kubernetes estão definidas como 644 ou são mais restritivas (manual) N1 Controle equivalente 644 Isso se deve ao plano de controle sem raiz para maior segurança.
    1.2 Servidor de API
    1.2.3 Verificar se --DenyServiceExternalIPs não está definido (automatizado) N1 Reprovado
    1.2.9 Verificar se o argumento --authorization-mode inclui o RBAC (automatizado) N1 Reprovado O controlador de admissão da limitação de taxa de eventos é um recurso Alfa do Kubernetes. O Google Distributed Cloud não é compatível com recursos que não são GA.
    1.2.11 Verificar se o plug-in de controle de admissão AlwaysAdmit não está definido (automatizado) N1 Reprovado
    1.2.12 Verificar se o plug-in de controle de admissão AlwaysPullImages está definido (manual) N1 Reprovado O controlador de admissão AlwaysPullImages oferece alguma proteção para imagens de registros particulares em clusters multilocatários não cooperativos. Mas isso faz com que os registros do contêiner se tornem um único ponto de falha para criar novos pods em todo o cluster. Os clusters do Distributed Cloud não ativam o controlador de admissão AlwaysPullImages, o que permite aos administradores do cluster implementar a política de admissão para fazer essa operação por conta própria.
    1.2.18 Verificar se o argumento --audit-log-path está definido (automatizado) N1 Reprovado O Distributed Cloud captura registros de auditoria, mas não usa essa flag para auditoria. Consulte Registro de auditoria para mais informações.
    1.2.19 Verificar se o argumento --audit-log-maxage está definido como 30 ou conforme apropriado (automatizado) N1 Reprovado O Distributed Cloud captura registros de auditoria, mas não usa essa flag para auditoria. Consulte Registro de auditoria para mais informações.
    1.2.20 Verificar se o argumento --audit-log-maxbackup está definido como 10 ou conforme apropriado (automatizado) N1 Reprovado O Distributed Cloud captura registros de auditoria, mas não usa essa flag para auditoria. Consulte Registro de auditoria para mais informações.
    1.2.21 Verificar se o argumento --audit-log-maxsize está definido como 100 ou conforme apropriado (automatizado) N1 Reprovado O Distributed Cloud captura registros de auditoria, mas não usa essa flag para auditoria. Consulte Registro de auditoria para mais informações.
    1.2.22 Verificar se o argumento --request-timeout está definido conforme apropriado (manual) N1 Reprovado O Distributed Cloud captura registros de auditoria, mas não usa essa flag para auditoria. Consulte Registro de auditoria para mais informações.
    3 Configuração do plano de controle
    3.2.2 Verificar se a política de auditoria abrange as principais preocupações de segurança (manual) N2 Reprovado
    4 Configuração de segurança do nó de trabalho
    4.1.1 Verificar se as permissões do arquivo de serviço do Kubelet estão definidas como 644 ou são mais restritivas (automatizado) N1 Reprovado 755
    4.1.7 Verificar se as permissões do arquivo de autoridades de certificação estão definidas como 644 ou são mais restritivas (manual) N1 Reprovado
    4.1.9 Verificar se o arquivo de configuração do kubelet --config tem permissões definidas como 644 ou são mais restritivas (automatizado) N1 Reprovado 644
    4.2.4 Verificar se o argumento --read-only-port está definido como 0 (manual) N1 Reprovado Os clusters do Distributed Cloud definem o argumento --read-only-port como 10255 para coletar métricas do kubelet.
    4.2.9 Verificar se o argumento --event-qps está definido como 0 ou em um nível que garanta a captura apropriada do evento (manual) N1 Controle equivalente Os clusters do Distributed Cloud gerenciam o TLS do servidor kubelet usando a flag –rotate-server-certificates.
    4.2.13 Verificar se o Kubelet usa somente códigos criptográficos fortes (manual) N1 Reprovado